Fix in the application size calculation 05/198005/1
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Fri, 10 Aug 2018 18:15:55 +0000 (20:15 +0200)
committerLukasz Stanislawski <l.stanislaws@samsung.com>
Thu, 17 Jan 2019 11:56:40 +0000 (12:56 +0100)
Change-Id: Icc04c2e7a5a1ed081bbdfc625ffa517df22172ae
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
Signed-off-by: Kiseok Chang <kiso.chang@samsung.com>
setting-appmgr/inc/setting-appmgr.h
setting-appmgr/src/setting-appmgr-main.c
setting-appmgr/src/setting-appmgr-utils.c
setting-appmgr/src/setting-appmgr.c

index deb774e29214b353c0620cc0ac11f9ca7d9cc2f5..7d46f65234c97896526c6709548b97b3a6b35b4a 100644 (file)
@@ -202,6 +202,10 @@ typedef struct {
        Elm_Genlist_Item_Class itc_runinfo_title;
        Elm_Genlist_Item_Class itc_runinfo_apps;
 
+       bool size_update_needed;
+       bool is_size_set;
+       bool is_invoked_by_timer;
+
 } SettingAppMgr;
 
 extern setting_view setting_view_appmgr_pkginfo;
index 12aa221bfc56d2880285c5391075a584d373bb16..7b868f1e6449bd630fcff152c6fe114e9630ff13 100644 (file)
@@ -379,6 +379,10 @@ char *main_genlist_item_text_get(void *data, Evas_Object *obj,
                label = SAFE_STRDUP(node->label);
        else if (!strcmp(part, "elm.text.sub") && node->size >= 0) {
                appmgr_size_to_str(node->size, desc, sizeof(desc));
+               if(strncmp(desc, "0.00KB", 6) == 0){
+                       snprintf(desc, sizeof(desc), "Loading...");
+               }
+
                label = strdup(desc);
        }
 
@@ -533,8 +537,15 @@ static int _get_visible_genlist_item_ix(Evas_Object *genlist)
        return elm_genlist_item_index_get(tmp_item);
 }
 
+
+
 static void _update_ui(SettingAppMgr *ad)
 {
+       // Case to prevent second update of package size
+       if(!ad->is_invoked_by_timer && ad->is_size_set) {
+               return;
+       }
+
        Eina_List *cursor = NULL;
        package_node *package_node_info = NULL;
        app_node *app_node_info = NULL;
@@ -546,6 +557,9 @@ static void _update_ui(SettingAppMgr *ad)
        int disabled_item_ix = 0;
        ui_node *tmp = NULL;
 
+       bool is_zero_occure = false;
+       bool did_loop_iterate = false;
+
        Evas_Object *gls[] = {
                                ad->downloads_gl, ad->running_gl,
                                ad->all_gl, ad->disabled_gl
@@ -600,7 +614,7 @@ static void _update_ui(SettingAppMgr *ad)
        }
 
        EINA_LIST_FOREACH(ad->packages, cursor, package_node_info) {
-
+               did_loop_iterate = true;
                if (!package_node_info)
                        continue;
 
@@ -617,6 +631,9 @@ static void _update_ui(SettingAppMgr *ad)
                }
                tmp = NULL;
                _package_node_2_ui_node_adapter(package_node_info, &tmp);
+               if(tmp->size == 0) {
+                       is_zero_occure = true;
+               }
                elm_genlist_item_append(
                                        ad->all_gl,
                                        &ad->itc_package_nodes_list,
@@ -649,6 +666,11 @@ static void _update_ui(SettingAppMgr *ad)
                }
        }
        elm_scroller_page_show(ad->scroller, ad->tabtype, 0);
+
+       //When 0 size did not appear and ensure that loop at least once went through
+       if(!is_zero_occure && did_loop_iterate) {
+               ad->is_size_set = true;
+       }
 }
 
 static int appmgr_main_create(void *data)
@@ -833,6 +855,8 @@ static Eina_Bool _update_timer_cb(void *data)
        package_node *package_node_info = NULL;
        static unsigned int update_cycle = 0;
        SettingAppMgr *ad = data;
+       int size_update_count = 0;
+
 
        retv_if(!ad, EINA_FALSE);
        update_cycle++;
@@ -848,6 +872,33 @@ static Eina_Bool _update_timer_cb(void *data)
                return EINA_TRUE;
        }
 
+       if (ad->size_update_needed) {
+               EINA_LIST_FOREACH(ad->packages, cursor, package_node_info) {
+                       if (!package_node_info)
+                               continue;
+
+                       if (!package_node_info->size_update_in_progress) {
+                               size_update_count++;
+                       }
+               }
+
+               SETTING_TRACE("ad->size_update_needed == %d; size_update_count = %d; eina_list_count(ad->packages) == %d",
+                                ad->size_update_needed, size_update_count, eina_list_count(ad->packages));
+
+               if (eina_list_count(ad->packages) == size_update_count && ad->size_update_needed && size_update_count != 0)  {
+                       ad->size_update_needed = false;
+                       size_update_count = 0;
+
+                       SETTING_TRACE("[MS] _update_ui size_update_needed");
+                       //Invoke update only once, to get right size
+                       if(!ad->is_size_set) {
+                               ad->is_invoked_by_timer = true;
+                               _update_ui(ad);
+                               ad->is_invoked_by_timer = false;
+                       }
+               }
+       }
+
        if (ad->needs_to_update_on_lists_contents) {
                EINA_LIST_FOREACH(ad->packages, cursor, package_node_info) {
                        if (!package_node_info)
index dbc970296a33fcada15849adf7f4bea5efa9af00..55c015c3cc60baab39ec5bf3dab7d09c2ec2ebbf 100644 (file)
@@ -375,6 +375,8 @@ int appmgr_utils_init_apps_and_pkgs_lists(SettingAppMgr *ad)
        appmgr_utils_init_apps_list(ad);
        appmgr_utils_init_pkgs_list(ad);
 
+       ad->size_update_needed = true;
+
        return SETTING_RETURN_SUCCESS;
 }
 
index 3ce97bb9455a80e818119f50b90366192dd4d821..b5f617e56f813e8e3148f6701c518b3f2505bf6a 100644 (file)
@@ -218,6 +218,10 @@ static bool _setting_appmgr_app_create(void *data)
 
        SettingAppMgr *appmgr_ad = (SettingAppMgr *)data;
 
+       appmgr_ad->size_update_needed = true;
+       appmgr_ad->is_size_set = false;
+       appmgr_ad->is_invoked_by_timer = false;
+
        if (app_init(&appmgr_ad->md, SETTING_APPMGR_PACKAGE_NAME)
                                != SETTING_RETURN_SUCCESS) {
                SETTING_TRACE_ERROR("Cannot initialize application");