From: Michal Skorupinski Date: Fri, 10 Aug 2018 18:15:55 +0000 (+0200) Subject: Fix in the application size calculation X-Git-Tag: submit/tizen/20190409.085310~1^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c876bc69c7f24ab0805adfc9afb18c96287ba4fc;p=profile%2Fmobile%2Fapps%2Fnative%2Fsettings.git Fix in the application size calculation Change-Id: Icc04c2e7a5a1ed081bbdfc625ffa517df22172ae Signed-off-by: Michal Skorupinski Signed-off-by: Kiseok Chang --- diff --git a/setting-appmgr/inc/setting-appmgr.h b/setting-appmgr/inc/setting-appmgr.h index deb774e2..7d46f652 100644 --- a/setting-appmgr/inc/setting-appmgr.h +++ b/setting-appmgr/inc/setting-appmgr.h @@ -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; diff --git a/setting-appmgr/src/setting-appmgr-main.c b/setting-appmgr/src/setting-appmgr-main.c index 12aa221b..7b868f1e 100644 --- a/setting-appmgr/src/setting-appmgr-main.c +++ b/setting-appmgr/src/setting-appmgr-main.c @@ -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) diff --git a/setting-appmgr/src/setting-appmgr-utils.c b/setting-appmgr/src/setting-appmgr-utils.c index dbc97029..55c015c3 100644 --- a/setting-appmgr/src/setting-appmgr-utils.c +++ b/setting-appmgr/src/setting-appmgr-utils.c @@ -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; } diff --git a/setting-appmgr/src/setting-appmgr.c b/setting-appmgr/src/setting-appmgr.c index 3ce97bb9..b5f617e5 100644 --- a/setting-appmgr/src/setting-appmgr.c +++ b/setting-appmgr/src/setting-appmgr.c @@ -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");