Skip to content

The watch tells the phone what it did with the pushed face - #9

Merged
Philoul merged 2 commits into
Philoul:wear/cwf_wfffrom
olorinmaia:phone/fix/pushed_face_card_by_watch_capability
Sep 15, 2026
Merged

Philoul merged 2 commits into
Philoul:wear/cwf_wfffrom
olorinmaia:phone/fix/pushed_face_card_by_watch_capability

Conversation

@olorinmaia

Copy link
Copy Markdown

Follow-up to your review of the phone screen, on top of wear/cwf_wff.
One commit, tested on a Galaxy Watch 5 (Wear OS 6).

What changed

  • The Custom watchface controls are never hidden. They sit in their own card, exactly as before this work.
  • The face choice is its own card and shows only when the watch has reported Watch Face Push. The watch sends WatchFacePushStatus (supported, installedFace) after the startup sync, after every install and in reply to the preferences. An older wear app never sends it, so it never sees the choice. Watches below Wear OS 6 report "unsupported" and never see it either.
  • While the watch still holds the other face, the chosen row says "Installing…" until the watch reports the swap. No red text.
  • Sending a custom watchface while the complications face is selected shows a dialog once: the zip is stored on the watch, but nothing shows it until Custom watchface is selected. This replaces the persistent warning line.
  • The confirmation before a switch reads "X will replace the Y on the watch." The Wear OS 6 and editor-reset sentences are gone.

Testing

  • Old wear build + new phone: no face choice shown.
  • New wear build: the card appears when the watch connects; switching shows "Installing…" for the seconds the swap takes, then clears.
  • Reinstall the wear app with Complications selected on the phone: the watch swaps to it by itself after connecting.
  • Send a zip with Complications selected: the dialog appears, the zip is stored, and selecting Custom watchface shows it.

Screenshots:
image

image image

The face choice on the phone applies only to a watch with Watch Face
Push (Wear OS 6+), but the phone showed it to every watch, and hid the
Custom watchface controls for the complications face - a dead end on a
watch that runs the code-based face, or for loading a zip before
switching.

The watch now reports WatchFacePushStatus(supported, installedFace)
after the startup sync, after every install and in reply to the
preferences. The phone shows the choice only when the watch said it is
supported, in a card of its own with the complications face's picture
when that face is selected. The Custom watchface card is always there.
While the watch still holds the other face, the chosen row says
"Installing…" until the watch reports the swap. A custom watchface sent
while the complications face is selected is stored on the watch but
not shown, and a dialog says so at that moment.

A reinstalled wear app started with the default face and kept it until
something asked the phone for the preferences, which on a watch with
only the pushed face nothing did. The data layer service asks once at
start, as soon as a node is known, so the phone's choice wins within
seconds of connecting.

The confirmation before a switch names both faces and drops the notes
about Wear OS 6 and editor settings.
The lock that serialises installs lives in the helper instance, and the
helper had no scope, so every injection site got its own instance and
its own lock: the app, the data handler, the menu and the data layer
service. After a reinstall the startup sync and the preferences from
the phone still installed side by side, both found the slot empty, and
the second failed with "limit reached" while the phone said
"Installing…" for good. The helper is now a singleton.

Two smaller things on the same path. A fresh install waits a few
seconds for the phone's choice before installing the default, since
the phone answers the resend request well within that time - measured
0.6 s - and the default would only be swapped out again. And an
install whose token is already the synced one returns at once, so two
callers wanting the same face no longer install it twice; a menu tap
still installs, because that is the wearer asking for a face they
removed.
@Philoul
Philoul merged commit 0c14d67 into Philoul:wear/cwf_wff Sep 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants