[UI] Cycle popup added. 97/137997/6
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Thu, 6 Jul 2017 10:15:58 +0000 (12:15 +0200)
committerRadek Kintop <r.kintop@samsung.com>
Wed, 19 Jul 2017 09:58:32 +0000 (11:58 +0200)
Change-Id: I28a6f82bbe9163056ca84ab2d5b2d2e868a48e85
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
setting-smartmanager/smartmanager-data/include/smartmanager-data.h
setting-smartmanager/smartmanager-data/src/smartmanager-data-main-view.c
setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-mobile-settings.c

index 308ac996165aed309ff8a11288721306c5a1809f..73ec3686b873e4af3f43eda5f4290b33c7709ca2 100644 (file)
@@ -44,6 +44,13 @@ typedef enum {
        MV_UPDATE_APPEND_WIFI_APP
 } mv_update_type;
 
+typedef enum {
+       CYCLE_MODE_MONTHLY = 1,
+       CYCLE_MODE_WEEKLY  = 2,
+       CYCLE_MODE_DAILY   = 3,
+       CYCLE_MODE_CUSTOM  = 4,
+} Cycle_Mode_E;
+
 typedef enum {
        DATA_USAGE_CYCLE_NONE = -1,
        DATA_USAGE_CYCLE_MONTHLY = 0,
@@ -56,8 +63,11 @@ typedef struct {
        int64_t total_data_used;
        int64_t warning;
        int64_t limit;
+       Cycle_Mode_E cycle_mode;
        time_t interval_from;
        time_t interval_to;
+       int custom_mode_interval;
+       int cycle_start;
 } Data_Limits_T;
 
 typedef struct {
index de02e54104fe33994c184788b484d261aec945fa..b2a5a4661dd5a10b62ed687e740b4cebd91292dc 100644 (file)
@@ -52,6 +52,13 @@ static char *_apps_header_text_get(void *data, Evas_Object *genlist,
 static Evas_Object *_aplication_item_get(void *data, Evas_Object *genlist,
                                                                                const char *part);
 
+static void _initialize_limits(Data_Limits_T *limits)
+{
+       limits->custom_mode_interval = 0;
+       limits->cycle_mode = CYCLE_MODE_MONTHLY;
+       limits->cycle_start = 1;
+}
+
 static int _create(void *data)
 {
        SETTING_TRACE_BEGIN;
@@ -125,6 +132,9 @@ static int _create(void *data)
 
        evas_object_show(ad->md.window);
 
+       _initialize_limits(&ad->sim_1_limits);
+       _initialize_limits(&ad->sim_2_limits);
+
        /* Init sub views */
        init_mobile_settings_view(ad);
        setting_view_node_table_register(ad->mobile_view, ad->main_view);
index ca798e8abd16dd62b071d13c7ad07332e0d6951e..d285bf8cff031ca20fc2e3dd53a3d49f11c848f4 100644 (file)
@@ -43,6 +43,15 @@ typedef enum {
        ELEMENT_TYPE_INFO
 } Element_Type_E;
 
+typedef struct {
+       SmartMgrData *smd;
+       Evas_Object *popup;
+       Evas_Object *group;
+       char *text;
+       int radio_value;
+       bool is_first;
+} Radio_List_Item_T;
+
 typedef struct _Element Element;
 
 struct _Element {
@@ -408,13 +417,165 @@ static bool _create_limit_popup(SmartMgrData *smd, char *title, Element_Type_E t
        return true;
 }
 
+static Elm_Widget_Item *_append_item_to_radio_list(SmartMgrData *smd, Evas_Object *popup, Evas_Object *genlist, Elm_Gen_Item_Class *itc,
+               const char *text, int radio_value, bool is_first,
+               Evas_Smart_Cb select_cb)
+{
+       SETTING_TRACE_BEGIN;
+
+       Radio_List_Item_T *item_data = calloc(1, sizeof(Radio_List_Item_T));
+       if (!item_data) {
+               SETTING_TRACE_ERROR("item_data == NULL");
+               return NULL;
+       }
+
+       item_data->radio_value = radio_value;
+       item_data->text        = strdup(text);
+       item_data->smd         = smd;
+       item_data->popup       = popup;
+
+       Elm_Widget_Item *item = elm_genlist_item_append(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, select_cb, item_data);
+       if (!item) {
+               SETTING_TRACE_ERROR("item == NULL");
+               free(item_data->text);
+               free(item_data);
+               return NULL;
+       }
+
+       SETTING_TRACE_END;
+       return item;
+}
+
+static void _radio_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+
+       Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+       evas_object_del(item_data->popup);
+
+       SETTING_TRACE_END;
+}
+
+static Evas_Object *_genlist_radio_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       SETTING_TRACE_BEGIN;
+
+       int len = strlen("elm.swallow.end");
+       Evas_Object *radio = NULL;
+       Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+
+       if (len != strlen(part) || strncmp("elm.swallow.end", part, len))
+               return NULL;
+
+       radio = elm_radio_add(obj);
+       if (!radio) {
+               SETTING_TRACE_ERROR("radio == NULL");
+               return NULL;
+       }
+
+       if (item_data->is_first)
+               item_data->group = radio;
+       else
+               elm_radio_group_add(radio, item_data->group);
+
+       elm_radio_state_value_set(radio, item_data->radio_value);
+       evas_object_smart_callback_add(radio, "changed", _radio_selected_cb, data);
+
+       SETTING_TRACE_END;
+       return radio;
+}
+
+static char *_genlist_radio_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       SETTING_TRACE_BEGIN;
+
+       int len = strlen("elm.text");
+       Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+
+       if (len != strlen(part) || strncmp("elm.text", part, len))
+               return NULL;
+
+       SETTING_TRACE_END;
+       return strdup(item_data->text);
+}
+
+static void _genlist_radio_del(void *data, Evas_Object *obj)
+{
+       SETTING_TRACE_BEGIN;
+
+       Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+       free(item_data->text);
+       free(item_data);
+
+       SETTING_TRACE_END;
+}
+
+static Elm_Gen_Item_Class *_create_genlist_1_line_class(void)
+{
+       SETTING_TRACE_BEGIN;
+
+       Elm_Gen_Item_Class *itc = elm_genlist_item_class_new();
+       if (!itc) {
+               SETTING_TRACE_ERROR("itc == NULL");
+               return NULL;
+       }
+
+       itc->item_style = "type1";
+       itc->func.content_get = _genlist_radio_content_get;
+       itc->func.text_get = _genlist_radio_text_get;
+       itc->func.del = _genlist_radio_del;
+
+       SETTING_TRACE_END;
+       return itc;
+}
+
+void _radio_list_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+
+       Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
+       evas_object_del(item_data->popup);
+
+       SETTING_TRACE_END;
+}
+
+static void _create_list_popup(SmartMgrData *smd, char *title)
+{
+       SETTING_TRACE_BEGIN;
+
+       char *item_texts[] = { "Monthly", "Weekly", "Daily", "Custom"};
+       int i;
+       Evas_Object *genlist = NULL;
+       Elm_Gen_Item_Class *itc = NULL;
+       Evas_Object *popup = setting_create_popup_with_list(&genlist, NULL, smd->md.naviframe, "Select data usage cycle", NULL, 0, EINA_TRUE, EINA_FALSE, 0);
+
+       if (!popup) {
+               SETTING_TRACE_ERROR("popup == NULL");
+               return;
+       }
+
+       if (!genlist) {
+               SETTING_TRACE_ERROR("genlist == NULL");
+               return;
+       }
+
+       itc = _create_genlist_1_line_class();
+
+       for (i = CYCLE_MODE_MONTHLY; i <= CYCLE_MODE_CUSTOM; ++i)
+               _append_item_to_radio_list(smd, popup, genlist, itc, item_texts[i - 1],
+                                       i, i == CYCLE_MODE_MONTHLY, _radio_list_item_selected_cb);
+
+       elm_genlist_item_class_free(itc);
+
+       SETTING_TRACE_END;
+}
+
 static int _create(void *data)
 {
        SETTING_TRACE_BEGIN;
        SmartMgrData *smd = (SmartMgrData*)data;
        Evas_Object *back_btn = NULL;
        Elm_Object_Item *nf_it = NULL;
-       int i;
 
        back_btn = elm_button_add(smd->md.naviframe);
        elm_object_style_set(back_btn, NAVI_BACK_ARROW_BUTTON_STYLE);
@@ -553,6 +714,7 @@ static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info)
                _create_limit_popup(element->smd, "Set data usage limit", ELEMENT_TYPE_LIMIT);
                break;
        case ELEMENT_TYPE_CYCLE:
+               _create_list_popup(element->smd, "Select data usage cycle");
                break;
        case ELEMENT_TYPE_START_DATE:
                break;