[SM]Checkboxes and cycle state fix 78/154578/4
authorPawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
Tue, 10 Oct 2017 13:14:58 +0000 (15:14 +0200)
committerPawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
Wed, 11 Oct 2017 16:04:04 +0000 (18:04 +0200)
Change-Id: Ie8c233c9d0994760aec078095a87f3f8ad4f75df
Signed-off-by: Pawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-mobile-settings.c

index 7a933507dfcb6676031a0680e49c17dcac33c9c1..379f5544befed95c66a3f2e3cb76a1db7124d95f 100755 (executable)
@@ -137,6 +137,9 @@ static Element elements[] = {
 
 static Popup_Info popup_info = {0,};
 
+static Evas_Object *cycle_mode_radio_group = NULL;
+static Evas_Object *start_weekday_radio_group = NULL;
+
 static Elm_Entry_Filter_Accept_Set accept_set = {
                .accepted = "0123456789.",
                .rejected = NULL
@@ -165,7 +168,7 @@ void complement_data_usage_mobile_genlist(Evas_Object *mobile_genlist, SmartMgrD
        _update_genlist_cycle_item(smd);
        _update_genlist_start_date_item(smd);
 
-       elements[ELEMENT_TYPE_START_DATE].function = create_start_popup_functions[smd->selected_sim_limits->cycle_mode-1];
+       elements[ELEMENT_TYPE_START_DATE].function = create_start_popup_functions[smd->selected_sim_limits->cycle_mode];
 
        for (i = 0; i < EINA_C_ARRAY_LENGTH(elements)-1; i++) {
                elements[i].smd = smd;
@@ -493,6 +496,15 @@ static struct tm _get_margin_date(margin_date_type date_type)
        return time_tm;
 }
 
+void write_cycle_mode(SmartMgrData *smd)
+{
+       if (smd->selected_sim_subscriber_id == smd->subscriber_id_1)  {
+               write_sim_1_cycle_mode(smd->selected_sim_limits->cycle_mode);
+       } else if (smd->selected_sim_subscriber_id == smd->subscriber_id_2) {
+               write_sim_2_cycle_mode(smd->selected_sim_limits->cycle_mode);
+       }
+}
+
 void write_cycle_start(SmartMgrData *smd)
 {
        if (smd->selected_sim_subscriber_id == smd->subscriber_id_1)  {
@@ -534,6 +546,7 @@ static void _custom_start_date_popup_ok_cb(void *data, Evas_Object *obj,
                smd->selected_sim_limits->cycle_start = set_date;
                complement_data_usage_mobile_genlist(smd->mobile_data_setting_genlist, smd);
 
+               write_cycle_mode(smd);
                write_cycle_start(smd);
 
                evas_object_del(popup_info.popup);
@@ -702,15 +715,6 @@ static Elm_Gen_Item_Class *_create_genlist_1_line_class(Elm_Gen_Item_Content_Get
        return itc;
 }
 
-void write_cycle_mode(SmartMgrData *smd)
-{
-       if (smd->selected_sim_subscriber_id == smd->subscriber_id_1)  {
-               write_sim_1_cycle_mode(smd->selected_sim_limits->cycle_mode);
-       } else if (smd->selected_sim_subscriber_id == smd->subscriber_id_2) {
-               write_sim_2_cycle_mode(smd->selected_sim_limits->cycle_mode);
-       }
-}
-
 void _radio_cycle_list_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
 {
        Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
@@ -718,6 +722,7 @@ void _radio_cycle_list_item_selected_cb(void *data, Evas_Object *obj, void *even
        if (item_data->smd->selected_sim_limits->cycle_mode != item_data->radio_value) {
                item_data->smd->selected_sim_limits->cycle_mode = item_data->radio_value;
                item_data->smd->selected_sim_limits->cycle_start = 1;
+               elm_radio_value_set(cycle_mode_radio_group, item_data->smd->selected_sim_limits->cycle_mode);
        }
 
        complement_data_usage_mobile_genlist(item_data->smd->mobile_data_setting_genlist, item_data->smd);
@@ -728,6 +733,7 @@ void _radio_cycle_list_item_selected_cb(void *data, Evas_Object *obj, void *even
        evas_object_del(item_data->popup);
 
        write_cycle_mode(item_data->smd);
+       write_cycle_start(item_data->smd);
 }
 
 static Elm_Widget_Item *_append_item_to_radio_list(SmartMgrData *smd, Evas_Object *popup, Evas_Object *genlist, Elm_Gen_Item_Class *itc,
@@ -760,6 +766,7 @@ static void _radio_cycle_selected_cb(void *data, Evas_Object *obj, void *event_i
        if  (item_data->smd->selected_sim_limits->cycle_mode != item_data->radio_value) {
                item_data->smd->selected_sim_limits->cycle_mode = item_data->radio_value;
                item_data->smd->selected_sim_limits->cycle_start = 1;
+               elm_radio_value_set(cycle_mode_radio_group, item_data->smd->selected_sim_limits->cycle_mode);
        }
 
        complement_data_usage_mobile_genlist(item_data->smd->mobile_data_setting_genlist, item_data->smd);
@@ -770,6 +777,8 @@ static void _radio_cycle_selected_cb(void *data, Evas_Object *obj, void *event_i
        evas_object_del(item_data->popup);
 
        write_cycle_mode(item_data->smd);
+       write_cycle_start(item_data->smd);
+
 }
 
 static Evas_Object *_genlist_cycle_radio_content_get(void *data, Evas_Object *obj, const char *part)
@@ -784,11 +793,12 @@ static Evas_Object *_genlist_cycle_radio_content_get(void *data, Evas_Object *ob
        radio = elm_radio_add(obj);
        retv_if(!radio, NULL);
 
+       elm_radio_group_add(radio, cycle_mode_radio_group);
        elm_radio_state_value_set(radio, item_data->radio_value);
        evas_object_smart_callback_add(radio, "changed", _radio_cycle_selected_cb, data);
 
-       if (item_data->smd->selected_sim_limits->cycle_mode == item_data->radio_value)
-               elm_radio_value_set(radio, item_data->radio_value);
+       if (item_data->radio_value == item_data->smd->selected_sim_limits->cycle_mode)
+               elm_radio_value_set(start_weekday_radio_group, item_data->smd->selected_sim_limits->cycle_mode);
 
        return radio;
 }
@@ -805,10 +815,13 @@ static void _create_cycle_list_popup(void *data, Evas_Object *obj, void *event_i
        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);
 
+       cycle_mode_radio_group = elm_radio_add(genlist);
+       elm_radio_value_set(cycle_mode_radio_group, smd->selected_sim_limits->cycle_mode);
+
        itc = _create_genlist_1_line_class(_genlist_cycle_radio_content_get);
        for (i = 0; i < EINA_C_ARRAY_LENGTH(elements_cycle_initial_values); ++i) {
                _append_item_to_radio_list(smd, popup, genlist, itc, elements_cycle_initial_values[i],
-                               i+1, !i, _radio_cycle_list_item_selected_cb);
+                               i, !i, _radio_cycle_list_item_selected_cb);
        }
 
        elm_genlist_item_class_free(itc);
@@ -830,6 +843,7 @@ static void _monthly_start_date_popup_done_cb(void *data, Evas_Object *obj, void
        elm_genlist_realized_items_update(
                        smd->mobile_data_setting_genlist);
 
+       write_cycle_mode(smd);
        write_cycle_start(smd);
 
        evas_object_del(popup_info.popup);
@@ -867,10 +881,13 @@ void _radio_start_date_list_item_selected_cb(void *data, Evas_Object *obj, void
 {
        Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
        item_data->smd->selected_sim_limits->cycle_start = item_data->radio_value;
+       elm_radio_value_set(start_weekday_radio_group, item_data->smd->selected_sim_limits->cycle_start);
+
        _update_genlist_start_date_item(item_data->smd);
 
        evas_object_del(item_data->popup);
 
+       write_cycle_mode(item_data->smd);
        write_cycle_start(item_data->smd);
 }
 
@@ -879,6 +896,8 @@ static void _radio_start_date_selected_cb(void *data, Evas_Object *obj, void *ev
        Radio_List_Item_T *item_data = (Radio_List_Item_T *)data;
 
        item_data->smd->selected_sim_limits->cycle_start = item_data->radio_value;
+       elm_radio_value_set(start_weekday_radio_group, item_data->smd->selected_sim_limits->cycle_start);
+
        complement_data_usage_mobile_genlist(item_data->smd->mobile_data_setting_genlist, item_data->smd);
 
        evas_object_del(item_data->popup);
@@ -896,12 +915,13 @@ static Evas_Object *_genlist_start_date_radio_content_get(void *data, Evas_Objec
        radio = elm_radio_add(obj);
        retv_if(!radio, NULL);
 
+       elm_radio_group_add(radio, start_weekday_radio_group);
        elm_radio_state_value_set(radio, item_data->radio_value);
        evas_object_smart_callback_add(radio, "changed", _radio_start_date_selected_cb, data);
+       if (item_data->radio_value == item_data->smd->selected_sim_limits->cycle_start)
+               elm_radio_value_set(start_weekday_radio_group, item_data->smd->selected_sim_limits->cycle_start);
 
-       if (item_data->smd->selected_sim_limits->cycle_start == item_data->radio_value)
-               elm_radio_value_set(radio, item_data->radio_value);
-
+       write_cycle_mode(item_data->smd);
        write_cycle_start(item_data->smd);
 
        return radio;
@@ -918,6 +938,9 @@ static void _create_start_date_list_popup(void *data, Evas_Object *obj, void *ev
        Elm_Gen_Item_Class *itc = NULL;
        Evas_Object *popup = setting_create_popup_with_list(&genlist, NULL, smd->md.naviframe, "Select start day", NULL, 0, EINA_TRUE, EINA_FALSE, 0);
 
+       start_weekday_radio_group = elm_radio_add(genlist);
+       elm_radio_value_set(start_weekday_radio_group, smd->selected_sim_limits->cycle_mode);
+
        itc = _create_genlist_1_line_class(
                        _genlist_start_date_radio_content_get);
        for (i = 0; i < EINA_C_ARRAY_LENGTH(elements_cycle_day_of_week); ++i) {
@@ -987,7 +1010,7 @@ static void _update_genlist_cycle_item(SmartMgrData *smd)
                snprintf(buf, sizeof(buf), "%d Days", smd->selected_sim_limits->custom_mode_interval);
                elements[ELEMENT_TYPE_CYCLE].value = strdup(buf);
        } else {
-               elements[ELEMENT_TYPE_CYCLE].value = strdup(elements_cycle_initial_values[smd->selected_sim_limits->cycle_mode-1]);
+               elements[ELEMENT_TYPE_CYCLE].value = strdup(elements_cycle_initial_values[smd->selected_sim_limits->cycle_mode]);
        }
 
        elm_genlist_realized_items_update(smd->mobile_data_setting_genlist);
@@ -997,34 +1020,41 @@ static void _update_genlist_start_date_item(SmartMgrData *smd)
 {
        char buf[256] = {0};
        struct tm min_date = {0};
+       struct tm *time = {0};
 
        free(elements[ELEMENT_TYPE_START_DATE].value);
 
-       if (elements_start_time_initial_values[smd->selected_sim_limits->cycle_mode-1]) {
-               if (smd->selected_sim_limits->cycle_start > 1) {
-                       if (smd->selected_sim_limits->cycle_mode == CYCLE_MODE_MONTHLY) {
-                               snprintf(buf, sizeof(buf), "%d", smd->selected_sim_limits->cycle_start);
-                               elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
-                       } else if (smd->selected_sim_limits->cycle_mode == CYCLE_MODE_WEEKLY) {
-                               elements[ELEMENT_TYPE_START_DATE].value =
-                                               strdup(elements_cycle_day_of_week[smd->selected_sim_limits->cycle_start-1]);
-                       } else if (smd->selected_sim_limits->cycle_mode == CYCLE_MODE_CUSTOM) {
-                               struct tm *time = localtime((time_t*)&smd->selected_sim_limits->cycle_start);
-                               strftime(buf, sizeof(buf), date_format, time);
-                               elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
-                       }
+       if (smd->selected_sim_limits->cycle_start > 1) {
+               switch (smd->selected_sim_limits->cycle_mode) {
+               case CYCLE_MODE_MONTHLY:
+                       snprintf(buf, sizeof(buf), "%d", smd->selected_sim_limits->cycle_start);
+                       elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
+                       break;
+               case CYCLE_MODE_WEEKLY:
+                       elements[ELEMENT_TYPE_START_DATE].value =
+                       strdup(elements_cycle_day_of_week[smd->selected_sim_limits->cycle_start-1]);
+                       break;
+               case CYCLE_MODE_DAILY:
+                       break;
+               case CYCLE_MODE_CUSTOM:
+                       time = localtime((time_t*)&smd->selected_sim_limits->cycle_start);
+                       strftime(buf, sizeof(buf), date_format, time);
+                       elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
+                       break;
+               }
+       } else {
+               if (smd->selected_sim_limits->cycle_mode == CYCLE_MODE_CUSTOM) {
+                       min_date = _get_margin_date(DATE_MIN);
+                       smd->selected_sim_limits->cycle_start = (int)mktime(&min_date);
+                       strftime(buf, sizeof(buf), date_format, &min_date);
+                       elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
                } else {
-                       if (smd->selected_sim_limits->cycle_mode == CYCLE_MODE_CUSTOM) {
-                               min_date = _get_margin_date(DATE_MIN);
-                               smd->selected_sim_limits->cycle_start = (int)mktime(&min_date);
-                               strftime(buf, sizeof(buf), date_format, &min_date);
-                               elements[ELEMENT_TYPE_START_DATE].value = strdup(buf);
+                       if (elements_start_time_initial_values[smd->selected_sim_limits->cycle_mode]) {
+                               elements[ELEMENT_TYPE_START_DATE].value = strdup(elements_start_time_initial_values[smd->selected_sim_limits->cycle_mode]);
                        } else {
-                               elements[ELEMENT_TYPE_START_DATE].value = strdup(elements_start_time_initial_values[smd->selected_sim_limits->cycle_mode-1]);
+                               elements[ELEMENT_TYPE_START_DATE].value = NULL;
                        }
                }
-       } else {
-               elements[ELEMENT_TYPE_START_DATE].value = NULL;
        }
 
        elm_genlist_realized_items_update(smd->mobile_data_setting_genlist);
@@ -1034,7 +1064,7 @@ static void _update_genlist_info_item(SmartMgrData *smd)
 {
        free(elements[ELEMENT_TYPE_INFO].value);
 
-       elements[ELEMENT_TYPE_INFO].value = strdup(elements_info_initial_values[smd->selected_sim_limits->cycle_mode-1]);
+       elements[ELEMENT_TYPE_INFO].value = strdup(elements_info_initial_values[smd->selected_sim_limits->cycle_mode]);
 
        elm_genlist_realized_items_update(smd->mobile_data_setting_genlist);
 }