[SM][Mob]Displaying values and units fixed 55/159055/1
authorPawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
Mon, 6 Nov 2017 16:44:56 +0000 (17:44 +0100)
committerPawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
Mon, 6 Nov 2017 16:44:56 +0000 (17:44 +0100)
Change-Id: I038c91d56363a2936ad8a04a2bb04d2bddac38cf
Signed-off-by: Pawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
setting-smartmanager/smartmanager-data/include/smartmanager-utils.h
setting-smartmanager/smartmanager-data/src/smartmanager-data-usage-mobile-settings.c
setting-smartmanager/smartmanager-data/src/smartmanager-utils.c

index 04ee2ec264e29ee341ecaaacd0c3a2bd3a3c5330..3b2a11b86878cf49cac585d15a269baa8b06e7d7 100644 (file)
@@ -40,6 +40,11 @@ int get_days_in_current_month();
 void get_data_amount_str(const char *prefix, int64_t num_bytes, char *txt_out,
                                                int len_max);
 
+void get_data_int_amount_str(int64_t num_bytes, char *int_amount_str,
+       int len_max);
+
+void get_data_unit_str(int64_t num_bytes, char *unit_str, int len_max);
+
 /**
  * @brief Formats string composed of number and ordinal number postfix
  *
index 175b4fbd800eca0d06ca010da9cff8ecbc615532..615338144ab412928af5f954a43573264368c8a9 100755 (executable)
@@ -54,11 +54,6 @@ setting_view sm_view_data_usage_mobile;
 
 static const char date_format[] = "%a, %d/%m/%Y";
 
-typedef enum {
-       DATA_UNIT_TYPE_MB = 2,
-       DATA_UNIT_TYPE_GB = 3,
-} Data_Unit_Type_E;
-
 typedef enum {
        DATE_MIN = 0,
        DATE_MAX,
@@ -73,8 +68,8 @@ typedef struct {
 
 typedef struct {
        Evas_Object *popup;
+       Evas_Object *unit_btn;
        Evas_Object *content;
-       Data_Unit_Type_E unit;
 } Popup_Info;
 
 static char *elements_cycle_initial_values[] = {
@@ -225,20 +220,21 @@ static Evas_Object *_create_popup_button(Evas_Object *parent, char *part,
                weight_x, weight_y, false, cb, callback_data);
 }
 
-static void _entry_set_displayed_value(int64_t value, Data_Unit_Type_E unit)
+static void _entry_set_displayed_value(Evas_Object *entry, Evas_Object *button,
+       int64_t value)
 {
-       char buf[256] = {0};
-       int to_display = value/pow(1024.0, unit);
-       snprintf(buf, sizeof(buf), "%d", to_display);
-       elm_object_text_set(popup_info.content, buf);
+       char int_amount_buf[256] = {0};
+       char unit_buf[256] = {0};
+       get_data_int_amount_str(value, int_amount_buf, sizeof(int_amount_buf));
+       elm_object_text_set(entry, int_amount_buf);
+       get_data_unit_str(value, unit_buf, sizeof(unit_buf));
+       elm_object_text_set(button, unit_buf);
 }
 
 static void _data_unit_type_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       elm_object_text_set(obj, popup_info.unit == DATA_UNIT_TYPE_MB ?
-               _("GB") : _("MB"));
-       popup_info.unit = popup_info.unit == DATA_UNIT_TYPE_MB ?
-               DATA_UNIT_TYPE_GB : DATA_UNIT_TYPE_MB;
+       const char *unit_text = elm_object_text_get(obj);
+       elm_object_text_set(obj, !strcmp(unit_text, "GB") ? "MB" : "GB");
 }
 
 static void create_toast_popup(Evas_Object *parent, char *text)
@@ -578,17 +574,19 @@ static void _warning_popup_done_cb(void *data, Evas_Object *obj,
        SmartMgrData *smd = (SmartMgrData *)data;
        ret_if(!smd);
 
-       const char *text = elm_object_text_get(popup_info.content);
-       float value = atof(text);
-       char unit_name[16] = {0};
+       const char *value_text = elm_object_text_get(popup_info.content);
+       float value = atof(value_text);
+       const char *unit_text = elm_object_text_get(popup_info.unit_btn);
 
-       value *= pow(1024, popup_info.unit);
-       strncpy(unit_name, popup_info.unit == DATA_UNIT_TYPE_MB ?
-               _("MB") : _("GB"), sizeof(unit_name));
+       if (!strcmp(unit_text, "GB")) {
+               value *= pow(1024, 3);
+       } else {
+               value *= pow(1024, 2);
+       }
 
        if (value > 0) {
-               if (value <= MAX_LIMIT_IN_BYTES) {
-                       if (value < smd->selected_sim_limits->limit) {
+               if (value < smd->selected_sim_limits->limit) {
+                       if (value <=  MAX_LIMIT_IN_BYTES) {
                                if (set_mobile_limit_restrictions(smd->stc,
                                                smd->selected_sim_subscriber_id,
                                                smd->selected_sim_limits->limit,
@@ -599,14 +597,14 @@ static void _warning_popup_done_cb(void *data, Evas_Object *obj,
                                evas_object_del(popup_info.popup);
                        } else {
                                create_toast_popup(popup_info.popup,
-                                       _("Value must be lower than limit value"));
+                                       _("Maximum value allowed is 100GB. Value changed to 100GB"));
+                               smd->selected_sim_limits->warning = MAX_LIMIT_IN_BYTES;
+                               _entry_set_displayed_value(popup_info.content,
+                                       popup_info.unit_btn, smd->selected_sim_limits->warning);
                        }
                } else {
                        create_toast_popup(popup_info.popup,
-                               _("Maximum value allowed is 100GB. Value changed to 100GB"));
-                               smd->selected_sim_limits->warning = MAX_LIMIT_IN_BYTES;
-                               _entry_set_displayed_value(smd->selected_sim_limits->warning,
-                                       popup_info.unit);
+                               _("Value must be lower than limit value"));
                }
        } else {
                unset_mobile_limit_restrictions(smd->stc,
@@ -631,17 +629,16 @@ static void _create_warning_popup(void *data, Evas_Object *obj,
        popup_info.content = _create_entry(box);
        Evas_Object *clean = create_editfield_clear_popup_button(box, NULL, NULL,
                0.02, EVAS_HINT_EXPAND, _clean_entry_cb, popup_info.content);
-       popup_info.unit = DATA_UNIT_TYPE_MB;
 
-       Evas_Object *btn   = _create_popup_button(box, NULL, _("MB"),
+       popup_info.unit_btn = _create_popup_button(box, NULL, _("GB"),
                0.25, EVAS_HINT_EXPAND, _data_unit_type_cb, NULL);
 
        elm_box_pack_end(box, popup_info.content);
        elm_box_pack_end(box, clean);
-       elm_box_pack_end(box, btn);
+       elm_box_pack_end(box, popup_info.unit_btn);
 
-       _entry_set_displayed_value(smd->selected_sim_limits->warning,
-               popup_info.unit);
+       _entry_set_displayed_value(popup_info.content,
+               popup_info.unit_btn, smd->selected_sim_limits->warning);
 
        _create_popup_button(popup_info.popup, "button1", _("Cancel"),
                EVAS_HINT_EXPAND, EVAS_HINT_EXPAND,
@@ -659,13 +656,15 @@ static void _limit_popup_done_cb(void *data, Evas_Object *obj,
        SmartMgrData *smd = (SmartMgrData *)data;
        ret_if(!smd);
 
-       const char *text = elm_object_text_get(popup_info.content);
-       float value = atof(text);
-       char unit_name[16] = {0};
+       const char *value_text = elm_object_text_get(popup_info.content);
+       float value = atof(value_text);
+       const char *unit_text = elm_object_text_get(popup_info.unit_btn);
 
-       value *= pow(1024, popup_info.unit);
-       strncpy(unit_name, popup_info.unit == DATA_UNIT_TYPE_MB ?
-               _("MB") : _("GB"), sizeof(unit_name));
+       if (!strcmp(unit_text, "GB")) {
+               value *= pow(1024, 3);
+       } else {
+               value *= pow(1024, 2);
+       }
 
        if (value > 0) {
                if (value <= MAX_LIMIT_IN_BYTES) {
@@ -685,9 +684,9 @@ static void _limit_popup_done_cb(void *data, Evas_Object *obj,
                } else {
                        create_toast_popup(popup_info.popup,
                                _("Maximum value allowed is 100GB. Value changed to 100GB"));
-                               smd->selected_sim_limits->limit = MAX_LIMIT_IN_BYTES;
-                       _entry_set_displayed_value(smd->selected_sim_limits->limit,
-                               popup_info.unit);
+                       smd->selected_sim_limits->limit = MAX_LIMIT_IN_BYTES;
+                       _entry_set_displayed_value(popup_info.content, popup_info.unit_btn,
+                               smd->selected_sim_limits->limit);
                }
        } else {
                unset_mobile_limit_restrictions(smd->stc,
@@ -711,17 +710,16 @@ static void _create_limit_popup(void *data, Evas_Object *obj, void *event_info)
        popup_info.content = _create_entry(box);
        Evas_Object *clean = create_editfield_clear_popup_button(box, NULL, NULL,
                0.02, EVAS_HINT_EXPAND, _clean_entry_cb, popup_info.content);
-       popup_info.unit = DATA_UNIT_TYPE_MB;
 
-       Evas_Object *btn   = _create_popup_button(box, NULL, _("MB"), 0.25,
+       popup_info.unit_btn   = _create_popup_button(box, NULL, _("GB"), 0.25,
                EVAS_HINT_EXPAND, _data_unit_type_cb, NULL);
 
        elm_box_pack_end(box, popup_info.content);
        elm_box_pack_end(box, clean);
-       elm_box_pack_end(box, btn);
+       elm_box_pack_end(box, popup_info.unit_btn);
 
-       _entry_set_displayed_value(smd->selected_sim_limits->limit,
-               popup_info.unit);
+       _entry_set_displayed_value(popup_info.content, popup_info.unit_btn,
+               smd->selected_sim_limits->limit);
 
        _create_popup_button(popup_info.popup, "button1", _("Cancel"),
                EVAS_HINT_EXPAND, EVAS_HINT_EXPAND, _popup_cancel_cb,
@@ -1101,13 +1099,18 @@ static char *_warning_item_label_get(void *data, Evas_Object *obj,
        const char *part)
 {
        char buf[256] = {0};
+       char int_amount_buf[256] = {0};
+       char unit_buf[256] = {0};
        SmartMgrData *smd = (SmartMgrData *)data;
        retv_if(!smd, NULL);
 
        if (!strcmp(part, "elm.text")) {
                if (smd->selected_sim_limits->warning > 0) {
-                       get_data_amount_str("", smd->selected_sim_limits->warning, buf,
-                                       sizeof(buf));
+                       get_data_int_amount_str(smd->selected_sim_limits->warning,
+                               int_amount_buf, sizeof(int_amount_buf));
+                       get_data_unit_str(smd->selected_sim_limits->warning, unit_buf,
+                               sizeof(unit_buf));
+                       snprintf(buf, sizeof(buf), "%s%s", int_amount_buf, unit_buf);
                } else {
                        snprintf(buf, sizeof(buf), "%s", _("None"));
                }
@@ -1125,13 +1128,18 @@ static char *_limit_item_label_get(void *data, Evas_Object *obj,
        const char *part)
 {
        char buf[256] = {0};
+       char int_amount_buf[256] = {0};
+       char unit_buf[256] = {0};
        SmartMgrData *smd = (SmartMgrData *)data;
        retv_if(!smd, NULL);
 
        if (!strcmp(part, "elm.text")) {
                if (smd->selected_sim_limits->limit > 0) {
-                       get_data_amount_str("", smd->selected_sim_limits->limit, buf,
-                               sizeof(buf));
+                       get_data_int_amount_str(smd->selected_sim_limits->limit,
+                               int_amount_buf, sizeof(int_amount_buf));
+                       get_data_unit_str(smd->selected_sim_limits->limit, unit_buf,
+                               sizeof(unit_buf));
+                       snprintf(buf, sizeof(buf), "%s%s", int_amount_buf, unit_buf);
                } else {
                        snprintf(buf, sizeof(buf), "%s", _("None"));
                }
index 5adf6189018de35baf122bf1378817205fb1cc3b..768040f6156efb506c89064a7a368f61d9c361c0 100755 (executable)
@@ -61,6 +61,72 @@ void get_data_amount_str(const char *prefix, int64_t num_bytes, char *txt_out, i
        }
 }
 
+void get_data_int_amount_str(int64_t num_bytes, char *int_amount_str,
+       int len_max)
+{
+       int amount = 0;
+
+       if (num_bytes < 1024) {
+               snprintf(int_amount_str, len_max, "%lld", num_bytes);
+               return;
+       }
+       /*KB:*/
+       amount = num_bytes / 1024;
+       if (amount >= 1024) {
+               /*MB:*/
+               if ((amount / 1024) >= 1024) {
+                       amount = amount / 1024;
+                       if (amount % 1024 == 0) {
+                               snprintf(int_amount_str, len_max, "%d", (amount / 1024));
+                               return;
+                       } else {
+                               snprintf(int_amount_str, len_max, "%d", (amount));
+                               return;
+                       }
+               } else {
+                       snprintf(int_amount_str, len_max, "%d", (amount / 1024));
+                       return;
+               }
+       } else {
+               snprintf(int_amount_str, len_max, "%d", amount);
+       }
+}
+
+void get_data_unit_str(int64_t num_bytes, char *unit_str, int len_max)
+{
+       int amount = 0;
+
+       if (num_bytes == 0) {
+               snprintf(unit_str, len_max, "MB");
+               return;
+       }
+       if (num_bytes < 1024) {
+               snprintf(unit_str, len_max, "B");
+               return;
+       }
+
+       /*KB:*/
+       amount = num_bytes / 1024;
+       if (amount >= 1024) {
+               /*MB:*/
+               if ((amount / 1024) >= 1024) {
+                       amount = amount / 1024;
+                       if (amount % 1024 == 0) {
+                               snprintf(unit_str, len_max, "GB");
+                               return;
+                       } else {
+                               snprintf(unit_str, len_max, "MB");
+                               return;
+                       }
+               } else {
+                       snprintf(unit_str, len_max, "MB");
+                       return;
+               }
+       } else {
+               snprintf(unit_str, len_max, "KB");
+       }
+}
+
 void create_number_with_postfix(int number, char *output, int max_len)
 {
        int temp = number % 100;