]> git.earman.xyz Git - sensor-watch.git/commitdiff
Long press of mode on home screen goes to settings
authorJames Haggerty <james@gruemail.com>
Tue, 18 Oct 2022 23:24:02 +0000 (10:24 +1100)
committerJames Haggerty <james@gruemail.com>
Tue, 18 Oct 2022 23:30:59 +0000 (10:30 +1100)
This also changes the default rotation so you don't see the settings
screens.

movement/movement.c
movement/movement_config.h

index 8c58b202a5e9adf7305e099eac8bdc8a17ca082b..558afc537ba31c1285a159d5816a4dd3fb2dcaac 100644 (file)
 #include "alt_fw/deep_space_now.h"
 #endif
 
+// Default to no secondary face behaviour.
+#ifndef MOVEMENT_SECONDARY_FACE_INDEX
+#define MOVEMENT_SECONDARY_FACE_INDEX MOVEMENT_NUM_FACES
+#endif
+
 #if __EMSCRIPTEN__
 #include <emscripten.h>
 #endif
@@ -203,7 +208,8 @@ void movement_move_to_face(uint8_t watch_face_index) {
 }
 
 void movement_move_to_next_face(void) {
-    movement_move_to_face((movement_state.current_watch_face + 1) % MOVEMENT_NUM_FACES);
+    uint16_t face_max = movement_state.current_watch_face < ((int16_t)MOVEMENT_SECONDARY_FACE_INDEX) ? MOVEMENT_SECONDARY_FACE_INDEX : MOVEMENT_NUM_FACES;
+    movement_move_to_face((movement_state.current_watch_face + 1) % face_max);
 }
 
 void movement_schedule_background_task(watch_date_time date_time) {
@@ -409,14 +415,18 @@ bool app_loop(void) {
         can_sleep = watch_faces[movement_state.current_watch_face].loop(event, &movement_state.settings, watch_face_contexts[movement_state.current_watch_face]);
 
         // Long-pressing MODE brings one back to the first face, provided that the watch face hasn't decided to send them elsewhere
-        // (and we're not currently on the first face).
+        // (and we're not currently on the first face). If we're currently on the first face, a long press
+        // of MODE sends us to the secondary faces (if defined).
         // Note that it's the face's responsibility to provide some way to get to the next face, so if EVENT_MODE_BUTTON_* is
         // used for face functionality EVENT_MODE_LONG_PRESS should probably be handled and next_face() triggered in the face
         // (which would effectively disable the normal 'long press to face 0' behaviour).
         if (event.event_type == EVENT_MODE_LONG_PRESS 
-            && movement_state.current_watch_face > 0 
             && !movement_state.watch_face_changed) {
-            movement_move_to_face(0);
+            if (movement_state.current_watch_face != 0) {
+                movement_move_to_face(0);
+            } else if (MOVEMENT_SECONDARY_FACE_INDEX != MOVEMENT_NUM_FACES) {
+                movement_move_to_face(MOVEMENT_SECONDARY_FACE_INDEX);
+            }
         }
         event.event_type = EVENT_NONE;
     }
index 944567764aff8a295d87b6c751526b87b52a3bec..ef6fb6e85a0c602b1a96d5b5c11eb8876426805b 100644 (file)
@@ -39,4 +39,11 @@ const watch_face_t watch_faces[] = {
 
 #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t))
 
+/* Determines what face to go to from the first face if you've already set 
+ * a mode long press to go to the first face in preferences, and
+ * excludes these faces from the normal rotation.
+ * Usually it makes sense to set this to the preferences face.
+ */
+#define MOVEMENT_SECONDARY_FACE_INDEX (MOVEMENT_NUM_FACES - 2)
+
 #endif // MOVEMENT_CONFIG_H_