Added an event callback to know what setting category is opened and closed, reworked the way the side screen is cleaned (refactoring), added a background color on the selected item of the list
This commit is contained in:
parent
bf9816457b
commit
b19c7defc7
@ -20,7 +20,7 @@ static const char* vibration_force = "1\n2\n3\n4\n5\n6\n7\n8";
|
|||||||
|
|
||||||
static const char* language_options = "Francais\nDeutsch\nEnglish";
|
static const char* language_options = "Francais\nDeutsch\nEnglish";
|
||||||
|
|
||||||
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data);
|
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data, SettingsScreenCategory_e category);
|
||||||
static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *text);
|
static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *text);
|
||||||
|
|
||||||
static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsScreen, lv_obj_t *item);
|
static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsScreen, lv_obj_t *item);
|
||||||
@ -262,6 +262,8 @@ static void about_refresh_timer_cb(lv_timer_t *timer)
|
|||||||
{
|
{
|
||||||
SettingsScreen_t *settingsScreen = timer->user_data;
|
SettingsScreen_t *settingsScreen = timer->user_data;
|
||||||
|
|
||||||
|
if(!settingsScreen->about_refresh_timer) return;
|
||||||
|
|
||||||
static uint8_t timer_divider = 6;
|
static uint8_t timer_divider = 6;
|
||||||
if(timer_divider++ == 6)
|
if(timer_divider++ == 6)
|
||||||
{
|
{
|
||||||
@ -275,9 +277,6 @@ static void about_refresh_timer_cb(lv_timer_t *timer)
|
|||||||
|
|
||||||
static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen)
|
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;
|
uint8_t hour = 0, minute = 0, second = 0, day = 0, month = 0, year = 0;
|
||||||
if(settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb)
|
if(settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb)
|
||||||
settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb(&hour, &minute, &second, &day, &month, &year, SETTING_MODE_GET);
|
settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb(&hour, &minute, &second, &day, &month, &year, SETTING_MODE_GET);
|
||||||
@ -393,9 +392,6 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_display_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Brightness :");
|
lv_label_set_text_static(label, "Brightness :");
|
||||||
|
|
||||||
@ -483,9 +479,6 @@ static void load_display_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_notifications_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Vibrate on\nnotifications :");
|
lv_label_set_text_static(label, "Vibrate on\nnotifications :");
|
||||||
|
|
||||||
@ -512,9 +505,6 @@ static void load_notifications_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_connectivity_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Connectivity :");
|
lv_label_set_text_static(label, "Connectivity :");
|
||||||
|
|
||||||
@ -588,9 +578,6 @@ static void load_connectivity_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_language_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Language :");
|
lv_label_set_text_static(label, "Language :");
|
||||||
|
|
||||||
@ -605,9 +592,6 @@ static void load_language_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_about_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "System Info :");
|
lv_label_set_text_static(label, "System Info :");
|
||||||
|
|
||||||
@ -723,6 +707,17 @@ void settings_screen_init(SettingsScreen_t * const settingsScreen)
|
|||||||
memset(settingsScreen, 0, sizeof(SettingsScreen_t));
|
memset(settingsScreen, 0, sizeof(SettingsScreen_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void settings_screen_register_on_state_change_cb(SettingsScreen_t * const settingsScreen, SettingsScreenOnStateChangeCb_t settingsScreenOnStateChangeCb)
|
||||||
|
{
|
||||||
|
if(!settingsScreen)
|
||||||
|
{
|
||||||
|
LV_LOG_ERROR("NULL pointer given !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb = settingsScreenOnStateChangeCb;
|
||||||
|
}
|
||||||
|
|
||||||
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface)
|
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface)
|
||||||
{
|
{
|
||||||
if(!settingsScreen)
|
if(!settingsScreen)
|
||||||
@ -778,12 +773,12 @@ void settings_screen_create(SettingsScreen_t * const settingsScreen)
|
|||||||
lv_obj_set_scroll_dir(settingsScreen->side_screen, LV_DIR_VER);
|
lv_obj_set_scroll_dir(settingsScreen->side_screen, LV_DIR_VER);
|
||||||
|
|
||||||
// We add all the menu list items
|
// We add all the menu list items
|
||||||
settingsScreen->time_and_date_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_TIME_AND_DATE), &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->time_and_date_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_TIME_AND_DATE), &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_TIME_AND_DATE);
|
||||||
settingsScreen->display_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_DISPLAY), &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->display_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_DISPLAY), &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_DISPLAY);
|
||||||
settingsScreen->notifications_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_NOTIFICATIONS), &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->notifications_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_NOTIFICATIONS), &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_NOTIFICATION);
|
||||||
settingsScreen->connectivity_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_CONNECTIVITY), &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->connectivity_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_CONNECTIVITY), &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_CONNECTIVITY);
|
||||||
settingsScreen->language_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_LANGUAGE), &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->language_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_LANGUAGE), &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_LANGUAGE);
|
||||||
settingsScreen->about_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_ABOUT), &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->about_item = add_menu_list_item(menu_list, translation_get_word(TRANSLATION_ABOUT), &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_ABOUT);
|
||||||
|
|
||||||
// We register the event callback to handle gesture
|
// We register the event callback to handle gesture
|
||||||
lv_obj_add_event_cb(settingsScreen->display, &(gesture_event_cb), LV_EVENT_GESTURE, settingsScreen);
|
lv_obj_add_event_cb(settingsScreen->display, &(gesture_event_cb), LV_EVENT_GESTURE, settingsScreen);
|
||||||
@ -802,6 +797,12 @@ void settings_screen_destroy(SettingsScreen_t * const settingsScreen)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settingsScreen->last_selected_item)
|
||||||
|
{
|
||||||
|
if (settingsScreen->settingsScreenOnStateChangeCb)
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb(SETTINGS_SCREEN_STATE_CLOSED, (SettingsScreenCategory_e)lv_obj_get_user_data(settingsScreen->last_selected_item));
|
||||||
|
}
|
||||||
|
|
||||||
settingsScreen->hour_roller = NULL;
|
settingsScreen->hour_roller = NULL;
|
||||||
settingsScreen->minute_roller = NULL;
|
settingsScreen->minute_roller = NULL;
|
||||||
settingsScreen->second_roller = NULL;
|
settingsScreen->second_roller = NULL;
|
||||||
@ -828,8 +829,21 @@ static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsSc
|
|||||||
if(settingsScreen->last_selected_item)
|
if(settingsScreen->last_selected_item)
|
||||||
lv_obj_set_style_bg_color(settingsScreen->last_selected_item, lv_color_white(), LV_PART_MAIN);
|
lv_obj_set_style_bg_color(settingsScreen->last_selected_item, lv_color_white(), LV_PART_MAIN);
|
||||||
|
|
||||||
|
// Let's call the settings screen on state change callback if registered
|
||||||
|
if(settingsScreen->settingsScreenOnStateChangeCb)
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb(SETTINGS_SCREEN_STATE_OPENED, (SettingsScreenCategory_e)lv_obj_get_user_data(item));
|
||||||
|
|
||||||
|
if(settingsScreen->last_selected_item)
|
||||||
|
{
|
||||||
|
if(settingsScreen->settingsScreenOnStateChangeCb)
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb(SETTINGS_SCREEN_STATE_CLOSED, (SettingsScreenCategory_e)lv_obj_get_user_data(settingsScreen->last_selected_item));
|
||||||
|
}
|
||||||
|
|
||||||
settingsScreen->last_selected_item = item;
|
settingsScreen->last_selected_item = item;
|
||||||
|
|
||||||
|
lv_obj_clean(settingsScreen->side_screen);
|
||||||
|
_reset_switch_pointers(settingsScreen);
|
||||||
|
|
||||||
if(item == settingsScreen->time_and_date_item)
|
if(item == settingsScreen->time_and_date_item)
|
||||||
{
|
{
|
||||||
load_time_and_date_side_screen(settingsScreen);
|
load_time_and_date_side_screen(settingsScreen);
|
||||||
@ -861,7 +875,10 @@ static void _set_rtc_time_to_label(SettingsScreen_t * const settingsScreen)
|
|||||||
uint8_t hour = 0, minute = 0, second = 0, day = 0, month = 0, year = 0;
|
uint8_t hour = 0, minute = 0, second = 0, day = 0, month = 0, year = 0;
|
||||||
if(settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb)
|
if(settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb)
|
||||||
settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb(&hour, &minute, &second, &day, &month, &year, SETTING_MODE_GET);
|
settingsScreen->settingsScreenAPIInterface.setTimeSettingsCb(&hour, &minute, &second, &day, &month, &year, SETTING_MODE_GET);
|
||||||
sprintf(settingsScreen->currentTime.current_time_text, "%u:%u:%u %s%u/%s%u/%u", hour, minute, second,
|
sprintf(settingsScreen->currentTime.current_time_text, "%s%u:%s%u:%s%u %s%u/%s%u/%u",
|
||||||
|
hour < 10 ? "0":"", hour,
|
||||||
|
minute < 10 ? "0":"", minute,
|
||||||
|
second < 10 ? "0":"", second,
|
||||||
day < 10 ? "0":"", day,
|
day < 10 ? "0":"", day,
|
||||||
month + 1 < 10 ? "0":"", month + 1,
|
month + 1 < 10 ? "0":"", month + 1,
|
||||||
year+1900);
|
year+1900);
|
||||||
@ -951,7 +968,7 @@ static void _enable_time_and_date_rollers(bool enabled, SettingsScreen_t * const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data)
|
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data, SettingsScreenCategory_e category)
|
||||||
{
|
{
|
||||||
lv_obj_t *btn = lv_list_add_btn(list, NULL, text);
|
lv_obj_t *btn = lv_list_add_btn(list, NULL, text);
|
||||||
lv_obj_t *label = lv_obj_get_child(btn, 0);
|
lv_obj_t *label = lv_obj_get_child(btn, 0);
|
||||||
@ -962,6 +979,7 @@ static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_c
|
|||||||
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
|
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lv_obj_set_user_data(btn, (void *)category);
|
||||||
lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, user_data);
|
lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, user_data);
|
||||||
return btn;
|
return btn;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,24 @@ typedef struct SettingsScreenAPIInterface
|
|||||||
void (*factoryResetCb)(void);
|
void (*factoryResetCb)(void);
|
||||||
} SettingsScreenAPIInterface_t;
|
} SettingsScreenAPIInterface_t;
|
||||||
|
|
||||||
|
typedef enum SettingsScreenState
|
||||||
|
{
|
||||||
|
SETTINGS_SCREEN_STATE_OPENED = 0,
|
||||||
|
SETTINGS_SCREEN_STATE_CLOSED
|
||||||
|
} SettingsScreenState_e;
|
||||||
|
|
||||||
|
typedef enum SettingsScreenCategory
|
||||||
|
{
|
||||||
|
SETTINGS_SCREEN_CATEGORY_TIME_AND_DATE = 0,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_DISPLAY,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_NOTIFICATION,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_CONNECTIVITY,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_LANGUAGE,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_ABOUT,
|
||||||
|
} SettingsScreenCategory_e;
|
||||||
|
|
||||||
|
typedef void (*SettingsScreenOnStateChangeCb_t)(SettingsScreenState_e settingsScreenState, SettingsScreenCategory_e settingsScreenCategory);
|
||||||
|
|
||||||
typedef struct SettingsScreen
|
typedef struct SettingsScreen
|
||||||
{
|
{
|
||||||
SettingsScreenAPIInterface_t settingsScreenAPIInterface;
|
SettingsScreenAPIInterface_t settingsScreenAPIInterface;
|
||||||
@ -108,10 +126,21 @@ typedef struct SettingsScreen
|
|||||||
|
|
||||||
/* Other */
|
/* Other */
|
||||||
lv_timer_t *about_refresh_timer;
|
lv_timer_t *about_refresh_timer;
|
||||||
|
SettingsScreenOnStateChangeCb_t settingsScreenOnStateChangeCb;
|
||||||
} SettingsScreen_t;
|
} SettingsScreen_t;
|
||||||
|
|
||||||
void settings_screen_init(SettingsScreen_t * const settingsScreen);
|
void settings_screen_init(SettingsScreen_t * const settingsScreen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Registers a callback function which will be called every time the state of the application changes ie : is opened or closed.
|
||||||
|
* This callback should be used to initialize and deinitialize needed devices drivers like the magnetometer or the temperature sensor.
|
||||||
|
* @note The state of the application is passed as a parameter or the callback function.
|
||||||
|
*
|
||||||
|
* @param settingsScreen a pointer to the settings screen object structure.
|
||||||
|
* @param SettingsScreenOnStateChangeCb the callback of type @ref SettingsScreenOnStateChangeCb_t to register.
|
||||||
|
*/
|
||||||
|
void settings_screen_register_on_state_change_cb(SettingsScreen_t * const settingsScreen, SettingsScreenOnStateChangeCb_t SettingsScreenOnStateChangeCb);
|
||||||
|
|
||||||
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface);
|
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface);
|
||||||
|
|
||||||
void settings_screen_create(SettingsScreen_t * const settingsScreen);
|
void settings_screen_create(SettingsScreen_t * const settingsScreen);
|
||||||
|
@ -26,7 +26,7 @@ static void _reset_switch_pointers(SettingsScreen_t * const settingsScreen)
|
|||||||
settingsScreen->ble_switch = NULL;
|
settingsScreen->ble_switch = NULL;
|
||||||
settingsScreen->auto_set_time_switch = NULL;
|
settingsScreen->auto_set_time_switch = NULL;
|
||||||
}
|
}
|
||||||
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data);
|
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data, SettingsScreenCategory_e category);
|
||||||
static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *text);
|
static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *text);
|
||||||
|
|
||||||
static void gesture_event_cb(lv_event_t *e)
|
static void gesture_event_cb(lv_event_t *e)
|
||||||
@ -164,9 +164,6 @@ static void about_refresh_timer_cb(lv_timer_t *timer)
|
|||||||
|
|
||||||
static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen)
|
static void load_time_and_date_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Set Time & Date :");
|
lv_label_set_text_static(label, "Set Time & Date :");
|
||||||
|
|
||||||
@ -254,9 +251,6 @@ static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_display_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Brightness :");
|
lv_label_set_text_static(label, "Brightness :");
|
||||||
|
|
||||||
@ -323,9 +317,6 @@ static void load_display_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_notifications_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Vibrate on\nnotifications :");
|
lv_label_set_text_static(label, "Vibrate on\nnotifications :");
|
||||||
|
|
||||||
@ -352,9 +343,6 @@ static void load_notifications_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_connectivity_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Connectivity :");
|
lv_label_set_text_static(label, "Connectivity :");
|
||||||
|
|
||||||
@ -407,9 +395,6 @@ static void load_connectivity_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_language_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "Language :");
|
lv_label_set_text_static(label, "Language :");
|
||||||
|
|
||||||
@ -421,9 +406,6 @@ static void load_language_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
|
|
||||||
static void load_about_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_obj_t *label = lv_label_create(settingsScreen->side_screen);
|
||||||
lv_label_set_text_static(label, "System Info :");
|
lv_label_set_text_static(label, "System Info :");
|
||||||
|
|
||||||
@ -521,7 +503,7 @@ static void load_about_side_screen(SettingsScreen_t *settingsScreen)
|
|||||||
lv_timer_del(settingsScreen->about_refresh_timer);
|
lv_timer_del(settingsScreen->about_refresh_timer);
|
||||||
settingsScreen->about_refresh_timer = NULL;
|
settingsScreen->about_refresh_timer = NULL;
|
||||||
}
|
}
|
||||||
settingsScreen->about_refresh_timer = lv_timer_create(&(about_refresh_timer_cb), 1000, settingsScreen);
|
settingsScreen->about_refresh_timer = lv_timer_create(&(about_refresh_timer_cb), 150, settingsScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void menu_list_item_event_handler(lv_event_t * e)
|
static void menu_list_item_event_handler(lv_event_t * e)
|
||||||
@ -541,6 +523,17 @@ void settings_screen_init(SettingsScreen_t * const settingsScreen)
|
|||||||
memset(settingsScreen, 0, sizeof(SettingsScreen_t));
|
memset(settingsScreen, 0, sizeof(SettingsScreen_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void settings_screen_register_on_state_change_cb(SettingsScreen_t * const settingsScreen, SettingsScreenOnStateChangeCb_t settingsScreenOnStateChangeCb)
|
||||||
|
{
|
||||||
|
if(!settingsScreen)
|
||||||
|
{
|
||||||
|
LV_LOG_ERROR("NULL pointer given !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb = settingsScreenOnStateChangeCb;
|
||||||
|
}
|
||||||
|
|
||||||
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface)
|
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface)
|
||||||
{
|
{
|
||||||
if(!settingsScreen)
|
if(!settingsScreen)
|
||||||
@ -596,12 +589,12 @@ void settings_screen_create(SettingsScreen_t * const settingsScreen)
|
|||||||
lv_obj_set_scroll_dir(settingsScreen->side_screen, LV_DIR_VER);
|
lv_obj_set_scroll_dir(settingsScreen->side_screen, LV_DIR_VER);
|
||||||
|
|
||||||
// We add all the menu list items
|
// We add all the menu list items
|
||||||
settingsScreen->time_and_date_item = add_menu_list_item(menu_list, "Time & Date", &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->time_and_date_item = add_menu_list_item(menu_list, "Time & Date", &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_TIME_AND_DATE);
|
||||||
settingsScreen->display_item = add_menu_list_item(menu_list, "Display", &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->display_item = add_menu_list_item(menu_list, "Display", &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_DISPLAY);
|
||||||
settingsScreen->notifications_item = add_menu_list_item(menu_list, "Notifications", &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->notifications_item = add_menu_list_item(menu_list, "Notifications", &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_NOTIFICATION);
|
||||||
settingsScreen->connectivity_item = add_menu_list_item(menu_list, "Connectivity", &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->connectivity_item = add_menu_list_item(menu_list, "Connectivity", &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_CONNECTIVITY);
|
||||||
settingsScreen->language_item = add_menu_list_item(menu_list, "Language", &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->language_item = add_menu_list_item(menu_list, "Language", &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_LANGUAGE);
|
||||||
settingsScreen->about_item = add_menu_list_item(menu_list, "About", &(menu_list_item_event_handler), settingsScreen);
|
settingsScreen->about_item = add_menu_list_item(menu_list, "About", &(menu_list_item_event_handler), settingsScreen, SETTINGS_SCREEN_CATEGORY_ABOUT);
|
||||||
|
|
||||||
// We register the event callback to handle gesture
|
// We register the event callback to handle gesture
|
||||||
lv_obj_add_event_cb(settingsScreen->display, &(gesture_event_cb), LV_EVENT_GESTURE, settingsScreen);
|
lv_obj_add_event_cb(settingsScreen->display, &(gesture_event_cb), LV_EVENT_GESTURE, settingsScreen);
|
||||||
@ -620,6 +613,12 @@ void settings_screen_destroy(SettingsScreen_t * const settingsScreen)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settingsScreen->last_selected_item)
|
||||||
|
{
|
||||||
|
if (settingsScreen->settingsScreenOnStateChangeCb)
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb(SETTINGS_SCREEN_STATE_CLOSED, (SettingsScreenCategory_e)lv_obj_get_user_data(settingsScreen->last_selected_item));
|
||||||
|
}
|
||||||
|
|
||||||
settingsScreen->hour_roller = NULL;
|
settingsScreen->hour_roller = NULL;
|
||||||
settingsScreen->minute_roller = NULL;
|
settingsScreen->minute_roller = NULL;
|
||||||
settingsScreen->second_roller = NULL;
|
settingsScreen->second_roller = NULL;
|
||||||
@ -646,8 +645,21 @@ static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsSc
|
|||||||
if(settingsScreen->last_selected_item)
|
if(settingsScreen->last_selected_item)
|
||||||
lv_obj_set_style_bg_color(settingsScreen->last_selected_item, lv_color_white(), LV_PART_MAIN);
|
lv_obj_set_style_bg_color(settingsScreen->last_selected_item, lv_color_white(), LV_PART_MAIN);
|
||||||
|
|
||||||
|
// Let's call the settings screen on state change callback if registered
|
||||||
|
if(settingsScreen->settingsScreenOnStateChangeCb)
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb(SETTINGS_SCREEN_STATE_OPENED, (SettingsScreenCategory_e)lv_obj_get_user_data(item));
|
||||||
|
|
||||||
|
if(settingsScreen->last_selected_item)
|
||||||
|
{
|
||||||
|
if(settingsScreen->settingsScreenOnStateChangeCb)
|
||||||
|
settingsScreen->settingsScreenOnStateChangeCb(SETTINGS_SCREEN_STATE_CLOSED, (SettingsScreenCategory_e)lv_obj_get_user_data(settingsScreen->last_selected_item));
|
||||||
|
}
|
||||||
|
|
||||||
settingsScreen->last_selected_item = item;
|
settingsScreen->last_selected_item = item;
|
||||||
|
|
||||||
|
lv_obj_clean(settingsScreen->side_screen);
|
||||||
|
_reset_switch_pointers(settingsScreen);
|
||||||
|
|
||||||
if(item == settingsScreen->time_and_date_item)
|
if(item == settingsScreen->time_and_date_item)
|
||||||
{
|
{
|
||||||
load_time_and_date_side_screen(settingsScreen);
|
load_time_and_date_side_screen(settingsScreen);
|
||||||
@ -710,7 +722,7 @@ static void _enable_time_and_date_rollers(bool enabled, SettingsScreen_t * const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data)
|
static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_cb_t event_cb, void *user_data, SettingsScreenCategory_e category)
|
||||||
{
|
{
|
||||||
lv_obj_t *btn = lv_list_add_btn(list, NULL, text);
|
lv_obj_t *btn = lv_list_add_btn(list, NULL, text);
|
||||||
lv_obj_t *label = lv_obj_get_child(btn, 0);
|
lv_obj_t *label = lv_obj_get_child(btn, 0);
|
||||||
@ -721,6 +733,7 @@ static lv_obj_t *add_menu_list_item(lv_obj_t *list, const char *text, lv_event_c
|
|||||||
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
|
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lv_obj_set_user_data(btn, (void *)category);
|
||||||
lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, user_data);
|
lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, user_data);
|
||||||
return btn;
|
return btn;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,24 @@ typedef struct SettingsScreenAPIInterface
|
|||||||
|
|
||||||
} SettingsScreenAPIInterface_t;
|
} SettingsScreenAPIInterface_t;
|
||||||
|
|
||||||
|
typedef enum SettingsScreenState
|
||||||
|
{
|
||||||
|
SETTINGS_SCREEN_STATE_OPENED = 0,
|
||||||
|
SETTINGS_SCREEN_STATE_CLOSED
|
||||||
|
} SettingsScreenState_e;
|
||||||
|
|
||||||
|
typedef enum SettingsScreenCategory
|
||||||
|
{
|
||||||
|
SETTINGS_SCREEN_CATEGORY_TIME_AND_DATE = 0,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_DISPLAY,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_NOTIFICATION,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_CONNECTIVITY,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_LANGUAGE,
|
||||||
|
SETTINGS_SCREEN_CATEGORY_ABOUT,
|
||||||
|
} SettingsScreenCategory_e;
|
||||||
|
|
||||||
|
typedef void (*SettingsScreenOnStateChangeCb_t)(SettingsScreenState_e settingsScreenState, SettingsScreenCategory_e settingsScreenCategory);
|
||||||
|
|
||||||
typedef struct SettingsScreen
|
typedef struct SettingsScreen
|
||||||
{
|
{
|
||||||
SettingsScreenAPIInterface_t settingsScreenAPIInterface;
|
SettingsScreenAPIInterface_t settingsScreenAPIInterface;
|
||||||
@ -64,10 +82,21 @@ typedef struct SettingsScreen
|
|||||||
|
|
||||||
/* Other */
|
/* Other */
|
||||||
lv_timer_t *about_refresh_timer;
|
lv_timer_t *about_refresh_timer;
|
||||||
|
SettingsScreenOnStateChangeCb_t settingsScreenOnStateChangeCb;
|
||||||
} SettingsScreen_t;
|
} SettingsScreen_t;
|
||||||
|
|
||||||
void settings_screen_init(SettingsScreen_t * const settingsScreen);
|
void settings_screen_init(SettingsScreen_t * const settingsScreen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Registers a callback function which will be called every time the state of the application changes ie : is opened or closed.
|
||||||
|
* This callback should be used to initialize and deinitialize needed devices drivers like the magnetometer or the temperature sensor.
|
||||||
|
* @note The state of the application is passed as a parameter or the callback function.
|
||||||
|
*
|
||||||
|
* @param settingsScreen a pointer to the settings screen object structure.
|
||||||
|
* @param SettingsScreenOnStateChangeCb the callback of type @ref SettingsScreenOnStateChangeCb_t to register.
|
||||||
|
*/
|
||||||
|
void settings_screen_register_on_state_change_cb(SettingsScreen_t * const settingsScreen, SettingsScreenOnStateChangeCb_t SettingsScreenOnStateChangeCb);
|
||||||
|
|
||||||
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface);
|
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface);
|
||||||
|
|
||||||
void settings_screen_create(SettingsScreen_t * const settingsScreen);
|
void settings_screen_create(SettingsScreen_t * const settingsScreen);
|
||||||
|
Loading…
Reference in New Issue
Block a user