[SM][Data usage] WiFi setting refactor 59/154059/5
authorRadek Kintop <r.kintop@samsung.com>
Thu, 5 Oct 2017 16:51:49 +0000 (18:51 +0200)
committerRadek Kintop <r.kintop@samsung.com>
Mon, 9 Oct 2017 15:53:06 +0000 (17:53 +0200)
Change-Id: Ibbf5760b6671806ccd7a62d46c2a1f6e307e2782
Signed-off-by: Radek Kintop <r.kintop@samsung.com>
setting-smartmanager/smartmanager-data/include/smartmanager-data.h
setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-wifi-settings.c

index 664065bc87206a30a995dca34be19b347d9da5ed..bd88e8096dfdb844747d5b3797ea72e42e5fd149 100755 (executable)
@@ -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 {
index be1ab4311a0e92d941e6c31d19a469119ceb4106..8af1b6896d2a1ced4fbad53b063a7df0bd6b949a 100755 (executable)
@@ -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);
 }