From: Radek Kintop Date: Thu, 5 Oct 2017 16:51:49 +0000 (+0200) Subject: [SM][Data usage] WiFi setting refactor X-Git-Tag: submit/tizen_4.0/20171012.072940^2~7^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a1f58666e9de1b1f9cf1be1a661bc4b13ecd2e3b;p=profile%2Fmobile%2Fapps%2Fnative%2Fsettings.git [SM][Data usage] WiFi setting refactor Change-Id: Ibbf5760b6671806ccd7a62d46c2a1f6e307e2782 Signed-off-by: Radek Kintop --- diff --git a/setting-smartmanager/smartmanager-data/include/smartmanager-data.h b/setting-smartmanager/smartmanager-data/include/smartmanager-data.h index 664065bc..bd88e809 100755 --- a/setting-smartmanager/smartmanager-data/include/smartmanager-data.h +++ b/setting-smartmanager/smartmanager-data/include/smartmanager-data.h @@ -45,10 +45,10 @@ typedef enum { } mv_update_type; typedef enum { - CYCLE_MODE_MONTHLY = 1, - CYCLE_MODE_WEEKLY = 2, - CYCLE_MODE_DAILY = 3, - CYCLE_MODE_CUSTOM = 4 + CYCLE_MODE_MONTHLY = 0, + CYCLE_MODE_WEEKLY, + CYCLE_MODE_DAILY, + CYCLE_MODE_CUSTOM } Cycle_Mode_E; typedef struct { diff --git a/setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-wifi-settings.c b/setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-wifi-settings.c index be1ab431..8af1b689 100755 --- a/setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-wifi-settings.c +++ b/setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-wifi-settings.c @@ -10,237 +10,67 @@ static int _destroy(void *data); static int _update(void *data); static int _cleanup(void *data); -void _complement_data_usage_wifi_genlist(Evas_Object *wifi_genlist, - SmartMgrData *smd); static void _softkey_back_cb(void *data, Evas_Object *obj, void *event_info); static Eina_Bool _pop_view_cb(void *data, Elm_Object_Item *it); -static char *_item_label_get(void *data, Evas_Object *obj, const char *part); -static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info); -static char *_last_item_label_get(void *data, Evas_Object *obj, - const char *part); -static char *_radio_item_label_get(void *data, Evas_Object *obj, - const char *part); -static Evas_Object *_radio_item_content_get(void *data, Evas_Object *obj, - const char *part); -static void _radio_item_selected_cb(void *data, Evas_Object *obj, - void *event_info); -static void _radio_item_delete(void *data, Evas_Object *obj); - -setting_view sm_view_data_usage_wifi; - -static char *data_usage_wifi_strings[] = { - "Data usage settings", - "Set data usage cycle" +static void _cycle_item_click_cb(void *data, Evas_Object *obj, + void *event_info); +static void _start_date_item_click_cb(void *data, Evas_Object *obj, + void *event_info); +static char *_cycle_item_text_get(void *data, Evas_Object *genlist, + const char *part); +static char *_start_date_item_text_get(void *data, Evas_Object *genlist, + const char *part); +static char *_info_item_text_get(void *data, Evas_Object *genlist, + const char *part); +static char *_cycle_popup_radio_item_text_get(void *data, Evas_Object *genlist, + const char *part); +static Evas_Object *_cycle_popup_radio_item_content_get(void *data, + Evas_Object *genlist, const char *part); +static void _generate_list(SmartMgrData *ad, Evas_Object *genlist); + +static Elm_Genlist_Item_Class cycle_itc = { + .item_style = "type2", + .func.text_get = _cycle_item_text_get }; - -typedef enum { - ELEMENT_TYPE_CYCLE, - ELEMENT_TYPE_START_DATE, - ELEMENT_TYPE_INFO -} Element_Type; - -typedef struct { - const char *name; - char *value; - Element_Type type; - SmartMgrData *smd; -} Element; - - -static Element elements[] = { - {"Cycle", NULL, ELEMENT_TYPE_CYCLE, NULL}, - {"Start date", "1", ELEMENT_TYPE_START_DATE, NULL}, - {"", "The data usage info will be reset on the 1st day of every month.", ELEMENT_TYPE_INFO, NULL} +static Elm_Genlist_Item_Class start_date_itc = { + .item_style = "type2", + .func.text_get = _start_date_item_text_get +}; +static Elm_Genlist_Item_Class info_itc = { + .item_style = "multiline", + .func.text_get = _info_item_text_get +}; +static Elm_Genlist_Item_Class radio_itc = { + .item_style = "type1", + .func.text_get = _cycle_popup_radio_item_text_get, + .func.content_get = _cycle_popup_radio_item_content_get }; -typedef struct { - int radio_num; - int radio_status; - char *desc_str; - SmartMgrData *smd; -} Radio_Item_Data; +setting_view sm_view_data_usage_wifi; + +static Evas_Object *cycle_popup_radio_group = NULL; +static Evas_Object *cycle_popup = NULL; +static Evas_Object *start_date_popup = NULL; +static Evas_Object *start_date_popup_datetime = NULL; -static char *elements_cycle_initial_values[] = { +const static char *cycle_names[] = { "Monthly", "Weekly", "Daily", "Custom" }; -static struct tm start_date = {0}; - -static void _update_genlist_cycle_item(SmartMgrData *smd) -{ - char buf[256] = {0}; - SETTING_TRACE_BEGIN; - - free(elements[ELEMENT_TYPE_CYCLE].value); - - if (smd->wifi_limits.custom_mode_interval && smd->wifi_limits.cycle_mode == CYCLE_MODE_CUSTOM) { - snprintf(buf, sizeof(buf), "%d Days", smd->wifi_limits.custom_mode_interval); - elements[ELEMENT_TYPE_CYCLE].value = strdup(buf); - } else { - elements[ELEMENT_TYPE_CYCLE].value = strdup(elements_cycle_initial_values[smd->wifi_limits.cycle_mode-1]); - } - - SETTING_TRACE_DEBUG("GENLIST DATA UPDATE: %s", elements[ELEMENT_TYPE_CYCLE].value); - elm_genlist_realized_items_update(smd->wifi_data_setting_genlist); - - SETTING_TRACE_END; -} - -static void _update_genlist_start_date_item(SmartMgrData *smd) -{ - -} - -void _complement_data_usage_wifi_genlist(Evas_Object *wifi_genlist, - SmartMgrData *smd) -{ - int i = 0; - Elm_Genlist_Item_Class *itc_genlist_element = NULL; - Elm_Genlist_Item_Class *itc_genlist_last_element = NULL; - Elm_Object_Item *last_item = NULL; - - elm_genlist_mode_set(wifi_genlist, ELM_LIST_COMPRESS); - elm_genlist_clear(wifi_genlist); - - itc_genlist_element = elm_genlist_item_class_new(); - itc_genlist_element->item_style = "type2"; - itc_genlist_element->func.text_get = _item_label_get; - - _update_genlist_cycle_item(smd); - _update_genlist_start_date_item(smd); - - for (i = 0; i < EINA_C_ARRAY_LENGTH(elements)-1; i++) { - elm_genlist_item_append(wifi_genlist, - itc_genlist_element, &elements[i], NULL, ELM_GENLIST_ITEM_NONE, - _item_selected_cb, &elements[i]); - elements[i].smd = smd; - } - - elm_genlist_item_class_free(itc_genlist_element); - - itc_genlist_last_element = elm_genlist_item_class_new(); - itc_genlist_last_element->item_style = "multiline"; - itc_genlist_last_element->func.text_get = _last_item_label_get; - - last_item = elm_genlist_item_append(wifi_genlist, - itc_genlist_last_element, &elements[EINA_C_ARRAY_LENGTH(elements)-1], - NULL, ELM_GENLIST_ITEM_NONE, NULL, &elements[i]); - elm_genlist_item_select_mode_set(last_item, ELM_OBJECT_SELECT_MODE_NONE); - - elm_genlist_item_class_free(itc_genlist_last_element); - - evas_object_show(wifi_genlist); -} +const static char *weekday_names[] = { + "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" +}; -static void _popup_back_cb(void *data, Evas_Object *obj, void *event_info) +static void _popup_back_cb(void *data, Evas_Object *popup, void *event_info) { - Evas_Object *popup = (Evas_Object *)data; evas_object_del(popup); } +/* -static Evas_Object *_create_popup(SmartMgrData *smd, char *title) -{ - Evas_Object *popup = elm_popup_add(smd->md.window); - if (!popup) { - dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] popup == NULL", - __FILE__, __LINE__); - return NULL; - } - - evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0); - elm_object_part_text_set(popup, "title,text", title); - eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _popup_back_cb, - popup); - - evas_object_show(popup); - return popup; -} - -static Radio_Item_Data *create_radio_item(SmartMgrData *smd, Evas_Object *genlist, Elm_Genlist_Item_Class *itc, - setting_call_back_func select_cb, char *radio_str, int radio_num) -{ - Radio_Item_Data *radio_item_data = (Radio_Item_Data *)calloc(1, sizeof(Radio_Item_Data)); - retv_if(!radio_item_data, NULL); - - radio_item_data->radio_num = radio_num; - radio_item_data->desc_str = radio_str; - radio_item_data->smd = smd; - - elm_genlist_item_append(genlist, itc, radio_item_data, NULL, - ELM_GENLIST_ITEM_NONE, select_cb, (void *)smd); - - return radio_item_data; -} - -static void _create_cycle_popup(SmartMgrData *smd, char *title) -{ - int i = 0; - Elm_Genlist_Item_Class *itc = NULL; - smd->wifi_data_usage_cycle_popup = _create_popup(smd, title); - evas_object_size_hint_weight_set(smd->wifi_data_usage_cycle_popup, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - - smd->wifi_data_usage_cycle_genlist = elm_genlist_add(smd->wifi_data_usage_cycle_popup); - elm_object_content_set(smd->wifi_data_usage_cycle_popup, smd->wifi_data_usage_cycle_genlist); - evas_object_show(smd->wifi_data_usage_cycle_genlist); - - smd->wifi_data_usage_cycle_radiogroup = elm_radio_add(smd->wifi_data_usage_cycle_genlist); - elm_object_style_set(smd->wifi_data_usage_cycle_radiogroup, "list"); - elm_radio_state_value_set(smd->wifi_data_usage_cycle_radiogroup, -1); - evas_object_data_set(smd->wifi_data_usage_cycle_genlist, "radio", smd->wifi_data_usage_cycle_radiogroup); - - itc = elm_genlist_item_class_new(); - itc->item_style = "type1"; - itc->func.text_get = _radio_item_label_get; - itc->func.content_get = _radio_item_content_get; - itc->func.del = _radio_item_delete; - - for (i = 0; i < 4; i++) - create_radio_item(smd, smd->wifi_data_usage_cycle_genlist, itc, _radio_item_selected_cb, - elements_cycle_initial_values[i], i+1); - - elm_genlist_item_class_free(itc); -} - -static void _start_date_cancel_btn_cb(void *data, Evas_Object *obj, - void *event_info) -{ - SmartMgrData *smd = (SmartMgrData *)data; - ret_if(!smd); - - evas_object_del(smd->wifi_start_date_popup); - smd->wifi_start_date_popup = NULL; -} - -static void _start_date_set_btn_cb(void *data, Evas_Object *obj, - void *event_info) -{ - bool res = false; - SmartMgrData *smd = (SmartMgrData *)data; - ret_if(!smd); - - smd->wifi_start_date = start_date; - evas_object_del(smd->wifi_start_date_popup); - smd->wifi_start_date_popup = NULL; - - res = write_wifi_cycle_start(mktime(&smd->wifi_start_date)); - ret_if(!res); -} - -static void _day_picker_value_changed_cb(void *data, Evas_Object *obj, void *event_info) -{ - Eina_Bool day_res = EINA_FALSE; - SmartMgrData *smd = (SmartMgrData *)data; - ret_if(!smd); - day_res = elm_datetime_value_get(smd->wifi_day_picker, &start_date); - ret_if(!day_res); -} static Evas_Object *_create_datetime(Evas_Object *parent, setting_call_back_func _datetime_picker_value_changed_cb, SmartMgrData *smd) { @@ -267,24 +97,7 @@ static Evas_Object *_create_datetime(Evas_Object *parent, setting_call_back_func return day_picker; } -static Evas_Object *create_popup_button(Evas_Object *popup, char *part, char *title, setting_call_back_func _button_cb, SmartMgrData *smd) -{ - Evas_Object *button = elm_button_add(popup); - elm_object_text_set(button, title); - elm_object_part_content_set(popup, part, button); - evas_object_smart_callback_add(button, "clicked", _button_cb, smd); - evas_object_show(button); - return button; -} - -static void _create_start_date_popup(SmartMgrData *smd, char *title) -{ - smd->wifi_start_date_popup = _create_popup(smd, title); - smd->wifi_day_picker = _create_datetime(smd->wifi_start_date_popup, _day_picker_value_changed_cb, smd); - - create_popup_button(smd->wifi_start_date_popup, "button1", "Cancel", _start_date_cancel_btn_cb, smd); - create_popup_button(smd->wifi_start_date_popup, "button2", "Set", _start_date_set_btn_cb, smd); -} +*/ static int _create(void *data) { @@ -293,16 +106,14 @@ static int _create(void *data) SmartMgrData *smd = (SmartMgrData *)data; back_btn = elm_button_add(smd->md.naviframe); - elm_object_style_set(back_btn, NAVI_BACK_ARROW_BUTTON_STYLE); + elm_object_style_set(back_btn, "naviframe/end_btn/default"); evas_object_smart_callback_add(back_btn, "clicked", _softkey_back_cb, smd); smd->wifi_data_setting_genlist = elm_genlist_add(smd->md.naviframe); - _complement_data_usage_wifi_genlist(smd->wifi_data_setting_genlist, smd); - + _generate_list(smd, smd->wifi_data_setting_genlist); nf_it = elm_naviframe_item_push(smd->md.naviframe, - data_usage_wifi_strings[0], back_btn, NULL, + _("Data usage settings"), back_btn, NULL, smd->wifi_data_setting_genlist, NULL); - elm_naviframe_item_style_set(nf_it, "tabbar"); elm_naviframe_item_pop_cb_set(nf_it, _pop_view_cb, smd); sm_view_data_usage_wifi.is_create = 1; @@ -313,7 +124,10 @@ static int _destroy(void *data) { SmartMgrData *smd = (SmartMgrData *)data; retv_if(NULL == smd, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER); - + cycle_popup = NULL; + start_date_popup = NULL; + cycle_popup_radio_group = NULL; + start_date_popup_datetime = NULL; sm_view_data_usage_wifi.is_create = 0; return 0; } @@ -323,8 +137,6 @@ static int _update(void *data) SmartMgrData *smd = (SmartMgrData *)data; retv_if(NULL == smd, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER); - _complement_data_usage_wifi_genlist(smd->wifi_data_setting_genlist, smd); - return 0; } @@ -365,137 +177,281 @@ static Eina_Bool _pop_view_cb(void *data, Elm_Object_Item *it) return EINA_TRUE; } -static char *_item_label_get(void *data, Evas_Object *obj, const char *part) +static void _cycle_popup_item_selected_cb(void *ix, Evas_Object *genlist, + void *event_info) { - Element *element = (Element *)data; - retv_if(!element, NULL); + SmartMgrData *smd = evas_object_data_get(genlist, "SmartMgrData"); - if (!safeStrCmp(part, "elm.text")) - return strdup(element->value); - else if (!safeStrCmp(part, "elm.text.sub")) - return strdup(element->name); - else - return NULL; -} + if (!smd) + return; -static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info) -{ - Element *element = (Element *)data; - Elm_Object_Item *item = (Elm_Object_Item*)event_info; - - elm_genlist_item_selected_set(item, EINA_FALSE); - - switch (element->type) { - case ELEMENT_TYPE_CYCLE: - _create_cycle_popup(element->smd, "Select data usage cycle"); - break; - case ELEMENT_TYPE_START_DATE: - _create_start_date_popup(element->smd, "Select start date"); - break; - default: - break; - } + bool res = false; + + elm_genlist_item_selected_set(event_info, EINA_FALSE); + smd->wifi_limits.cycle_mode = (int)ix; + elm_radio_value_set(cycle_popup_radio_group, smd->wifi_limits.cycle_mode); + res = write_wifi_cycle_mode(smd->wifi_limits.cycle_mode); + + if (!res) + SETTING_TRACE_ERROR("Failed to write wifi cycle mode"); + + evas_object_del(cycle_popup); + cycle_popup = NULL; + cycle_popup_radio_group = NULL; + elm_genlist_realized_items_update(smd->wifi_data_setting_genlist); } -static char *_last_item_label_get(void *data, Evas_Object *obj, - const char *part) +static void _cycle_popup_radio_changed_cb(void *data, Evas_Object *radio, void *event_info) { - Element *element = (Element *)data; - retv_if(!element, NULL); + SmartMgrData *smd = data; + bool res = false; - if (!safeStrCmp(part, "elm.text.multiline")) - return strdup(element->value); - else - return NULL; + smd->wifi_limits.cycle_mode = elm_radio_state_value_get(radio); + res = write_wifi_cycle_mode(smd->wifi_limits.cycle_mode); + if (!res) + SETTING_TRACE_ERROR("Failed to write wifi cycle mode"); + + evas_object_del(cycle_popup); + cycle_popup = NULL; + cycle_popup_radio_group = NULL; + elm_genlist_realized_items_update(smd->wifi_data_setting_genlist); } -static char *_radio_item_label_get(void *data, Evas_Object *obj, - const char *part) +static char *_cycle_popup_radio_item_text_get(void *ix, Evas_Object *genlist, + const char *part) { - Radio_Item_Data *radio_item_data = (Radio_Item_Data *)data; - retv_if(!radio_item_data, NULL); if (!safeStrCmp(part, "elm.text")) - return strdup(radio_item_data->desc_str); + return strdup(cycle_names[(int)ix]); + return NULL; +} + +static Evas_Object *_cycle_popup_radio_item_content_get(void *ix, + Evas_Object *genlist, const char *part) +{ + Evas_Object *radio = NULL; + SmartMgrData *smd = evas_object_data_get(genlist, "SmartMgrData"); + + if (!safeStrCmp(part, "elm.swallow.end")) { + radio = elm_radio_add(genlist); + evas_object_propagate_events_set(radio, EINA_FALSE); + elm_radio_state_value_set(radio, (int)ix); + elm_radio_group_add(radio, cycle_popup_radio_group); + evas_object_smart_callback_add(radio, "changed", + _cycle_popup_radio_changed_cb, smd); + return radio; + } return NULL; } -static void _radio_changed_cb(void *data, Evas_Object *radio, void *event_info) +static Evas_Object *_create_popup(SmartMgrData *smd, char *title) { - bool res = false; - Radio_Item_Data *radio_item_data = (Radio_Item_Data *)data; - ret_if(!radio_item_data); + Evas_Object *popup = elm_popup_add(smd->md.window); - if (radio_item_data->smd->wifi_limits.cycle_mode != radio_item_data->radio_num) { - radio_item_data->smd->wifi_limits.cycle_mode = (Cycle_Mode_E) - radio_item_data->radio_num; - } + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_object_part_text_set(popup, "title,text", title); + eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _popup_back_cb, + NULL); + evas_object_show(popup); + + return popup; +} + +static void _cycle_item_click_cb(void *data, Evas_Object *obj, void *event_info) +{ + int ix = 0; + SmartMgrData *smd = data; + Evas_Object *genlist = NULL; + + elm_genlist_item_selected_set(event_info, EINA_FALSE); + cycle_popup = _create_popup(smd, _("Select data usage cycle")); - _complement_data_usage_wifi_genlist(radio_item_data->smd->wifi_data_setting_genlist, radio_item_data->smd); + genlist = elm_genlist_add(cycle_popup); + evas_object_data_set(genlist, "SmartMgrData", smd); + elm_object_content_set(cycle_popup, genlist); - res = write_wifi_cycle_mode(radio_item_data->smd->wifi_limits.cycle_mode); - ret_if(!res); + cycle_popup_radio_group = elm_radio_add(genlist); - evas_object_del(radio_item_data->smd->wifi_data_usage_cycle_popup); + for (ix = 0; ix < sizeof(cycle_names) / sizeof(char *); ix++) + elm_genlist_item_append(genlist, &radio_itc, (void *)ix, NULL, + ELM_GENLIST_ITEM_NONE, + _cycle_popup_item_selected_cb, (void *)ix); + + elm_radio_value_set(cycle_popup_radio_group, smd->wifi_limits.cycle_mode); } -static Evas_Object *create_radio(SmartMgrData *smd, Evas_Object *parent, Radio_Item_Data *item) +static void _start_date_popup_cancel_click_cb(void *data, Evas_Object *button, + void *event_info) { - Evas_Object *radio = elm_radio_add(parent); - evas_object_propagate_events_set(radio, EINA_FALSE); - elm_radio_state_value_set(radio, item->radio_num); - elm_radio_group_add(radio, smd->wifi_data_usage_cycle_radiogroup); + evas_object_del(start_date_popup); + start_date_popup = NULL; + start_date_popup_datetime = NULL; +} + +static void _start_date_popup_set_click_cb(void *data, Evas_Object *obj, + void *event_info) +{ + struct tm start_date = {0}; + Eina_Bool time_res = EINA_FALSE; + SmartMgrData *smd = data; + + time_res = elm_datetime_value_get(start_date_popup_datetime, &start_date); - evas_object_smart_callback_add(radio, "changed", - _radio_changed_cb, item); + evas_object_del(start_date_popup); + start_date_popup = NULL; + start_date_popup_datetime = NULL; - if (smd->wifi_limits.cycle_mode == item->radio_num) - elm_radio_value_set(radio, item->radio_num); - return radio; + if (EINA_TRUE == time_res) { + smd->wifi_limits.cycle_start = mktime(&start_date); + if (!write_wifi_cycle_start(smd->wifi_limits.cycle_start)) + SETTING_TRACE_ERROR("Failed to write wifi cycle start"); + } else { + SETTING_TRACE_ERROR("Failed to obtain data from datetime %p", + start_date_popup_datetime); + } + + elm_genlist_realized_items_update(smd->wifi_data_setting_genlist); } -static Evas_Object *_radio_item_content_get(void *data, Evas_Object *glist, - const char *part) +static void _start_date_item_click_cb(void *data, Evas_Object *genlist, + void *event_info) { - Radio_Item_Data *radio_item_data = (Radio_Item_Data *)data; - retv_if(!radio_item_data, NULL); + SmartMgrData *smd = data; + Evas_Object *button = NULL; + + time_t now = time(NULL); + elm_genlist_item_selected_set(event_info, EINA_FALSE); + start_date_popup = _create_popup(smd, _("Select start date")); + start_date_popup_datetime = elm_datetime_add(start_date_popup); + elm_object_style_set(start_date_popup_datetime, "date_layout"); + elm_datetime_format_set(start_date_popup_datetime, "%d/%b/%Y"); + elm_datetime_value_set(start_date_popup_datetime, + (Elm_Datetime_Time *)localtime(&now)); + elm_object_content_set(start_date_popup, start_date_popup_datetime); + + button = elm_button_add(start_date_popup); + elm_object_text_set(button, _("Cancel")); + elm_object_part_content_set(start_date_popup, "button1", button); + evas_object_smart_callback_add(button, "clicked", + _start_date_popup_cancel_click_cb, smd); + + button = elm_button_add(start_date_popup); + elm_object_text_set(button, _("Set")); + elm_object_part_content_set(start_date_popup, "button2", button); + evas_object_smart_callback_add(button, "clicked", + _start_date_popup_set_click_cb, smd); +} - if (!safeStrCmp(part, "elm.swallow.end")) - return create_radio(radio_item_data->smd, glist, radio_item_data); +static char *_cycle_item_text_get(void *data, Evas_Object *genlist, + const char *part) +{ + if (!data) + return NULL; + + if (!safeStrCmp(part, "elm.text")) + return strdup( + cycle_names[((SmartMgrData *)data)->wifi_limits.cycle_mode] + ); + + if (!safeStrCmp(part, "elm.text.sub")) + return strdup(_("Cycle")); return NULL; } -static void _radio_item_selected_cb(void *data, Evas_Object *obj, - void *event_info) +static char *_start_date_item_text_get(void *data, Evas_Object *genlist, + const char *part) { - bool res = false; + SmartMgrData *smd = data; + char buff[128] = {'\0',}; + struct tm *tm = NULL; - Elm_Object_Item *item = (Elm_Object_Item *)event_info; - Radio_Item_Data *radio_item_data = (Radio_Item_Data *)elm_object_item_data_get(item); - ret_if(!radio_item_data); - elm_genlist_item_selected_set(item, EINA_FALSE); - - if (radio_item_data->smd->wifi_limits.cycle_mode != radio_item_data->radio_num) { - elm_radio_value_set( - radio_item_data->smd->wifi_data_usage_cycle_radiogroup, - radio_item_data->radio_num); - radio_item_data->smd->wifi_limits.cycle_mode = - (Cycle_Mode_E)radio_item_data->radio_num; - } + if (!data || CYCLE_MODE_DAILY == smd->wifi_limits.cycle_mode) + return NULL; - _complement_data_usage_wifi_genlist(radio_item_data->smd->wifi_data_setting_genlist, radio_item_data->smd); + tm = localtime((time_t *)(&(smd->wifi_limits.cycle_start))); + + if (!safeStrCmp(part, "elm.text")) { + + switch (smd->wifi_limits.cycle_mode) { + case CYCLE_MODE_MONTHLY: + snprintf(buff, sizeof(buff), "%d", tm->tm_mday); + break; + case CYCLE_MODE_WEEKLY: + snprintf(buff, sizeof(buff), "%s", + _(weekday_names[tm->tm_wday])); + break; + case CYCLE_MODE_DAILY: + break; + case CYCLE_MODE_CUSTOM: + strftime(buff, sizeof(buff), "%a, %d/%m/%Y", tm); + break; + default: + break; + } + + return strdup(buff); + } - res = write_wifi_cycle_mode(radio_item_data->smd->wifi_limits.cycle_mode); - ret_if(!res); + if (!safeStrCmp(part, "elm.text.sub")) + return strdup(_("Start date")); - evas_object_del(radio_item_data->smd->wifi_data_usage_cycle_popup); + return NULL; } -static void _radio_item_delete(void *data, Evas_Object *obj) +static char *_info_item_text_get(void *data, Evas_Object *genlist, + const char *part) { - Radio_Item_Data *radio_item_data = (Radio_Item_Data *)data; - ret_if(!radio_item_data); + SmartMgrData *smd = data; + char buff[256] = {'\0',}; + struct tm *tm = NULL; + if (!data) + return NULL; - free(radio_item_data); + tm = localtime((time_t *)(&(smd->wifi_limits.cycle_start))); + + if (!safeStrCmp(part, "elm.text.multiline")) { + switch (smd->wifi_limits.cycle_mode) { + case CYCLE_MODE_MONTHLY: + snprintf(buff, sizeof(buff), "%s %d %s", + _("The data usage info will be reset on the"), + tm->tm_mday, + _("day of every month.")); + break; + case CYCLE_MODE_WEEKLY: + snprintf(buff, sizeof(buff), "%s %s %s", + _("The data usage info will be reset every"), + _(weekday_names[tm->tm_wday]), + "."); + break; + case CYCLE_MODE_DAILY: + snprintf(buff, sizeof(buff), "%s", + _("The data usage info will be reset at midnight every day.")); + break; + case CYCLE_MODE_CUSTOM: + snprintf(buff, sizeof(buff), "%s %d %s", + _("The data usage info will be reset every"), + smd->wifi_limits.custom_mode_interval, + "days."); + break; + default: + break; + } + return strdup(buff); + } + return NULL; +} + +static void _generate_list(SmartMgrData *ad, Evas_Object *genlist) +{ + Elm_Object_Item *info_item = NULL; + + elm_genlist_item_append(genlist, &cycle_itc, ad, NULL, + ELM_GENLIST_ITEM_NONE, _cycle_item_click_cb, ad); + elm_genlist_item_append(genlist, &start_date_itc, ad, NULL, + ELM_GENLIST_ITEM_NONE, _start_date_item_click_cb, ad); + info_item = elm_genlist_item_append(genlist, &info_itc, ad, NULL, + ELM_GENLIST_ITEM_NONE, NULL, ad); + elm_genlist_item_select_mode_set(info_item, ELM_OBJECT_SELECT_MODE_NONE); }