Fix rare chance for main alarm to fully disarm if Trigalarm is left open for an unrealistically long period of time

This commit is contained in:
2026-08-23 11:00:37 -04:00
parent 3031d7509d
commit 0fe121f9ca
+26 -19
View File
@@ -59,7 +59,7 @@ static uint8_t s_highlight_pos = 0;
static bool s_skip_current_day = false; static bool s_skip_current_day = false;
//// alarm //// alarm
static WakeupReason s_alarm_reason; static WakeupReason s_alarm_reason;
static uint8_t s_solution_indices[3] = {8, 8, 8}; static uint8_t s_solution_indices[3];
static uint8_t s_selected_indices[3] = {9, 9, 9}; static uint8_t s_selected_indices[3] = {9, 9, 9};
static uint8_t s_awareness_countdown_int = 0; static uint8_t s_awareness_countdown_int = 0;
static char s_awareness_countdown_buf[4]; static char s_awareness_countdown_buf[4];
@@ -653,23 +653,6 @@ static void alarm_window_load() {
s_drop_window, s_drop_window,
(WindowHandlers){.load = drop_menu_window_load, .unload = drop_menu_window_unload}); (WindowHandlers){.load = drop_menu_window_load, .unload = drop_menu_window_unload});
// countdown
s_countdown_txt_layer = text_layer_create(GRect(0, (s_small_top_bar_height / 2) - PBL_IF_ROUND_ELSE(6, 10), PBL_DISPLAY_WIDTH, s_small_top_bar_height));
text_layer_set_background_color(s_countdown_txt_layer, GColorClear);
text_layer_set_text_color(s_countdown_txt_layer, GColorWhite);
text_layer_set_text_alignment(s_countdown_txt_layer, GTextAlignmentCenter);
if (s_alarm_reason == WAKE_AWARENESS_ALARM || s_alarm_reason == WAKE_RECOVERY_AWARENESS_ALARM) {
text_layer_set_font(s_countdown_txt_layer, s_font_lecoish_small);
s_awareness_countdown_int = settings.AwarenessTimeLimitSeconds;
s_awareness_zap_repeat_countdown = 0;
snprintf(s_awareness_countdown_buf, sizeof(s_awareness_countdown_buf), "%03u", s_awareness_countdown_int);
text_layer_set_text(s_countdown_txt_layer, s_awareness_countdown_buf);
} else {
text_layer_set_font(s_countdown_txt_layer, s_font_mansalva_small);
text_layer_set_text(s_countdown_txt_layer, "🏁 hold select 🏁");
}
layer_add_child(window_layer, text_layer_get_layer(s_countdown_txt_layer));
// setup vibes // setup vibes
s_vibe_segments[0] = (uint32_t)(s_triangle_layer->angle_A * 2); s_vibe_segments[0] = (uint32_t)(s_triangle_layer->angle_A * 2);
s_vibe_segments[1] = 200; s_vibe_segments[1] = 200;
@@ -681,10 +664,27 @@ static void alarm_window_load() {
.num_segments = ARRAY_LENGTH(s_vibe_segments), .num_segments = ARRAY_LENGTH(s_vibe_segments),
}; };
// countdown
s_countdown_txt_layer = text_layer_create(GRect(0, (s_small_top_bar_height / 2) - PBL_IF_ROUND_ELSE(6, 10), PBL_DISPLAY_WIDTH, s_small_top_bar_height));
text_layer_set_background_color(s_countdown_txt_layer, GColorClear);
text_layer_set_text_color(s_countdown_txt_layer, GColorWhite);
text_layer_set_text_alignment(s_countdown_txt_layer, GTextAlignmentCenter);
if (s_alarm_reason == WAKE_AWARENESS_ALARM || s_alarm_reason == WAKE_RECOVERY_AWARENESS_ALARM) { if (s_alarm_reason == WAKE_AWARENESS_ALARM || s_alarm_reason == WAKE_RECOVERY_AWARENESS_ALARM) {
s_awareness_countdown_int = settings.AwarenessTimeLimitSeconds;
s_awareness_zap_repeat_countdown = 0;
text_layer_set_font(s_countdown_txt_layer, s_font_lecoish_small);
snprintf(s_awareness_countdown_buf, sizeof(s_awareness_countdown_buf), "%03u", s_awareness_countdown_int);
text_layer_set_text(s_countdown_txt_layer, s_awareness_countdown_buf);
layer_add_child(window_layer, text_layer_get_layer(s_countdown_txt_layer));
schedule_alarm(WAKE_RECOVERY_AWARENESS_ALARM); schedule_alarm(WAKE_RECOVERY_AWARENESS_ALARM);
tick_timer_service_subscribe(SECOND_UNIT, awareness_alarm_seconds_handler); tick_timer_service_subscribe(SECOND_UNIT, awareness_alarm_seconds_handler);
} else { } else {
s_awareness_countdown_int = 0;
text_layer_set_font(s_countdown_txt_layer, s_font_mansalva_small);
text_layer_set_text(s_countdown_txt_layer, "🏁 hold select 🏁");
layer_add_child(window_layer, text_layer_get_layer(s_countdown_txt_layer));
schedule_alarm(WAKE_RECOVERY_MAIN_ALARM); schedule_alarm(WAKE_RECOVERY_MAIN_ALARM);
tick_timer_service_subscribe(SECOND_UNIT, main_alarm_seconds_handler); tick_timer_service_subscribe(SECOND_UNIT, main_alarm_seconds_handler);
} }
@@ -950,8 +950,15 @@ static void setter_click_config_provider(void *ctx) {
} }
static void live_wakeup_handler_for_setter(WakeupId id, int32_t reason) { static void live_wakeup_handler_for_setter(WakeupId id, int32_t reason) {
// reset values set in setter
s_highlight_pos = 0; s_highlight_pos = 0;
s_skip_current_day = false; // reset
// reset values potentially set by prior alarm
s_skip_current_day = false;
s_selected_indices[0] = 9;
s_selected_indices[1] = 9;
s_selected_indices[2] = 9;
window_stack_pop_all(false); window_stack_pop_all(false);
push_alarm_window(); push_alarm_window();
} }