SETTING_TRACE_BEGIN;
Node_Info *info = data;
- info->size_idler = NULL;
- package_manager_get_package_size_info(info->id, node_get_size_cb, info);
+ info->size_timer = NULL;
+ package_manager_get_package_size_info(info->id, node_get_size_cb, info->ad);
return EINA_FALSE;
}
info->ad = ad;
storage_apps_get_node_info(handle, info);
+ info->size_timer = ecore_timer_add(2.0, __get_size_on_time, info);
/* Add to list */
ad->data_list = eina_list_append(ad->data_list, info);
void node_get_size_cb(const char *package_id, const package_size_info_h size_info,
void *data)
{
+ SETTING_TRACE_BEGIN;
retm_if(data == NULL, "data == NULL");
char desc[64] = { 0 };
- Node_Info *info = data;
+ Node_Info *info = NULL;
+ SettingStorage *ad = data;
+ Eina_List *cur = NULL;
long long size = 0;
- package_size_info_get_data_size(size_info, &size);
- info->total_size = (int)size;
-
- package_size_info_get_app_size(size_info, &size);
- info->total_size += (int)size;
- SETTING_TRACE(">>Size [%d]", info->total_size);
-
- size_to_str(info->total_size, desc, sizeof(desc));
- info->size_str = strdup(desc);
-
- free(info->data->sub_desc);
- info->data->sub_desc = strdup(info->size_str);
- elm_genlist_item_update(info->data->item);
+ /* This callback is asynchronous and can happen even after Apps
+ * view had been destroyed. Checking ad->data_list != NULL will
+ * help prevent a crash. */
+ EINA_LIST_FOREACH(ad->data_list, cur, info) {
+ if (info->id && !strcmp(package_id, info->id)) {
+ package_size_info_get_data_size(size_info, &size);
+ info->total_size = (int)size;
+
+ package_size_info_get_app_size(size_info, &size);
+ info->total_size += (int)size;
+ SETTING_TRACE(">>Size [%d]", info->total_size);
+
+ size_to_str(info->total_size, desc, sizeof(desc));
+ info->size_str = strdup(desc);
+
+ free(info->data->sub_desc);
+ info->data->sub_desc = strdup(info->size_str);
+ elm_genlist_item_update(info->data->item);
+ return;
+ }
+ }
}
char *appmgr_check_icon(const char *icon_path)
EINA_LIST_FOREACH(list, l, node)
{
+ if (node->size_timer)
+ ecore_timer_del(node->size_timer);
free(node->id);
free(node->size_str);
free(node->name);
static Eina_Bool _apps_view_pop_cb(void *data, Elm_Object_Item *it)
{
+ SETTING_TRACE_BEGIN;
SettingStorage *ad = data;
retv_if(data == NULL, EINA_FALSE);
return EINA_TRUE;
}
-#if 0
-static bool storage_misces_media_item_cb(media_info_h media, void *data)
-{
- Node_Info *node = NULL;
- SettingStorage *ad = data;
- char *file_path = NULL;
-
- retv_if((!media || !data), true);
-
- media_info_get_file_path(media, &file_path);
- if (!ecore_file_exists(file_path)) {
- free(file_path);
- return true;
- }
-
- node = calloc(1, sizeof(Node_Info));
- if (node) {
- media_info_get_media_id(media, &node->id);
- node->size_str = strdup(file_path);
- media_info_get_display_name(media, &node->name);
- media_info_get_size(media, &node->size);
- media_info_get_added_time(media, &node->added_time);
- ad->data_list = eina_list_append(ad->data_list, node);
- }
-
- free(file_path);
-
- return true;
-}
-#endif
-
static void storage_misces_handle_selecting(SettingStorage *ad)
{
Evas_Object *gl = NULL;
node->data = item_data;
node->ad = ad;
item_data->isItemHideFlag = TRUE;
- if (node->size_idler)
- ecore_timer_del(node->size_idler);
- node->size_idler = ecore_timer_add(2.0, __get_size_on_time, node);
} else {
SETTING_TRACE_ERROR("item_data is NULL");
}
storage_misces_handle_selecting(ad);
}
-#if 0
-static void _clear_model_and_ui_lists(SettingStorage *ad)
-{
- SETTING_TRACE("Entering _clear_model_and_ui_lists");
- Elm_Object_Item *it = NULL;
- Node_Info *node = NULL;
- Setting_GenGroupItem_Data *item_data = NULL;
- ret_if(NULL == ad);
-
- ad->misces_checked = 0;
- ad->count_sz_all = 0;
-
- /* Get second, because first is 'Check all' */
- it = elm_genlist_nth_item_get(ad->misces_genlist, 1);
-
- while (it) {
- item_data = elm_object_item_data_get(it);
- if (!item_data)
- continue;
- node = item_data->userdata;
- if (!node)
- continue;
- /* delete data form model: */
- ad->data_list = eina_list_remove(
- ad->data_list, node);
- free(node->id);
- free(node->size_str);
- free(node->name);
- free(node);
- it = elm_genlist_item_next_get(it);
- }
- ad->data_list = eina_list_free(ad->data_list);
-
- /* delete UI elements: */
- elm_genlist_clear(ad->misces_genlist);
-}
-#endif
-
static void _update_ui_list(SettingStorage *ad)
{
Evas_Object *toolbar = NULL;
ad->misces_checked = 0;
ad->misces_is_select_all = EINA_FALSE;
- if (ad->misces_genlist) {
- elm_genlist_clear(ad->misces_genlist);
- } else {
- ad->misces_genlist = elm_genlist_add(ad->md.naviframe);
- if (!ad->misces_genlist)
- SETTING_TRACE_ERROR("elm_genlist_add() Fail");
-
- elm_genlist_mode_set(ad->misces_genlist, ELM_LIST_COMPRESS);
- elm_genlist_homogeneous_set(ad->misces_genlist, EINA_TRUE);
- elm_genlist_block_count_set(ad->misces_genlist, 2);
- }
+ elm_genlist_clear(ad->misces_genlist);
/* Add items to genlist */
storage_apps_gl_append_items(ad);
SettingStorage *ad = data;
retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
- /* This will create UI list: */
- _update_ui_list(ad);
+ ad->misces_genlist = elm_genlist_add(ad->md.naviframe);
+ elm_genlist_mode_set(ad->misces_genlist, ELM_LIST_COMPRESS);
+ elm_genlist_homogeneous_set(ad->misces_genlist, EINA_TRUE);
ad->no_content_layout = setting_add_empty_page(ad->md.naviframe,
"No apps", NULL);
evas_object_del(ad->popup);
ad->popup = NULL;
- if (ad->del_worker) {
- storage_stop_async_worker(ad->del_worker);
- ad->del_worker = NULL;
- }
+ storage_stop_async_worker(ad->del_worker);
+ ad->del_worker = NULL;
storage_apps_clear_list(ad->data_list);
ad->data_list = NULL;
-
ad->misces_navi_it = NULL;
ad->misces_genlist = NULL;
ad->misces_checked = 0;
setting_view_storage_apps.is_create = 0;
- elm_naviframe_item_pop(ad->md.naviframe);
return SETTING_RETURN_SUCCESS;
}