Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ A Watch Face Format (WFF) v1 watch face featuring a fire-service aerial ladder t
- Fire engine seen from above = hour hand
- Turntable = center
- Extended aerial ladder + rescue basket = minute hand
- At the top of the hour (`MINUTE == 0`) the two blue emergency lights flash alternately for 60 seconds
- The two blue emergency lights flash alternately; when they do is configurable in the watch face editor on the watch (long-press the watch face → edit): "Off", "On the hour" (default, active during minute 00) or "Always on"
- The blue lights are disabled in ambient / always-on display mode
- The subtle dial reacts slightly to the watch's tilt; the actual hands stay geometrically fixed to the center so the time remains accurate

Expand All @@ -26,7 +26,7 @@ Preparation on the watch (needed for either route — Wear OS only allows sidelo
1. Enable developer options: Settings → System → About → tap "Build number" seven times.
2. Enable Settings → Developer options → Wireless debugging. The watch must be on the same Wi-Fi network as the phone or computer.

Updates install the same way as a first install; since all releases are signed with the same key, no uninstall is needed. After installing, long-press the current watch face on the watch and select `Drehleiter` from the picker.
Updates install the same way as a first install; since all releases are signed with the same key, no uninstall is needed. After installing, long-press the current watch face on the watch and select `Aerial Ladder` (German: `Drehleiter`) from the picker.

### With an Android phone (no computer, no adb)

Expand Down Expand Up @@ -56,10 +56,10 @@ Updates install the same way as a first install; since all releases are signed w
`gradle wrapper --gradle-version 9.2.1`
4. Connect the Pixel Watch to Android Studio via wireless debugging / ADB.
5. Launch the run configuration for the `watchface` module.
6. Select the `Drehleiter` watch face on the watch.
6. Select the `Aerial Ladder` (German: `Drehleiter`) watch face on the watch.

## Notes

- The project targets Wear OS API 33+, which makes it suitable for the Pixel Watch 1.
- The blue lights flash intentionally instead of staying lit. The logic lives directly in `watchface.xml` and can easily be changed to a steady light.
- The blue lights flash intentionally instead of staying lit. The logic lives directly in `watchface.xml`; the off/hourly/always behavior is a WFF `ListConfiguration` user setting. Note that "Always on" costs noticeably more battery while the display is active.
- The geometry is built entirely from WFF vector primitives; the watch face itself has no bitmap dependency.
17 changes: 14 additions & 3 deletions watchface/src/main/res/raw/watchface.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@
<Metadata key="CLOCK_TYPE" value="ANALOG" />
<Metadata key="PREVIEW_TIME" value="10:00:12" />

<UserConfigurations>
<ListConfiguration id="blueLightMode"
displayName="@string/blue_light_mode"
screenReaderText="@string/blue_light_mode"
defaultValue="hourly">
<ListOption id="off" displayName="@string/blue_light_mode_off" />
<ListOption id="hourly" displayName="@string/blue_light_mode_hourly" />
<ListOption id="always" displayName="@string/blue_light_mode_always" />
</ListConfiguration>
</UserConfigurations>

<Scene backgroundColor="#000000">
<!-- Subtle orientation-reactive dial. The time-bearing parts remain fixed to the center. -->
<Group x="0" y="0" width="450" height="450" name="tilt_dial" alpha="150">
Expand Down Expand Up @@ -77,13 +88,13 @@

<!--
Emergency lights.
Final mode: active only during minute 00.
For permanent testing, replace "[MINUTE] == 0" below with "1".
Driven by the user configuration "blueLightMode":
off / hourly (active during minute 00) / always.
-->
<Condition>
<Expressions>
<Expression name="blue_lights_active">
<![CDATA[[MINUTE] == 0 || false]]>
<![CDATA[[CONFIGURATION.blueLightMode] == "always" || ([CONFIGURATION.blueLightMode] == "hourly" && [MINUTE] == 0)]]>
</Expression>
</Expressions>

Expand Down
8 changes: 8 additions & 0 deletions watchface/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="watch_face_name">Drehleiter</string>
<string name="blue_light_mode">Blaulicht</string>
<string name="blue_light_mode_off">Aus</string>
<string name="blue_light_mode_hourly">Zur vollen Stunde</string>
<string name="blue_light_mode_always">Immer an</string>
</resources>
6 changes: 5 additions & 1 deletion watchface/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="watch_face_name">Drehleiter</string>
<string name="watch_face_name">Aerial Ladder</string>
<string name="blue_light_mode">Blue lights</string>
<string name="blue_light_mode_off">Off</string>
<string name="blue_light_mode_hourly">On the hour</string>
<string name="blue_light_mode_always">Always on</string>
</resources>
2 changes: 1 addition & 1 deletion watchface/src/main/res/xml/watch_face_info.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<WatchFaceInfo>
<Preview value="@drawable/preview" />
<Editable value="false" />
<Editable value="true" />
</WatchFaceInfo>
Loading