Do not ignore wakeup events while in setter

This commit is contained in:
2026-08-10 20:33:12 -04:00
parent 8ddaffc2b5
commit 1c792aab47
+76 -66
View File
@@ -290,67 +290,6 @@ static void highlight_layer_update_proc(Layer *layer, GContext *ctx) {
graphics_fill_rect(ctx, fill_area, 0, GCornerNone);
}
static void setter_window_load() {
s_setter_highlight_color = GColorMediumAquamarine;
Layer *window_layer = window_get_root_layer(s_window);
// top&bottom bars
add_bar_layers_to_window(window_layer, false);
// clock icon
s_clock_bmp = gbitmap_create_with_resource(RESOURCE_ID_CLOCK35);
s_clock_bmp_layer = bitmap_layer_create(GRect(PBL_IF_ROUND_ELSE(0, 14), PBL_IF_ROUND_ELSE(6, 0), s_top_bar_grect.size.w, s_top_bar_grect.size.h));
bitmap_layer_set_bitmap(s_clock_bmp_layer, s_clock_bmp);
bitmap_layer_set_alignment(s_clock_bmp_layer, PBL_IF_ROUND_ELSE(GAlignTop, GAlignLeft));
bitmap_layer_set_compositing_mode(s_clock_bmp_layer, GCompOpSet);
layer_add_child(window_layer, bitmap_layer_get_layer(s_clock_bmp_layer));
// check icon
s_check_bmp = gbitmap_create_with_resource(RESOURCE_ID_CHECK);
s_check_bmp_layer = bitmap_layer_create(s_bottom_bar_grect);
bitmap_layer_set_bitmap(s_check_bmp_layer, s_check_bmp);
bitmap_layer_set_compositing_mode(s_check_bmp_layer, GCompOpSet);
layer_add_child(window_layer, bitmap_layer_get_layer(s_check_bmp_layer));
// countdown
s_counter_txt_layer = text_layer_create(GRect(PBL_IF_ROUND_ELSE(0, 39), (s_top_bar_grect.size.h / 2) + PBL_IF_ROUND_ELSE(10, -10), PBL_IF_ROUND_ELSE(s_top_bar_grect.size.w, s_top_bar_grect.size.w - 39), 32));
text_layer_set_text_alignment(s_counter_txt_layer, GTextAlignmentCenter);
text_layer_set_text_color(s_counter_txt_layer, GColorWhite);
text_layer_set_background_color(s_counter_txt_layer, GColorClear);
text_layer_set_font(s_counter_txt_layer, s_font_lecoish_small);
layer_add_child(window_layer, text_layer_get_layer(s_counter_txt_layer));
update_countdown_display();
// highlighter
s_setter_highlight_layer = layer_create(GRect(0, s_top_bar_grect.size.h, PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT - (2 * s_top_bar_grect.size.h)));
layer_set_update_proc(s_setter_highlight_layer, highlight_layer_update_proc);
layer_add_child(window_layer, s_setter_highlight_layer);
// setter
s_font_lecoish_big = fonts_load_custom_font(resource_get_handle(PBL_IF_ROUND_ELSE(RESOURCE_ID_FONT_LECOISH_MONO_BOLD_60, RESOURCE_ID_FONT_LECOISH_MONO_BOLD_40)));
s_setter_txt_layer = text_layer_create(GRect(0, (PBL_DISPLAY_HEIGHT / 2) - PBL_IF_ROUND_ELSE(30, 20), PBL_DISPLAY_WIDTH, PBL_IF_ROUND_ELSE(60, 40)));
text_layer_set_text_alignment(s_setter_txt_layer, GTextAlignmentCenter);
text_layer_set_background_color(s_setter_txt_layer, GColorClear);
text_layer_set_font(s_setter_txt_layer, s_font_lecoish_big);
layer_add_child(window_layer, text_layer_get_layer(s_setter_txt_layer));
update_setter_display();
tick_timer_service_subscribe(SECOND_UNIT, setter_seconds_handler);
}
static void setter_window_unload() {
text_layer_destroy(s_setter_txt_layer);
layer_destroy(s_setter_highlight_layer);
text_layer_destroy(s_counter_txt_layer);
bitmap_layer_destroy(s_check_bmp_layer);
bitmap_layer_destroy(s_clock_bmp_layer);
gbitmap_destroy(s_check_bmp);
gbitmap_destroy(s_clock_bmp);
layer_destroy(s_bottom_bar_layer);
layer_destroy(s_top_bar_layer);
fonts_unload_custom_font(s_font_lecoish_big);
}
static void alarm_seconds_handler(struct tm *tick_time, TimeUnits units_changed) {
// re-schedule fallback alarm every 15 seconds
if (tick_time->tm_sec % 15 == 0) {
@@ -766,6 +705,81 @@ static void alarm_click_config_provider(void *ctx) {
window_long_click_subscribe(BUTTON_ID_SELECT, 2500, alarm_select_hold_handler, NULL);
}
static void push_alarm_window() {
window_set_window_handlers(
s_window,
(WindowHandlers){.load = alarm_window_load, .unload = alarm_window_unload});
window_set_click_config_provider(s_window, alarm_click_config_provider);
window_stack_push(s_window, false);
}
static void live_wakeup_handler_for_setter(WakeupId id, int32_t reason) {
window_stack_pop_all(false);
push_alarm_window();
}
static void setter_window_load() {
s_setter_highlight_color = GColorMediumAquamarine;
Layer *window_layer = window_get_root_layer(s_window);
// top&bottom bars
add_bar_layers_to_window(window_layer, false);
// clock icon
s_clock_bmp = gbitmap_create_with_resource(RESOURCE_ID_CLOCK35);
s_clock_bmp_layer = bitmap_layer_create(GRect(PBL_IF_ROUND_ELSE(0, 14), PBL_IF_ROUND_ELSE(6, 0), s_top_bar_grect.size.w, s_top_bar_grect.size.h));
bitmap_layer_set_bitmap(s_clock_bmp_layer, s_clock_bmp);
bitmap_layer_set_alignment(s_clock_bmp_layer, PBL_IF_ROUND_ELSE(GAlignTop, GAlignLeft));
bitmap_layer_set_compositing_mode(s_clock_bmp_layer, GCompOpSet);
layer_add_child(window_layer, bitmap_layer_get_layer(s_clock_bmp_layer));
// check icon
s_check_bmp = gbitmap_create_with_resource(RESOURCE_ID_CHECK);
s_check_bmp_layer = bitmap_layer_create(s_bottom_bar_grect);
bitmap_layer_set_bitmap(s_check_bmp_layer, s_check_bmp);
bitmap_layer_set_compositing_mode(s_check_bmp_layer, GCompOpSet);
layer_add_child(window_layer, bitmap_layer_get_layer(s_check_bmp_layer));
// countdown
s_counter_txt_layer = text_layer_create(GRect(PBL_IF_ROUND_ELSE(0, 39), (s_top_bar_grect.size.h / 2) + PBL_IF_ROUND_ELSE(10, -10), PBL_IF_ROUND_ELSE(s_top_bar_grect.size.w, s_top_bar_grect.size.w - 39), 32));
text_layer_set_text_alignment(s_counter_txt_layer, GTextAlignmentCenter);
text_layer_set_text_color(s_counter_txt_layer, GColorWhite);
text_layer_set_background_color(s_counter_txt_layer, GColorClear);
text_layer_set_font(s_counter_txt_layer, s_font_lecoish_small);
layer_add_child(window_layer, text_layer_get_layer(s_counter_txt_layer));
update_countdown_display();
// highlighter
s_setter_highlight_layer = layer_create(GRect(0, s_top_bar_grect.size.h, PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT - (2 * s_top_bar_grect.size.h)));
layer_set_update_proc(s_setter_highlight_layer, highlight_layer_update_proc);
layer_add_child(window_layer, s_setter_highlight_layer);
// setter
s_font_lecoish_big = fonts_load_custom_font(resource_get_handle(PBL_IF_ROUND_ELSE(RESOURCE_ID_FONT_LECOISH_MONO_BOLD_60, RESOURCE_ID_FONT_LECOISH_MONO_BOLD_40)));
s_setter_txt_layer = text_layer_create(GRect(0, (PBL_DISPLAY_HEIGHT / 2) - PBL_IF_ROUND_ELSE(30, 20), PBL_DISPLAY_WIDTH, PBL_IF_ROUND_ELSE(60, 40)));
text_layer_set_text_alignment(s_setter_txt_layer, GTextAlignmentCenter);
text_layer_set_background_color(s_setter_txt_layer, GColorClear);
text_layer_set_font(s_setter_txt_layer, s_font_lecoish_big);
layer_add_child(window_layer, text_layer_get_layer(s_setter_txt_layer));
update_setter_display();
wakeup_service_subscribe(live_wakeup_handler_for_setter);
tick_timer_service_subscribe(SECOND_UNIT, setter_seconds_handler);
}
static void setter_window_unload() {
text_layer_destroy(s_setter_txt_layer);
layer_destroy(s_setter_highlight_layer);
text_layer_destroy(s_counter_txt_layer);
bitmap_layer_destroy(s_check_bmp_layer);
bitmap_layer_destroy(s_clock_bmp_layer);
gbitmap_destroy(s_check_bmp);
gbitmap_destroy(s_clock_bmp);
layer_destroy(s_bottom_bar_layer);
layer_destroy(s_top_bar_layer);
fonts_unload_custom_font(s_font_lecoish_big);
}
static void init() {
s_window = window_create();
s_font_lecoish_small = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_LECOISH_MONO_BOLD_20));
@@ -777,11 +791,7 @@ static void init() {
switch (launch_reason()) {
case APP_LAUNCH_PHONE: // DEBUG, REMOVE PRIOR TO RELEASE!
case APP_LAUNCH_WAKEUP:
window_set_window_handlers(
s_window,
(WindowHandlers){.load = alarm_window_load, .unload = alarm_window_unload});
window_set_click_config_provider(s_window, alarm_click_config_provider);
window_stack_push(s_window, false);
push_alarm_window();
break;
default:
window_set_window_handlers(