From 2f03fa6659fb996f3f351f2b70e3220185ba43a4 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Fri, 14 Aug 2026 18:18:58 -0400 Subject: [PATCH] Fix chance for recovery alarm to overwrite main/awareness alarm after the equation has already been completed (while in status window) --- src/c/main.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/c/main.c b/src/c/main.c index a41edf6..b0ff5e7 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -135,15 +135,14 @@ static void status_window_load(StatusWindowPurpose purpose) { text_layer_set_text(s_status_txt_layer, "Congrats! To ensure you're awake, I'll re-open without vibrating in 9 minutes. Complete the equation within 60 seconds to disarm me. Take too long and I'll vibrate and re-schedule another alarm.\n\nPress SELECT to exit or BACK to disable this tutorial in the future (and exit)."); window_set_click_config_provider(s_status_window, status_main_tutorial_click_config_provider); break; - case STATUS_CONFIRMATION: - tick_timer_service_unsubscribe(); + case STATUS_CONFIRMATION: { static char s_status_confirmed_buffer[106]; snprintf(s_status_confirmed_buffer, sizeof(s_status_confirmed_buffer), "Alarm disarmed and re-set (%02u:%02u) successfully.\n\nPress SELECT to exit or BACK to change the alarm time.", the_time.HourSet, the_time.MinuteSet); text_layer_set_text(s_status_txt_layer, s_status_confirmed_buffer); window_set_click_config_provider(s_status_window, status_confirmation_click_config_provider); break; + } case STATUS_SET_FAILURE: - tick_timer_service_unsubscribe(); text_layer_set_text(s_status_txt_layer, "Failed to set an alarm.\nPress any button to return to alarm setter."); window_set_click_config_provider(s_status_window, status_set_failure_click_config_provider); break; @@ -663,8 +662,14 @@ static void alarm_select_hold_handler(void *recognizer, void *ctx) { } } + // solution is correct, meaning a non-recovery alarm needs scheduled; + // set dummy handler to avoid overwriting an important alarm with a + // no-longer-important recovery alarm + wakeup_service_subscribe(NULL); + if (s_alarming_for_awareness) { // set main alarm if the awareness alarm was solved + tick_timer_service_unsubscribe(); // alarm is fully disarmed - stop vibes+countdown for confirmation window if (schedule_alarm(MAIN_ALARM)) { push_status_window(STATUS_CONFIRMATION); }