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;