diff options
author | Joey Castillo <joeycastillo@utexas.edu> | 2022-01-19 14:32:33 -0500 |
---|---|---|
committer | Joey Castillo <joeycastillo@utexas.edu> | 2022-01-19 14:32:33 -0500 |
commit | 99c518e421b356bb0935963116e1a4f5902471f9 (patch) | |
tree | 49cb2a523f9aeec7bde2fb7d1bd50181b6fd5760 | |
parent | a499cebc3c1ac6fe355fd7bcc6dc3a9352aec8a3 (diff) | |
download | Sensor-Watch-99c518e421b356bb0935963116e1a4f5902471f9.tar.gz Sensor-Watch-99c518e421b356bb0935963116e1a4f5902471f9.tar.bz2 Sensor-Watch-99c518e421b356bb0935963116e1a4f5902471f9.zip |
movement: long press on MODE always dismisses the active face
-rw-r--r-- | movement/README.md | 2 | ||||
-rw-r--r-- | movement/movement.c | 5 | ||||
-rw-r--r-- | movement/movement.h | 2 |
3 files changed, 7 insertions, 2 deletions
diff --git a/movement/README.md b/movement/README.md index 4b52bbd4..0e1c3b40 100644 --- a/movement/README.md +++ b/movement/README.md @@ -57,7 +57,7 @@ In addition to the settings and context, this function receives another paramete There is also a `subsecond` property on the event that contains the fractional second of the event. If you are using 1 Hz updates, subsecond will always be 0. -You should set up a switch statement that handles, at the very least, the `EVENT_TICK` and `EVENT_MODE_BUTTON_UP` event types. The mode button up event occurs when the user presses the MODE button. **Your loop function SHOULD call the movement_move_to_next_face function in response to this event.** If you have a good reason to override this behavior (e.g. your user interface requires all three buttons), your watch face MUST call the movement_move_to_next_face function in response to the EVENT_MODE_LONG_PRESS event. If you fail to do this, the user will become stuck on your watch face. +You should set up a switch statement that handles, at the very least, the `EVENT_TICK` and `EVENT_MODE_BUTTON_UP` event types. The mode button up event occurs when the user presses the MODE button. **Your loop function SHOULD call the movement_move_to_next_face function in response to this event.** If you have a very good reason to override this behavior (e.g. your user interface requires all three buttons), you may do so, but the user will have to long-press the Mode button to advance to the next watch face. ### watch_face_resign diff --git a/movement/movement.c b/movement/movement.c index 2fc08d80..3dc1c060 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -332,6 +332,11 @@ bool app_loop(void) { if (event.event_type) { event.subsecond = movement_state.subsecond; can_sleep = watch_faces[movement_state.current_watch_face].loop(event, &movement_state.settings, watch_face_contexts[movement_state.current_watch_face]); + // escape hatch: a watch face may not resign on EVENT_MODE_BUTTON_DOWN. In that case, a long press of MODE should let them out. + if (event.event_type == EVENT_MODE_LONG_PRESS) { + movement_move_to_next_face(); + can_sleep = false; + } event.event_type = EVENT_NONE; } diff --git a/movement/movement.h b/movement/movement.h index e327bbdd..8949d026 100644 --- a/movement/movement.h +++ b/movement/movement.h @@ -112,7 +112,7 @@ typedef enum { EVENT_LIGHT_LONG_PRESS, // The light button was held for >2 seconds, and released. EVENT_MODE_BUTTON_DOWN, // The mode button has been pressed, but not yet released. EVENT_MODE_BUTTON_UP, // The mode button was pressed and released. - EVENT_MODE_LONG_PRESS, // The mode button was held for >2 seconds, and released. + EVENT_MODE_LONG_PRESS, // The mode button was held for >2 seconds, and released. NOTE: your watch face will resign immediately after receiving this event. EVENT_ALARM_BUTTON_DOWN, // The alarm button has been pressed, but not yet released. EVENT_ALARM_BUTTON_UP, // The alarm button was pressed and released. EVENT_ALARM_LONG_PRESS, // The alarm button was held for >2 seconds, and released. |