Description
When an AsteroidOS watch is paired with an iPhone, incoming notifications continue to wake the watch screen and vibrate even if the iPhone is actively in Do Not Disturb (DND), Sleep, or a custom Focus Mode.
Root Cause Analysis
Because AsteroidOS interfaces with iOS natively via the Apple Notification Center Service (ANCS) protocol, it relies entirely on parsing BLE GATT notification data packets sent by the phone.
When an iPhone enters DND or a Focus mode, iOS does not stop transmitting notifications over ANCS. Instead, the OS marks these suppressed alerts by modifying the EventFlags bitmask within the initial ANCS Notification Characteristic packet. Specifically, Apple sets bit position 0 (EventFlagSilent) to true.
Currently, asteroid-btsyncd parses the basic text attributes (Title, Message, App ID) from the ANCS stream but seems to ignore the EventFlags byte. As a result, silent DND notifications are treated identically to active, loud notifications and are pushed straight to the internal D-Bus framework.
Proposed Solution / Implementation Details
To resolve this, the ANCS packet parser inside asteroid-btsyncd needs to extract and evaluate the EventFlags byte before broadcasting the notification payload to asteroid-launcher.
- Define the Flag: Define the silent bit mask based on Apple's official ANCS specifications:
#define ANCS_EVENT_FLAG_SILENT (1 << 0)
- Add a Conditional Check: Within the function that handles incoming ANCS notification attributes (where the event byte stream is unpacked), extract the event_flags field.
- Drop the Payload: If (event_flags & ANCS_EVENT_FLAG_SILENT) evaluates to true, return early or drop the package to prevent it from ever waking the UI or firing a haptic response.
Environment Details
• Watch OS: AsteroidOS (Latest stable / Nightly)
• Phone OS: iOS (All versions supporting Focus Modes / DND)
• Component: asteroid-btsyncd / ANCS sync daemon
Description
When an AsteroidOS watch is paired with an iPhone, incoming notifications continue to wake the watch screen and vibrate even if the iPhone is actively in Do Not Disturb (DND), Sleep, or a custom Focus Mode.
Root Cause Analysis
Because AsteroidOS interfaces with iOS natively via the Apple Notification Center Service (ANCS) protocol, it relies entirely on parsing BLE GATT notification data packets sent by the phone.
When an iPhone enters DND or a Focus mode, iOS does not stop transmitting notifications over ANCS. Instead, the OS marks these suppressed alerts by modifying the EventFlags bitmask within the initial ANCS Notification Characteristic packet. Specifically, Apple sets bit position 0 (EventFlagSilent) to true.
Currently, asteroid-btsyncd parses the basic text attributes (Title, Message, App ID) from the ANCS stream but seems to ignore the EventFlags byte. As a result, silent DND notifications are treated identically to active, loud notifications and are pushed straight to the internal D-Bus framework.
Proposed Solution / Implementation Details
To resolve this, the ANCS packet parser inside asteroid-btsyncd needs to extract and evaluate the EventFlags byte before broadcasting the notification payload to asteroid-launcher.
#define ANCS_EVENT_FLAG_SILENT (1 << 0)Environment Details
• Watch OS: AsteroidOS (Latest stable / Nightly)
• Phone OS: iOS (All versions supporting Focus Modes / DND)
• Component: asteroid-btsyncd / ANCS sync daemon