[SM][Data Usage] Main view fixes 39/137139/6 accepted/tizen/unified/20170707.154916 submit/tizen/20170707.072042
authorRadek Kintop <r.kintop@samsung.com>
Tue, 4 Jul 2017 12:36:22 +0000 (14:36 +0200)
committerKiseok Chang <kiso.chang@samsung.com>
Fri, 7 Jul 2017 05:49:42 +0000 (05:49 +0000)
- time interval formating
- application items have progress bar value set
- sim state change will now update the main view
- data usage graphfixes
- claculations for graph values fix

Change-Id: I25d383869d7da69583ae02c1cd8ac9462f18be65
Signed-off-by: Radek Kintop <r.kintop@samsung.com>
resource/edc_resource/genlist_item_mobile_data_usage.edc
setting-smartmanager/smartmanager-data/CMakeLists.txt
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.c

index 36a47bff51f1f158c23306902d15a91e9a63d5a2..30b32bfd348c846128204627ae93032e393fcee9 100644 (file)
@@ -217,8 +217,6 @@ collections
 
                        public message(Msg_Type:type, id, ...)
                        {
-//                             static help_buff[64] = {'\0',};
-
                                if(type == MSG_FLOAT_SET && id == MSG_ID_BAR_LIMITS) {
                                        new Float:warn = getfarg(2);
                                        new Float:limit = getfarg(3);
@@ -253,19 +251,16 @@ collections
                                        new Float: value = getfarg(2);
                                        new state_name[32];
 
-                                       if (value >= limit)
-//                                             state_name = "limit";
+                                       if (value >= limit && get_float(limit_g) > 0)
                                                strncpy(state_name, "limit", 32);
-                                       else if (value >= warn)
-//                                             state_name = "warning";
+                                       else if (value >= warn && get_float(warn_g) > 0)
                                                strncpy(state_name, "warning", 32);
                                        else
-//                                             state_name = "default";
                                                strncpy(state_name, "default", 32);
 
-                                       set_state(PART:"progress_bar_bg", state_name, 0.0);
-
                                        custom_state(PART:"progress_bar", state_name, 0.0);
+                                       if (value > 1.0)
+                                               value = 1.0;
                                        set_state_val(PART:"progress_bar", STATE_REL2, value, 1.0);
                                        set_state(PART:"progress_bar", "custom", 0.0);
                                }
index 232af8e12eae0090fb062c46a05f9bd2482f8991..7ce10316c0fe3ea702f965f302f713cd45916175 100644 (file)
@@ -12,6 +12,7 @@ pkg_check_modules(pkgs_smartmanager_data REQUIRED
        dlog
        capi-appfw-application
        capi-appfw-app-manager
+       capi-base-utils-i18n
        capi-system-system-settings
        capi-telephony
        capi-network-stc
index f20870757ebbc66a943af6ed2794a56eb5a0c92d..f51a00664f19bb3d38c086323bdcc9eedc704f0d 100644 (file)
@@ -29,6 +29,7 @@
 
 typedef enum {
        MV_UPDATE_APPEND_NONE = 0,
+       MV_UPDATE_SIM_STATE_CHANGED,
        MV_UPDATE_SIM_1_TOTAL_DATA_USAGE,
        MV_UPDATE_SIM_2_TOTAL_DATA_USAGE,
        MV_UPDATE_WIFI_TOTAL_DATA_USAGE,
@@ -40,15 +41,6 @@ typedef enum {
        MV_UPDATE_APPEND_WIFI_APP
 } mv_update_type;
 
-typedef struct {
-       char *appid;
-       char *pkgid;
-       char *icon;
-       char *label;
-       long long data_usage_bytes;
-       double percent;
-} data_usage_app_item_t;
-
 typedef struct {
        MainData md;
        Evas_Object *toolbar;
@@ -101,11 +93,11 @@ typedef struct {
                                                                                                        data settings view */
        Elm_Object_Item *item_wifi_first_app_info; /* The first application */
 
-       // Wifi view data usage
+       /* Wifi view data usage: */
        setting_view *wifi_view;
        Evas_Object *wifi_data_setting_genlist;
 
-       // Mobile view data usage
+       /* Mobile view data usage: */
        setting_view *mobile_view;
        Evas_Object *mobile_data_setting_genlist;
 
@@ -132,4 +124,13 @@ typedef struct {
 
 } SmartMgrData;
 
+typedef struct {
+       char *appid;
+       char *pkgid;
+       char *icon;
+       char *label;
+       long long data_usage_bytes;
+       const SmartMgrData *ad;
+} data_usage_app_item_t;
+
 #endif /* SM_DATA_H_ */
index 56924df550b23cc974f22b00c24e6a60b2769926..939f0a0d889e2d2180348647000e6386a82ebe13 100644 (file)
@@ -4,6 +4,8 @@
 #include "smartmanager-data.h"
 #include "setting-common-init.h"
 #include "setting-common-draw-widget.h"
+#include <utils_i18n.h>
+#include <system_settings.h>
 #include <Elementary.h>
 
 #define MSG_ID_LIMITS 2
@@ -37,7 +39,7 @@ static void _append_app(SmartMgrData *ad, Elm_Object_Item **first_app_item,
 static void _redraw_toolbar_buttons(SmartMgrData *ad);
 static void _get_data_amount_str(const char *prefix, int num_bytes,
                                                                        char *txt_out, int len_max);
-static void _get_time_interval_str(const time_t *from, const time_t *to,
+static void _get_time_interval_str(const time_t from, const time_t to,
                                                                        char *txt_out, int len_max);
 
 /** Genlist items class functions: **/
@@ -214,13 +216,52 @@ static void _set_progress_value(Evas_Object *layout, float value)
        SETTING_TRACE_END;
 }
 
+static void _graph_layout_fill(SmartMgrData *ad, Evas_Object *layout,
+                                                       long long total_data, long long warning_data,
+                                                       long long hard_limit_data,
+                                                       time_t interval_from, time_t interval_to)
+{
+       char buff[64] = {'\0',};
+       _get_time_interval_str(interval_from, interval_to, buff, sizeof(buff));
+       elm_layout_text_set(layout, "timespan_txt", buff);
+
+       _get_data_amount_str("", total_data, buff, sizeof(buff));
+       elm_layout_text_set(layout, "quantity_txt", buff);
+
+       if (warning_data > 0) {
+               _get_data_amount_str("Warning: ", warning_data, buff, sizeof(buff));
+               elm_layout_text_set(layout, "warning_txt", buff);
+       } else {
+               elm_layout_text_set(layout, "warning_txt", "");
+       }
+
+       if (hard_limit_data > 0) {
+               _get_data_amount_str("Limit: ", hard_limit_data, buff, sizeof(buff));
+               elm_layout_text_set(layout, "limit_txt", buff);
+               if (warning_data > 0) {
+                       _set_warning_limit_value(layout,
+                                               (float)warning_data / hard_limit_data,
+                                               1.0);
+               } else {
+                       _set_warning_limit_value(layout, -1.0, 1.0);
+               }
+               _set_progress_value(layout, (float)total_data / hard_limit_data);
+       } else {
+               elm_layout_text_set(layout, "limit_txt", "");
+               if (warning_data > 0) {
+                       _set_warning_limit_value(layout, 1.0, -1.0);
+                       _set_progress_value(layout, (float)total_data / warning_data);
+               } else {
+                       _set_warning_limit_value(layout, -1.0, -1.0);
+                       _set_progress_value(layout, 0.0);
+               }
+       }
+}
+
 static Evas_Object *_data_usage_item_get(
                                                void *data, Evas_Object *genlist, const char *part)
 {
-       SETTING_TRACE_BEGIN;
-       char buff[64] = {'\0',};
        Evas_Object *layout = NULL;
-       Evas_Object *progress_bar = NULL;
        SmartMgrData *ad = data;
 
        if (!ad)
@@ -236,101 +277,23 @@ static Evas_Object *_data_usage_item_get(
                        "genlist_item_mobile_data_usage.edj",
                        "genlist_item_mobile_data_usage");
 
-       elm_layout_content_set(layout, "progress_bar", progress_bar);
-
-       elm_layout_text_set(layout, "timespan_txt", "timespan_txt");
-
-       if (ad->sim_1_genlist == genlist) {
-               _get_data_amount_str("", ad->total_data_sim_1, buff, sizeof(buff));
-               elm_layout_text_set(layout, "quantity_txt", buff);
-               if (ad->hard_limit_sim_1 > 0) {
-                       _get_data_amount_str("Limit: ", ad->hard_limit_sim_1,
-                                                               buff, sizeof(buff));
-                       elm_layout_text_set(layout, "limit_txt", buff);
-                       _set_warning_limit_value(layout,
-                                       (float)ad->warn_limit_sim_1 / ad->hard_limit_sim_1, 1.0);
-                       _set_progress_value(layout,
-                                       (float)ad->total_data_sim_1 / ad->hard_limit_sim_1);
-               } else {
-                       elm_layout_text_set(layout, "limit_txt", "");
-                       _set_warning_limit_value(layout, 1.0, -1.0);
-                       if (ad->warn_limit_sim_1 > 0) {
-                               _set_progress_value(layout,
-                                               (float)ad->total_data_sim_1 / ad->warn_limit_sim_1);
-                       } else {
-                               _set_progress_value(layout, 0.0);
-                       }
-               }
-               if (ad->warn_limit_sim_1 > 0) {
-                       _get_data_amount_str("Warning: ", ad->warn_limit_sim_1,
-                                                                       buff, sizeof(buff));
-                       elm_layout_text_set(layout, "warning_txt", buff);
-               } else {
-                       elm_layout_text_set(layout, "warning_txt", "");
-               }
-       }
-
-       if (ad->sim_2_genlist == genlist) {
-               _get_data_amount_str("", ad->total_data_sim_2, buff, sizeof(buff));
-               elm_layout_text_set(layout, "quantity_txt", buff);
-               if (ad->hard_limit_sim_2 > 0) {
-                       _get_data_amount_str("Limit: ", ad->hard_limit_sim_2,
-                                                               buff, sizeof(buff));
-                       elm_layout_text_set(layout, "limit_txt", buff);
-                       _set_warning_limit_value(layout,
-                                       (float) ad->warn_limit_sim_2 / ad->hard_limit_sim_2, 1.0);
-                       _set_progress_value(layout,
-                                       (float)ad->total_data_sim_2 / ad->hard_limit_sim_2);
-               } else {
-                       elm_layout_text_set(layout, "limit_txt", "");
-                       _set_warning_limit_value(layout, 1.0, -1.0);
-                       if (ad->warn_limit_sim_2 > 0) {
-                               _set_progress_value(layout,
-                                                       (float)ad->total_data_sim_2 / ad->warn_limit_sim_2);
-                       } else {
-                               _set_progress_value(layout, 0.0);
-                       }
-               }
-               if (ad->warn_limit_sim_2 > 0) {
-                       _get_data_amount_str("Warning: ", ad->warn_limit_sim_2,
-                                                                       buff, sizeof(buff));
-                       elm_layout_text_set(layout, "warning_txt", buff);
-               } else {
-                       elm_layout_text_set(layout, "warning_txt", "");
-               }
-       }
+       if (ad->sim_1_genlist == genlist)
+               _graph_layout_fill(ad, layout,
+                                               ad->total_data_sim_1, ad->warn_limit_sim_1,
+                                               ad->hard_limit_sim_1, ad->interval_from_sim_1,
+                                               ad->interval_to_sim_1);
 
-       if (ad->wifi_genlist == genlist) {
-               _get_data_amount_str("", ad->total_data_wifi, buff, sizeof(buff));
-               elm_layout_text_set(layout, "quantity_txt", buff);
-               if (ad->hard_limit_wifi > 0) {
-                       _get_data_amount_str("Limit: ", ad->hard_limit_wifi,
-                                                               buff, sizeof(buff));
-                       elm_layout_text_set(layout, "limit_txt", buff);
-                       _set_warning_limit_value(layout,
-                                       (float)ad->warn_limit_wifi / ad->hard_limit_wifi, 1.0);
-                       _set_progress_value(layout,
-                                       (float)ad->total_data_wifi / ad->hard_limit_wifi);
-               } else {
-                       elm_layout_text_set(layout, "limit_txt", "");
-                       _set_warning_limit_value(layout, 1.0, -1.0);
-                       if (ad->warn_limit_wifi > 0) {
-                               _set_progress_value(layout,
-                                               (float)ad->total_data_wifi / ad->warn_limit_wifi);
-                       } else {
-                               _set_progress_value(layout, 0.0);
-                       }
-               }
-               if (ad->warn_limit_wifi > 0) {
-                       _get_data_amount_str("Warning: ", ad->warn_limit_wifi,
-                                                                       buff, sizeof(buff));
-                       elm_layout_text_set(layout, "warning_txt", buff);
-               } else {
-                       elm_layout_text_set(layout, "warning_txt", "");
-               }
-       }
+       if (ad->sim_2_genlist == genlist)
+               _graph_layout_fill(ad, layout,
+                                               ad->total_data_sim_2, ad->warn_limit_sim_2,
+                                               ad->hard_limit_sim_2, ad->interval_from_sim_2,
+                                               ad->interval_to_sim_2);
 
-       SETTING_TRACE_END;
+       if (ad->wifi_genlist == genlist)
+               _graph_layout_fill(ad, layout,
+                                               ad->total_data_wifi, ad->warn_limit_wifi,
+                                               ad->hard_limit_wifi, ad->interval_from_wifi,
+                                               ad->interval_to_wifi);
 
        return layout;
 }
@@ -352,7 +315,7 @@ static Evas_Object *_aplication_item_get(
        Evas_Object *icon = NULL;
        char buff[64] = {'\0',};
 
-       if (!data)
+       if (!app_item || !app_item->ad)
                return NULL;
 
        if (safeStrCmp(part, "elm.swallow.content"))
@@ -368,7 +331,19 @@ static Evas_Object *_aplication_item_get(
        progress_bar = elm_progressbar_add(layout);
        evas_object_size_hint_weight_set(progress_bar, EVAS_HINT_EXPAND, 0.0);
        evas_object_size_hint_align_set(progress_bar, EVAS_HINT_FILL, 0.5);
-       elm_progressbar_value_set(progress_bar, (app_item->percent / 100.0));
+       if (app_item->ad->sim_1_genlist == genlist)
+               elm_progressbar_value_set(progress_bar,
+                                                       ((double)app_item->data_usage_bytes /
+                                                       (double)app_item->ad->total_data_sim_1));
+       if (app_item->ad->sim_2_genlist == genlist)
+               elm_progressbar_value_set(progress_bar,
+                                                       ((double)app_item->data_usage_bytes /
+                                                       (double)app_item->ad->total_data_sim_2));
+       if (app_item->ad->wifi_genlist == genlist)
+               elm_progressbar_value_set(progress_bar,
+                                                       ((double)app_item->data_usage_bytes /
+                                                       (double)app_item->ad->total_data_wifi));
+
        evas_object_pass_events_set(progress_bar, EINA_TRUE);
        evas_object_propagate_events_set(progress_bar, EINA_FALSE);
        elm_object_part_content_set(layout, "elm.swallow.content", progress_bar);
@@ -534,10 +509,54 @@ static void _get_data_amount_str(const char *prefix, int num_bytes,
        }
 }
 
-static void _get_time_interval_str(const time_t *from, const time_t *to,
+static void _get_time_interval_str(const time_t from, const time_t to,
                                                                        char *txt_out, int len_max)
 {
+       i18n_udate date1 = 1000.0 * (i18n_udate)from;
+       i18n_udate date2 = 1000.0 * (i18n_udate)to;
+       i18n_uchar result1[128] = {0,};
+       i18n_uchar result2[128] = {0,};
+       char result1_str[128] = {'\0',};
+       char result2_str[128] = {'\0',};
+       int32_t buf_size_needed = 0;
+       i18n_udatepg_h pttrn_gen = NULL;
+       i18n_udate_format_h formatter = NULL;
+       i18n_uchar best_pattern[128] = {0,};
+       int32_t best_pattern_result_len = 0;
+       i18n_uchar format[128] = {0,};
+       char *country_iso = NULL;
+
+       if (0 == from || 0 == to) {
+               if (txt_out && len_max > 0)
+                       txt_out[0] = '\0';
+               return;
+       }
 
+       system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY,
+                                                                               &country_iso);
+
+       i18n_udatepg_create(country_iso, &pttrn_gen);
+       i18n_ustring_copy_ua_n(format, "dd MMM", strlen("dd MMM"));
+       i18n_udatepg_get_best_pattern(pttrn_gen, format,
+                                                       (sizeof(format) / sizeof(i18n_uchar)),
+                                                       best_pattern,
+                                                       (sizeof(best_pattern) / sizeof(i18n_uchar)),
+                                                       &best_pattern_result_len);
+
+       i18n_udatepg_destroy(pttrn_gen);
+       i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, country_iso,
+                                               NULL, -1, best_pattern, -1, &formatter);
+       i18n_udate_format_date(formatter, date1,
+                                                       result1, (sizeof(result1) / sizeof(i18n_uchar)),
+                                                       NULL, &buf_size_needed);
+       i18n_udate_format_date(formatter, date2,
+                                                       result2, (sizeof(result2) / sizeof(i18n_uchar)),
+                                                       NULL, &buf_size_needed);
+       i18n_udate_destroy(formatter);
+
+       i18n_ustring_copy_au(result1_str, result1);
+       i18n_ustring_copy_au(result2_str, result2);
+       snprintf(txt_out, len_max, "%s - %s", result1_str, result2_str);
 }
 
 static int _update(void *data)
@@ -551,6 +570,28 @@ static int _update(void *data)
        _redraw_toolbar_buttons(ad);
 
        switch (ad->main_view_update_type) {
+       case MV_UPDATE_SIM_STATE_CHANGED:
+               if (ad->num_sim_cards_available > 0) {
+                       elm_genlist_clear(ad->sim_1_genlist);
+                       ad->item_sim_1_data_amount = NULL;
+                       ad->item_sim_1_data_usage_set = NULL;
+                       _generate_list(ad, ad->sim_1_genlist,
+                                                       &ad->gl_data_usage_itc, &ad->gl_text_itc,
+                                                       &ad->item_sim_1_data_amount,
+                                                       &ad->item_sim_1_data_usage_set,
+                                                       "Set Data usage cycle, and Warning, Limit value");
+               }
+               if (ad->num_sim_cards_available > 1) {
+                       elm_genlist_clear(ad->sim_2_genlist);
+                       ad->item_sim_2_data_amount = NULL;
+                       ad->item_sim_2_data_usage_set = NULL;
+                       _generate_list(ad, ad->sim_2_genlist,
+                                                       &ad->gl_data_usage_itc, &ad->gl_text_itc,
+                                                       &ad->item_sim_2_data_amount,
+                                                       &ad->item_sim_2_data_usage_set,
+                                                       "Set Data usage cycle, and Warning, Limit value");
+               }
+               break;
        case MV_UPDATE_SIM_1_TOTAL_DATA_USAGE:
                elm_genlist_item_update(ad->item_sim_1_data_amount);
                break;
@@ -597,19 +638,23 @@ static int _update(void *data)
                break;
        case MV_UPDATE_APPEND_SIM_2_APP:
                _append_app(ad, &ad->item_sim_2_first_app_info,
-                                                                       ad->sim_2_apps, ad->sim_2_genlist,
-                                                                       &ad->gl_header_itc, &ad->gl_application_itc);
+                                                       ad->sim_2_apps, ad->sim_2_genlist,
+                                                       &ad->gl_header_itc, &ad->gl_application_itc);
                break;
        case MV_UPDATE_APPEND_WIFI_APP:
                _append_app(ad, &ad->item_wifi_first_app_info,
-                                                               ad->wifi_apps, ad->wifi_genlist,
-                                                               &ad->gl_header_itc, &ad->gl_application_itc);
+                                                       ad->wifi_apps, ad->wifi_genlist,
+                                                       &ad->gl_header_itc, &ad->gl_application_itc);
                break;
        default:
                break;
        }
 
-       _toolbar_item_click(ad, ad->toolbar, ad->toolbar_item_sim_1);
+       if (ad->num_sim_cards_available < 1)
+               _toolbar_item_click(ad, ad->toolbar, ad->toolbar_item_wifi);
+       if (ad->num_sim_cards_available >= 1)
+               _toolbar_item_click(ad, ad->toolbar, ad->toolbar_item_sim_1);
+
        ad->main_view_update_type = MV_UPDATE_APPEND_NONE;
 
        return 0;
index 4df1bbfa11dbe8916030d78237e80772e560f037..73d722aea0b3aeae41962ac5a73d2239bcc284d8 100644 (file)
@@ -250,7 +250,7 @@ static void _sim_state_change_cb(telephony_h handle, telephony_noti_e noti_id,
                return;
 
        _count_available_sim_cards(ad);
-
+       ad->main_view_update_type = MV_UPDATE_SIM_STATE_CHANGED;
        if (setting_view_node_get_cur_view() == ad->main_view) {
                SETTING_TRACE_DEBUG("_sim_state_change_cb: updating main view");
                setting_view_update(ad->main_view, ad);
@@ -332,6 +332,7 @@ static bool _append_stats_list_item(Eina_List **list, char *app_id, long long da
                return false;
        }
 
+       dua->ad = &ad;
        dua->appid = app_id;
        dua->data_usage_bytes = data_usage_bytes;