Skip to content
sameerasw edited this page Aug 9, 2026 · 1 revision

⌚ Watch (WearOS)

The Watch feature group connects Essentials to your WearOS smartwatch via the Wearable Data Layer API, enabling two-way sync and remote control features.


Setup

The Watch features require the Essentials WearOS companion app installed on your smartwatch.

→ Essentials WearOS on GitHub

Communication uses the Google Wearable MessageClient and DataClient APIs.


Calendar Sync

ID: Calendar Sync
Permissions: READ_CALENDAR
Toggle: Yes

Periodically syncs all phone calendars to your WearOS watch so your events stay up to date.

How it works

  • CalendarSyncManager reads calendars from the phone's CalendarContract
  • Data is sent to the watch via DataClient.putDataItem()
  • CalendarSyncWorker schedules periodic background sync via WorkManager

Notes

  • Syncs all visible phone calendars — no per-calendar filtering yet
  • Sync interval is managed by WorkManager constraints (network/battery state)
  • Requires READ_CALENDAR to access your phone's calendar data

Lock from Watch

ID: Lock from Watch
Sub-feature of: Watch

Allows your WearOS watch to send a lock command to your phone. Useful when you've left your phone across the room.

How it works

  • Watch sends a MessageClient message on the /lock_phone path
  • EssentialsWearableListenerService on the phone receives it and locks the screen via DevicePolicyManager.lockNow()

Settings Screen

Opens LockFromWatchSettingsUI — configure which watch gestures trigger the lock.


Watch Controls

ID: Watch Controls
Sub-feature of: Watch

Control certain phone features from your watch — media playback, sound mode, and more.

Settings Screen

Opens WatchControlsSettingsUI — view and configure available watch-initiated actions.


Watch Wireless Debugging

ID: Watch Wireless Debugging
Toggle: Yes
Sub-feature of: Watch

Toggles ADB over WiFi on your WearOS watch from the phone. Useful for debugging the watch companion app without a physical USB connection.

How it works

Sends a MessageClient message to connected watch nodes on the /toggle_watch_adb_wifi path. The watch companion app receives it and toggles its ADB WiFi setting.

State persistence

The toggle state is stored in SharedPreferences under the key watch_adb_wifi_enabled.


Sync Sound Mode

ID: Sync sound mode
Toggle: Yes
Sub-feature of: Watch

Keeps the phone and watch sound mode in sync. When you switch to Silent or Vibrate on one device, the other follows.

How it works

  • State stored in SharedPreferences key watch_sync_sound_mode_enabled
  • When enabled, DeviceInfoSyncManager.forceSync() is called to push current sound mode to the watch
  • The watch companion app applies the received sound mode

Sync Location Reached Status

ID: Sync location reached status
Toggle: Yes
Sub-feature of: Watch

Shares the Location Reached (geofence arrival) status with your watch, allowing the watch to display an alert or take action when you're near your destination.

How it works

  • State stored under watch_sync_location_reached_enabled
  • When a location is reached, DeviceInfoSyncManager.forceSync() pushes the state to the watch

Background Service

Watch communication is handled by EssentialsWearableListenerService which extends WearableListenerService:

EssentialsWearableListenerService
├── onMessageReceived()   — Phone receives commands from watch
├── onDataChanged()       — Sync data changes from watch
└── forceSync()           — Push phone state to watch

DeviceInfoSyncManager coordinates all data sent to the watch:

  • Battery level
  • Sound mode
  • Location reached status
  • Calendar events

Clone this wiki locally