[SM][Wifi] Added month day selection popup 99/154599/3
authorRadek Kintop <r.kintop@samsung.com>
Tue, 10 Oct 2017 16:26:34 +0000 (18:26 +0200)
committerRadek Kintop <r.kintop@samsung.com>
Wed, 11 Oct 2017 15:28:08 +0000 (15:28 +0000)
- month day selection
- start cycle logic corrected
- start cycle changes on cycle mode change

Change-Id: I66bcd95b16cd610f4a8b2a740da4c720c4001f82
Signed-off-by: Radek Kintop <r.kintop@samsung.com>
setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-wifi-settings.c

index 8d658fbc7e42a20511f9ffaef226abd29abcf489..06cd147bf459f18ba04c6a204ee4c9ba67829847 100755 (executable)
@@ -73,6 +73,7 @@ static Evas_Object *cycle_popup = NULL;
 static Evas_Object *start_date_popup = NULL;
 static Evas_Object *start_date_popup_radio_group = NULL;
 static Evas_Object *start_date_popup_datetime = NULL;
+static Evas_Object *start_date_popup_month_day_spinner = NULL;
 
 const static char *cycle_names[] = {
        "Monthly",
@@ -89,35 +90,6 @@ static void _popup_back_cb(void *data, Evas_Object *popup, void *event_info)
 {
        evas_object_del(popup);
 }
-/*
-
-
-static Evas_Object *_create_datetime(Evas_Object *parent, setting_call_back_func _datetime_picker_value_changed_cb, SmartMgrData *smd)
-{
-       Evas_Object *day_picker = elm_datetime_add(parent);
-
-       elm_datetime_field_visible_set(day_picker, ELM_DATETIME_HOUR, EINA_FALSE);
-       elm_datetime_field_visible_set(day_picker, ELM_DATETIME_MINUTE, EINA_FALSE);
-
-       elm_datetime_field_visible_set(day_picker, ELM_DATETIME_YEAR, EINA_FALSE);
-       elm_datetime_field_visible_set(day_picker, ELM_DATETIME_MONTH, EINA_FALSE);
-       elm_datetime_field_visible_set(day_picker, ELM_DATETIME_DATE, EINA_TRUE);
-       elm_datetime_field_visible_set(day_picker, ELM_DATETIME_AMPM, EINA_FALSE);
-
-       elm_object_style_set(day_picker, "datepicker_layout");
-       elm_datetime_format_set(day_picker, "%e");
-       elm_datetime_value_set(day_picker, &smd->wifi_start_date);
-       evas_object_size_hint_weight_set(day_picker, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(day_picker, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-       evas_object_smart_callback_add(day_picker, "changed", _datetime_picker_value_changed_cb, smd);
-       elm_object_content_set(parent, day_picker);
-
-       evas_object_show(day_picker);
-       return day_picker;
-}
-
-*/
 
 static int _create(void *data)
 {
@@ -149,6 +121,7 @@ static int _destroy(void *data)
        cycle_popup_radio_group = NULL;
        start_date_popup_datetime = NULL;
        start_date_popup_radio_group = NULL;
+       start_date_popup_month_day_spinner = NULL;
        sm_view_data_usage_wifi.is_create = 0;
        return 0;
 }
@@ -206,15 +179,21 @@ static void _cycle_popup_item_selected_cb(void *ix, Evas_Object *genlist,
        if (!smd)
                return;
 
-       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)
+       if (!write_wifi_cycle_mode(smd->wifi_limits.cycle_mode)) {
                SETTING_TRACE_ERROR("Failed to write wifi cycle mode");
+       } else {
+               /* It is necessary to reset start cycle values: */
+               if (CYCLE_MODE_CUSTOM == smd->wifi_limits.cycle_mode)
+                       smd->wifi_limits.cycle_start = time(NULL);
+               else
+                       smd->wifi_limits.cycle_start = 1;
+
+               if (!write_wifi_cycle_start(smd->wifi_limits.cycle_start))
+                       SETTING_TRACE_ERROR("Failed to write wifi cycle start week day");
+       }
 
        evas_object_del(cycle_popup);
        cycle_popup = NULL;
@@ -222,13 +201,23 @@ static void _cycle_popup_item_selected_cb(void *ix, Evas_Object *genlist,
        elm_genlist_realized_items_update(smd->wifi_data_setting_genlist);
 }
 
-static void _cycle_popup_radio_changed_cb(void *data, Evas_Object *radio, void *event_info)
+static void _cycle_popup_radio_changed_cb(void *data, Evas_Object *radio,
+                                                                                       void *event_info)
 {
        SmartMgrData *smd = data;
 
        smd->wifi_limits.cycle_mode = elm_radio_state_value_get(radio);
-       if (!write_wifi_cycle_mode(smd->wifi_limits.cycle_mode))
+       if (!write_wifi_cycle_mode(smd->wifi_limits.cycle_mode)) {
                SETTING_TRACE_ERROR("Failed to write wifi cycle mode");
+       } else {
+               /* It is necessary to reset start cycle values: */
+               if (CYCLE_MODE_CUSTOM == smd->wifi_limits.cycle_mode)
+                       smd->wifi_limits.cycle_start = time(NULL);
+               else
+                       smd->wifi_limits.cycle_start = 1;
+               if (!write_wifi_cycle_start(smd->wifi_limits.cycle_start))
+                       SETTING_TRACE_ERROR("Failed to write wifi cycle start week day");
+       }
 
        evas_object_del(cycle_popup);
        cycle_popup = NULL;
@@ -306,6 +295,7 @@ static void _start_date_popup_cancel_click_cb(void *data, Evas_Object *button,
        evas_object_del(start_date_popup);
        start_date_popup = NULL;
        start_date_popup_datetime = NULL;
+       start_date_popup_month_day_spinner = NULL;
 }
 
 static void _start_date_popup_set_click_cb(void *data, Evas_Object *obj,
@@ -315,21 +305,31 @@ static void _start_date_popup_set_click_cb(void *data, Evas_Object *obj,
        Eina_Bool time_res = EINA_FALSE;
        SmartMgrData *smd = data;
 
-       time_res = elm_datetime_value_get(start_date_popup_datetime, &start_date);
+       smd->wifi_limits.cycle_start = 1;
 
-       evas_object_del(start_date_popup);
-       start_date_popup = NULL;
-       start_date_popup_datetime = NULL;
+       if (CYCLE_MODE_MONTHLY == smd->wifi_limits.cycle_mode) {
+               smd->wifi_limits.cycle_start =
+                               (int)elm_spinner_value_get(start_date_popup_month_day_spinner);
+       }
 
-       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);
+       if (CYCLE_MODE_CUSTOM == smd->wifi_limits.cycle_mode) {
+               time_res = elm_datetime_value_get(start_date_popup_datetime,
+                                                                                       &start_date);
+               if (EINA_TRUE == time_res) {
+                       smd->wifi_limits.cycle_start = mktime(&start_date);
+               } else {
+                       SETTING_TRACE_ERROR("Failed to obtain data from datetime %p",
+                                               start_date_popup_datetime);
+               }
        }
 
+       if (!write_wifi_cycle_start(smd->wifi_limits.cycle_start))
+               SETTING_TRACE_ERROR("Failed to write wifi cycle start");
+
+       evas_object_del(start_date_popup);
+       start_date_popup = NULL;
+       start_date_popup_datetime = NULL;
+       start_date_popup_month_day_spinner = NULL;
        elm_genlist_realized_items_update(smd->wifi_data_setting_genlist);
 }
 
@@ -411,14 +411,30 @@ static void _start_date_item_click_cb(void *data, Evas_Object *genlist,
        if (!smd)
                return;
 
-       if (CYCLE_MODE_MONTHLY == smd->wifi_limits.cycle_mode) {
+       if (CYCLE_MODE_CUSTOM == smd->wifi_limits.cycle_mode ||
+               CYCLE_MODE_MONTHLY == smd->wifi_limits.cycle_mode) {
                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);
+
+               if (CYCLE_MODE_CUSTOM == smd->wifi_limits.cycle_mode) {
+                       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);
+               }
+
+               if (CYCLE_MODE_MONTHLY == smd->wifi_limits.cycle_mode) {
+                       start_date_popup_month_day_spinner =
+                                                                       elm_spinner_add(start_date_popup);
+                       elm_object_style_set(start_date_popup_month_day_spinner,
+                                                                       "vertical");
+                       elm_spinner_value_set(start_date_popup_month_day_spinner,
+                                                                       smd->wifi_limits.cycle_start);
+                       elm_spinner_min_max_set(start_date_popup_month_day_spinner, 1, 31);
+                       elm_object_content_set(start_date_popup,
+                                                                       start_date_popup_month_day_spinner);
+               }
 
                button = elm_button_add(start_date_popup);
                elm_object_text_set(button, _("Cancel"));
@@ -477,21 +493,28 @@ static char *_start_date_item_text_get(void *data, Evas_Object *genlist,
        if (!data || CYCLE_MODE_DAILY == smd->wifi_limits.cycle_mode)
                return NULL;
 
-       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);
+
+                       snprintf(buff, sizeof(buff), "%d", smd->wifi_limits.cycle_start);
                        break;
                case CYCLE_MODE_WEEKLY:
+                       if ((smd->wifi_limits.cycle_start >=
+                               sizeof(weekday_names) / sizeof(char *)) ||
+                                       smd->wifi_limits.cycle_start < 0) {
+                               SETTING_TRACE_ERROR("Cycle start is put of bounds %d"\
+                                                                       " setting to 0",
+                                                                       smd->wifi_limits.cycle_start);
+                               smd->wifi_limits.cycle_start = 0;
+                       }
                        snprintf(buff, sizeof(buff), "%s",
                                        _(weekday_names[smd->wifi_limits.cycle_start]));
                        break;
                case CYCLE_MODE_DAILY:
                        break;
                case CYCLE_MODE_CUSTOM:
+                       tm = localtime((time_t *)(&(smd->wifi_limits.cycle_start)));
                        strftime(buff, sizeof(buff), "%a, %d/%m/%Y", tm);
                        break;
                default:
@@ -512,21 +535,27 @@ static char *_info_item_text_get(void *data, Evas_Object *genlist,
 {
        SmartMgrData *smd = data;
        char buff[256] = {'\0',};
-       struct tm *tm = NULL;
+
        if (!data)
                return NULL;
 
-       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,
+                                       smd->wifi_limits.cycle_start,
                                        _("day of every month."));
                        break;
                case CYCLE_MODE_WEEKLY:
+                       if ((smd->wifi_limits.cycle_start >=
+                               sizeof(weekday_names) / sizeof(char *)) ||
+                                       smd->wifi_limits.cycle_start < 0) {
+                               SETTING_TRACE_ERROR("Cycle start is put of bounds %d"\
+                                                                       " setting to 0",
+                                                                       smd->wifi_limits.cycle_start);
+                               smd->wifi_limits.cycle_start = 0;
+                       }
                        snprintf(buff, sizeof(buff), "%s %s%s",
                                                _("The data usage info will be reset every"),
                                                _(weekday_names[smd->wifi_limits.cycle_start]),