@@ -16,7 +16,7 @@ namespace {
1616
1717SettingWakeUp::SettingWakeUp (Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
1818 : Screen(app), settingsController {settingsController} {
19-
19+ ignoringEvents = false ;
2020 lv_obj_t * container1 = lv_cont_create (lv_scr_act (), nullptr );
2121
2222 lv_obj_set_style_local_bg_opa (container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP);
@@ -42,34 +42,26 @@ SettingWakeUp::SettingWakeUp(Pinetime::Applications::DisplayApp* app, Pinetime::
4242
4343 optionsTotal = 0 ;
4444 cbOption[optionsTotal] = lv_checkbox_create (container1, nullptr );
45- lv_checkbox_set_text_static (cbOption[optionsTotal], " None" );
46- cbOption[optionsTotal]->user_data = this ;
47- lv_obj_set_event_cb (cbOption[optionsTotal], event_handler);
48- if (settingsController.getWakeUpMode () == Pinetime::Controllers::Settings::WakeUpMode::None) {
49- lv_checkbox_set_checked (cbOption[optionsTotal], true );
50- }
51- optionsTotal++;
52- cbOption[optionsTotal] = lv_checkbox_create (container1, nullptr );
5345 lv_checkbox_set_text_static (cbOption[optionsTotal], " Single Tap" );
5446 cbOption[optionsTotal]->user_data = this ;
5547 lv_obj_set_event_cb (cbOption[optionsTotal], event_handler);
56- if (settingsController.getWakeUpMode () == Pinetime::Controllers::Settings::WakeUpMode::SingleTap) {
48+ if (settingsController.isWakeUpModeOn ( Pinetime::Controllers::Settings::WakeUpMode::SingleTap) ) {
5749 lv_checkbox_set_checked (cbOption[optionsTotal], true );
5850 }
5951 optionsTotal++;
6052 cbOption[optionsTotal] = lv_checkbox_create (container1, nullptr );
6153 lv_checkbox_set_text_static (cbOption[optionsTotal], " Double Tap" );
6254 cbOption[optionsTotal]->user_data = this ;
6355 lv_obj_set_event_cb (cbOption[optionsTotal], event_handler);
64- if (settingsController.getWakeUpMode () == Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) {
56+ if (settingsController.isWakeUpModeOn ( Pinetime::Controllers::Settings::WakeUpMode::DoubleTap) ) {
6557 lv_checkbox_set_checked (cbOption[optionsTotal], true );
6658 }
6759 optionsTotal++;
6860 cbOption[optionsTotal] = lv_checkbox_create (container1, nullptr );
6961 lv_checkbox_set_text_static (cbOption[optionsTotal], " Raise Wrist" );
7062 cbOption[optionsTotal]->user_data = this ;
7163 lv_obj_set_event_cb (cbOption[optionsTotal], event_handler);
72- if (settingsController.getWakeUpMode () == Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) {
64+ if (settingsController.isWakeUpModeOn ( Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) ) {
7365 lv_checkbox_set_checked (cbOption[optionsTotal], true );
7466 }
7567 optionsTotal++;
@@ -85,27 +77,31 @@ bool SettingWakeUp::Refresh() {
8577}
8678
8779void SettingWakeUp::UpdateSelected (lv_obj_t * object, lv_event_t event) {
88- if (event == LV_EVENT_VALUE_CHANGED) {
89- for (int i = 0 ; i < optionsTotal; i++) {
90- if (object == cbOption[i]) {
91- lv_checkbox_set_checked (cbOption[i], true );
80+ using WakeUpMode = Pinetime::Controllers::Settings::WakeUpMode;
81+ if (event == LV_EVENT_VALUE_CHANGED && !ignoringEvents) {
82+ ignoringEvents = true ;
9283
93- if (i == 0 ) {
94- settingsController.setWakeUpMode (Pinetime::Controllers::Settings::WakeUpMode::None);
95- };
96- if (i == 1 ) {
97- settingsController.setWakeUpMode (Pinetime::Controllers::Settings::WakeUpMode::SingleTap);
98- };
99- if (i == 2 ) {
100- settingsController.setWakeUpMode (Pinetime::Controllers::Settings::WakeUpMode::DoubleTap);
101- };
102- if (i == 3 ) {
103- settingsController.setWakeUpMode (Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist);
104- };
105-
106- } else {
107- lv_checkbox_set_checked (cbOption[i], false );
84+ // Find the index of the checkbox that triggered the event
85+ int index = 0 ;
86+ for (; index < optionsTotal; ++index) {
87+ if (cbOption[index] == object) {
88+ break ;
10889 }
10990 }
91+
92+ // Toggle needed wakeup mode
93+ auto mode = static_cast <WakeUpMode>(index);
94+ auto currentState = settingsController.isWakeUpModeOn (mode);
95+ settingsController.setWakeUpMode (mode, !currentState);
96+
97+ // Update checkbox according to current wakeup modes.
98+ // This is needed because we can have extra logic when setting or unsetting wakeup modes,
99+ // for example, when setting SingleTap, DoubleTap is unset and vice versa.
100+ auto modes = settingsController.getWakeUpModes ();
101+ for (int i = 0 ; i < optionsTotal; ++i) {
102+ lv_checkbox_set_checked (cbOption[i], modes[i]);
103+ }
104+
105+ ignoringEvents = false ;
110106 }
111- }
107+ }
0 commit comments