From 22621219f32a7216d68f32f5c5936e5201c4578e Mon Sep 17 00:00:00 2001 From: Th3maz1ng Date: Mon, 10 Apr 2023 21:19:19 +0200 Subject: [PATCH] Corrected a potential bug, made the date and time rollers disabled when set automatic time and date is enabled. Added the set automatic time and date feature which time and dates, if enabled, are sent by the Gadget Bridge Android Application --- .../app/gfx/settings_screen.c | 76 +++++++++++++++++-- .../app/gfx/settings_screen.h | 2 + 2 files changed, 73 insertions(+), 5 deletions(-) diff --git a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c index 325ec11..9f3b398 100644 --- a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c +++ b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c @@ -26,6 +26,8 @@ static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *tex static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsScreen, lv_obj_t *item); static void _set_rtc_time_to_label(SettingsScreen_t * const settingsScreen); static void _set_battery_voltage_to_label(SettingsScreen_t * const settingsScreen); +static void _reset_switch_pointers(SettingsScreen_t * const settingsScreen); +static void _enable_time_and_date_rollers(bool enabled, SettingsScreen_t * const settingsScreen); static void _settings_screen_update_labels_language(SettingsScreen_t * const settingsScreen) { @@ -220,6 +222,11 @@ static void activation_switch_cb(lv_event_t *e) { if(settingsScreen->settingsScreenAPIInterface.setWristTiltSettingsCb)settingsScreen->settingsScreenAPIInterface.setWristTiltSettingsCb(&toggled, SETTING_MODE_SET); } + else if(e->target == settingsScreen->auto_set_time_switch) + { + if(settingsScreen->settingsScreenAPIInterface.setAutomaticTimeSettingsCb)settingsScreen->settingsScreenAPIInterface.setAutomaticTimeSettingsCb(&toggled, SETTING_MODE_SET); + _enable_time_and_date_rollers(!toggled, settingsScreen); + } } static void language_dropdown_cb(lv_event_t *e) @@ -254,6 +261,7 @@ static void about_refresh_timer_cb(lv_timer_t *timer) static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); uint8_t hour = 0, minute = 0, second = 0, day = 0, month = 0, year = 0; if(settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb) @@ -262,16 +270,23 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen) lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Set Time & Date :"); - lv_obj_t *toggle = lv_switch_create(settingsScreen->side_screen); - lv_obj_align_to(toggle, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); - label = lv_label_create(settingsScreen->side_screen); + settingsScreen->auto_set_time_switch = lv_switch_create(settingsScreen->side_screen); + lv_obj_align_to(settingsScreen->auto_set_time_switch, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); + bool auto_set_enable = false; + if(settingsScreen->settingsScreenAPIInterface.setAutomaticTimeSettingsCb)settingsScreen->settingsScreenAPIInterface.setAutomaticTimeSettingsCb(&auto_set_enable, SETTING_MODE_GET); + if(auto_set_enable) + { + lv_obj_add_state(settingsScreen->auto_set_time_switch, LV_STATE_CHECKED); + } + lv_obj_add_event_cb(settingsScreen->auto_set_time_switch, &(activation_switch_cb), LV_EVENT_VALUE_CHANGED, settingsScreen); + label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Automatic"); - lv_obj_align_to(label, toggle, LV_ALIGN_OUT_RIGHT_MID, 10, 0); + lv_obj_align_to(label, settingsScreen->auto_set_time_switch, LV_ALIGN_OUT_RIGHT_MID, 10, 0); label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Time :"); - lv_obj_align_to(label, toggle, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); + lv_obj_align_to(label, settingsScreen->auto_set_time_switch, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10); settingsScreen->hour_roller = lv_roller_create(settingsScreen->side_screen); settingsScreen->minute_roller = lv_roller_create(settingsScreen->side_screen); @@ -349,6 +364,8 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen) lv_roller_set_visible_row_count(settingsScreen->year_roller, 2); lv_roller_set_selected(settingsScreen->year_roller, year-22, LV_ANIM_OFF); lv_obj_add_event_cb(settingsScreen->year_roller, &(time_roller_cb), LV_EVENT_RELEASED, settingsScreen); + // We set the state of the rollers only here, because they are not created yet earlier. + _enable_time_and_date_rollers(!auto_set_enable, settingsScreen); label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Date Format :"); @@ -362,6 +379,7 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen) static void load_display_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Brightness :"); @@ -451,6 +469,7 @@ static void load_display_side_screen(SettingsScreen_t *settingsScreen) static void load_notifications_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Vibrate on\nnotifications :"); @@ -479,6 +498,7 @@ static void load_notifications_side_screen(SettingsScreen_t *settingsScreen) static void load_connectivity_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Connectivity :"); @@ -520,6 +540,7 @@ static void load_connectivity_side_screen(SettingsScreen_t *settingsScreen) static void load_language_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "Language :"); @@ -536,6 +557,7 @@ static void load_language_side_screen(SettingsScreen_t *settingsScreen) static void load_about_side_screen(SettingsScreen_t *settingsScreen) { lv_obj_clean(settingsScreen->side_screen); + _reset_switch_pointers(settingsScreen); lv_obj_t *label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(label, "System Info :"); @@ -765,6 +787,50 @@ static void _set_battery_voltage_to_label(SettingsScreen_t * const settingsScree lv_label_set_text_static(settingsScreen->batteryVoltage.batteryVoltageLabel, settingsScreen->batteryVoltage.batteryVoltageText); } +static void _reset_switch_pointers(SettingsScreen_t * const settingsScreen) +{ + settingsScreen->auto_set_time_switch = NULL; + settingsScreen->wrist_tilt_switch = NULL; + settingsScreen->ble_switch = NULL; + settingsScreen->wifi_switch = NULL; +} + +static void _enable_time_and_date_rollers(bool enabled, SettingsScreen_t * const settingsScreen) +{ + if(enabled) + { + lv_obj_clear_state(settingsScreen->hour_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->minute_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->second_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->day_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->month_roller, LV_STATE_DISABLED); + lv_obj_clear_state(settingsScreen->year_roller, LV_STATE_DISABLED); + + lv_obj_set_style_bg_color(settingsScreen->hour_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->minute_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->second_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->day_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->month_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->year_roller, lv_palette_main(LV_PALETTE_BLUE), LV_PART_SELECTED); + } + else + { + lv_obj_add_state(settingsScreen->hour_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->minute_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->second_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->day_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->month_roller, LV_STATE_DISABLED); + lv_obj_add_state(settingsScreen->year_roller, LV_STATE_DISABLED); + + lv_obj_set_style_bg_color(settingsScreen->hour_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->minute_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->second_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->day_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->month_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + lv_obj_set_style_bg_color(settingsScreen->year_roller, lv_palette_lighten(LV_PALETTE_GREY, 1), LV_PART_SELECTED); + } +} + static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data) { lv_obj_t *btn = lv_list_add_btn(list, NULL, text); diff --git a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h index 8f8af14..108d0e7 100644 --- a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h +++ b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h @@ -11,6 +11,7 @@ typedef enum SettingMode typedef struct SettingsScreenAPIInterface { + void (*setAutomaticTimeSettingsCb)(bool *enabled, SettingMode_e mode); void (*setTimeSettingsCb)(uint8_t *hour, uint8_t *minute, uint8_t *second, uint8_t *day, uint8_t *month, uint8_t *year, SettingMode_e mode); void (*setTimeFormatSettingsCb)(bool *hour_24H_format, SettingMode_e mode); void (*setBrightnessSettingsCb)(uint8_t *brightness, SettingMode_e mode); @@ -42,6 +43,7 @@ typedef struct SettingsScreen lv_obj_t *side_screen; /* Menu widgets */ + lv_obj_t *auto_set_time_switch; lv_obj_t *hour_roller; lv_obj_t *minute_roller; lv_obj_t *second_roller;