4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include <privilege_info.h>
22 #include "setting-appmgr-utils.h"
23 #include "setting-appmgr-pkginfo-utils.h"
24 #include "setting-appmgr-pkginfo.h"
26 #define APPMGRUG_PROGRESSBAR_TIMEOUT 10
28 setting_view setting_view_appmgr_pkginfo;
30 static Eina_Bool appmgrUg_pkg_back_cb(void *data, Elm_Object_Item *it)
33 SettingAppMgrUG *ad = data;
35 retv_if(data == NULL, EINA_FALSE);
37 if(ad->support_taskmanager) {
38 ug_destroy_me(ad->ug);
42 setting_view_destroy(ad->pkginfo_view, ad);
47 static inline void appmgrUg_pkg_append_storage(SettingAppMgrUG *ad)
51 char desc[APPMGRUG_MAX_STR_LEN] = {0};
57 appmgrUg_append_separator(ad->gl_pkg, ad);
59 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
60 MGRAPP_STR_STORAGE, NULL);
63 if (0 <= ad->sel_total)
64 appmgrUg_size_to_str(ad->sel_total, desc, sizeof(desc));
66 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
67 info->total_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
68 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, _(MGRAPP_STR_TOTAL), desc,
73 info->total_size->group_style = SETTING_GROUP_STYLE_TOP;
74 elm_genlist_item_select_mode_set(info->total_size->item,
75 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
79 if (0 <= info->sz_total && 0 <= info->sz_data)
80 appmgrUg_size_to_str(info->sz_total - info->sz_data, desc, sizeof(desc));
82 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
83 info->app_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
84 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_APPLICATION,
88 info->app_size->group_style = SETTING_GROUP_STYLE_CENTER;
89 elm_genlist_item_select_mode_set(info->app_size->item,
90 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
94 if (0 <= info->sz_data)
95 appmgrUg_size_to_str(info->sz_data, desc, sizeof(desc));
97 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
98 info->data_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
99 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_DATA,
103 info->data_size->group_style = SETTING_GROUP_STYLE_BOTTOM;
104 elm_genlist_item_select_mode_set(info->data_size->item,
105 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
110 static inline void appmgrUg_pkg_append_cache(SettingAppMgrUG *ad)
114 appmgr_pkginfo *info;
115 Setting_GenGroupItem_Data *item_data = NULL;
116 char desc[APPMGRUG_MAX_STR_LEN] = {0};
119 ret_if(NULL == ad->pkginfo);
123 appmgrUg_append_separator(ad->gl_pkg, ad);
126 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
127 MGRAPP_STR_CACHE, NULL);
130 if (0 <= info->sz_cache)
131 appmgrUg_size_to_str(info->sz_cache, desc, sizeof(desc));
133 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
134 ad->cache_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
135 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_CACHE,
139 __BACK_POINTER_SET(ad->cache_size);
140 ad->cache_size->group_style = SETTING_GROUP_STYLE_NONE;
141 elm_genlist_item_select_mode_set(ad->cache_size->item,
142 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
146 item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
148 ad->clear_cache = item_data;
149 __BACK_POINTER_SET(ad->clear_cache);
150 item_data->userdata = ad;
151 item_data->item = elm_genlist_item_append(ad->gl_pkg, &(ad->itc_1button), item_data, NULL,
152 ELM_GENLIST_ITEM_NONE, NULL, NULL);
153 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
155 SETTING_TRACE_ERROR("item_data is NULL");
159 static inline void appmgrUg_pkg_append_default(SettingAppMgrUG *ad)
163 appmgr_pkginfo *info;
166 ret_if(NULL == ad->pkginfo);
173 char *appid = cur->data;
175 if (appid && 1 == appsvc_is_defapp(appid))
183 SETTING_TRACE_ERROR("No defualt Application");
187 info->def_sep = appmgrUg_append_separator(ad->gl_pkg, ad);
189 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
190 MGRAPP_STR_LAUNCH_BY_DEFAULT, NULL);
192 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
193 appmgrUg_pkg_clear_default, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
194 MGRAPP_STR_CLEAR_DEFAULTS, NULL, NULL);
196 setting_create_Gendial_field_titleItem(ad->gl_pkg, &ad->itc_multiline,
197 MGRAPP_STR_DEFAULT_DESC, NULL);
200 static inline void appmgrUg_pkg_append_website(SettingAppMgrUG *ad)
203 appmgr_pkginfo *info;
206 ret_if(NULL == ad->pkginfo);
210 if (safeStrCmp(info->pkg_type, "wgt"))
212 SETTING_TRACE_ERROR("No Web Application");
216 appmgrUg_append_separator(ad->gl_pkg, ad);
218 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
219 appmgrUg_pkg_webapp_ug, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
220 MAGAPP_STR_WEB_SETTING, NULL, NULL);
223 static inline void appmgrUg_pkg_append_privilege(SettingAppMgrUG *ad)
227 appmgr_pkginfo *info;
228 Elm_Object_Item *sep_it;
229 Setting_GenGroupItem_Data *title_itdata;
232 ret_if(NULL == ad->pkginfo);
236 sep_it = appmgrUg_append_separator(ad->gl_pkg, ad);
238 title_itdata = setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
239 MGRAPP_STR_PRIVILEGE, NULL);
241 info->first_prv = NULL;
242 ret = privilege_info_foreach_privilege_group_list_by_pkgid(info->pkgid,
243 appmgrUg_pkg_get_privileges_grp_iter, ad);
244 warn_if(PRVMGR_ERR_NONE != ret,
245 "privilege_info_foreach_privilege_group_list_by_pkgid() Fail(%d)", ret);
247 if (NULL == info->first_prv)
249 SETTING_TRACE_ERROR("No privilege");
250 elm_object_item_del(sep_it);
251 elm_object_item_del(title_itdata->item);
255 if (info->first_prv == info->last_prv)
256 info->first_prv->group_style = SETTING_GROUP_STYLE_NONE;
258 info->last_prv->group_style = SETTING_GROUP_STYLE_BOTTOM;
261 static void appmgrUg_pkg_uninstall(void *data, Evas_Object *obj, void *event_info)
266 appmgr_pkginfo *info;
267 SettingAppMgrUG *ad = data;
269 ret_if(NULL == data);
270 ret_if(NULL == ad->pkginfo);
274 btn_str = elm_entry_markup_to_utf8(elm_object_text_get(obj));
275 ret = safeStrCmp(btn_str, _(MGRAPP_STR_UNINSTALL));
280 evas_object_del(ad->popup);
287 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE, NULL,
288 MGRAPP_STR_UNINSTALLING, appmgrUg_popup_del, 0, TRUE, TRUE);
290 if (info->pc_request)
291 pkgmgr_client_free(info->pc_request);
292 info->pc_request = pkgmgr_client_new(PC_REQUEST);
293 if (NULL == info->pc_request)
295 SETTING_TRACE_ERROR("pkgmgr_client_new() Fail");
299 ad->pkg_request = APPMGRUG_PKG_REQUEST_UNINSTALL;
300 ret = pkgmgr_client_uninstall(info->pc_request, info->pkg_type, info->pkgid, PM_QUIET,
302 if (ret < PKGMGR_R_OK)
304 SETTING_TRACE_ERROR("pkgmgr_client_uninstall() Fail(%d)", ret);
305 ad->pkg_request = APPMGRUG_PKG_REQUEST_NONE;
306 appmgrUg_fail_popup(MGRAPP_STR_UNINSTALL_FAILED, ad);
310 void appmgrUg_pkg_uninstall_click(void *data, Evas_Object *obj,
314 SettingAppMgrUG *ad = data;
316 ret_if(NULL == data);
319 evas_object_del(ad->popup);
320 ad->popup = setting_create_popup_with_btn(ad, ad->win, MGRAPP_STR_UNINSTALL, MGRAPP_STR_UNINSTALL_MSG,
321 appmgrUg_pkg_uninstall, 0, 2, MGRAPP_STR_UNINSTALL, MGRAPP_STR_CANCEL);
324 void appmgrUg_pkg_clear_cache_click(void *data, Evas_Object *obj,
328 setting_retm_if(data == NULL, "Data parameter is NULL");
329 SettingAppMgrUG *ad = data;
330 ret_if(NULL == ad->pkginfo);
332 appmgr_pkginfo *info = ad->pkginfo;
333 int ret = package_manager_clear_cache_dir(info->pkgid);
335 SETTING_TRACE_ERROR("failed to invoke, ret = %d", ret);
338 appmgrUg_pkg_update_cache_size(ad);
342 void appmgrUg_pkg_moveto_cb(void *data, Evas_Object *obj,
347 appmgr_pkginfo *info;
348 SettingAppMgrUG *ad = data;
350 ret_if(NULL == data);
351 ret_if(NULL == ad->pkginfo);
355 evas_object_del(ad->popup);
357 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
358 NULL, MGRAPP_STR_MOVEING, appmgrUg_popup_del, 0, TRUE, TRUE);
360 ad->pkg_request = APPMGRUG_PKG_REQUEST_MOVE;
362 ret = pthread_create(&info->tid, NULL, appmgrUg_pkg_moveto_worker, ad);
365 SETTING_TRACE_ERROR("phread_create() Fail(%d)", ret);
366 appmgrUg_fail_popup(MGRAPP_STR_MOVE_FAIL, ad);
370 static void appmgrUg_pkg_append_toolbar(Evas_Object *toolbar,
376 appmgr_pkginfo *info;
377 Elm_Object_Item *tool_it;
378 const char *mmc_key = VCONFKEY_SYSMAN_MMC_STATUS;
380 ret_if(NULL == ad->pkginfo);
386 elm_object_item_del(elm_toolbar_first_item_get(ad->pkg_toolbar));
387 elm_object_item_del(elm_toolbar_last_item_get(ad->pkg_toolbar));
388 toolbar = ad->pkg_toolbar;
392 mmc = VCONFKEY_SYSMAN_MMC_REMOVED;
393 ret = vconf_get_int(mmc_key, &mmc);
394 warn_if(ret, "vconf_get_int(%s) Fail", mmc_key);
396 if (PMINFO_INTERNAL_STORAGE == info->storage)
397 btn_str = MGRAPP_STR_MOVE_TO_SD;
399 btn_str = MGRAPP_STR_MOVE_TO_PHONE;
400 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str, appmgrUg_pkg_moveto_cb, ad);
401 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
402 if(VCONFKEY_SYSMAN_MMC_MOUNTED != mmc || !info->is_movable || info->is_preload)
403 elm_object_item_disabled_set(tool_it, EINA_TRUE);
406 if (info->is_preload && info->is_updated)
407 btn_str = MGRAPP_STR_UNINSTALL_UPDATES;
409 btn_str = MGRAPP_STR_UNINSTALL;
410 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str,
411 appmgrUg_pkg_uninstall_click, ad);
412 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
414 if (!info->removable)
415 elm_object_item_disabled_set(tool_it, EINA_TRUE);
418 static inline Evas_Object* appmgrUg_pkg_create_toolbar(Evas_Object *parent,
422 Evas_Object *toolbar;
424 retv_if(NULL == ad, NULL);
426 toolbar = elm_toolbar_add(parent);
428 elm_object_style_set(toolbar, "default");
429 elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
430 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
431 elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
433 appmgrUg_pkg_append_toolbar(toolbar, ad);
435 evas_object_show(toolbar);
440 static void appmgrUg_pkg_append_genlist(SettingAppMgrUG *ad)
443 Elm_Object_Item *item;
445 appmgrUg_append_separator(ad->gl_pkg, ad);
447 /* Title (pkg name, version S) */
448 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_info_title, ad, NULL,
449 ELM_GENLIST_ITEM_NONE, NULL, NULL);
450 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
452 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button1, ad, NULL,
453 ELM_GENLIST_ITEM_NONE, NULL, NULL);
454 //elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
456 appmgrUg_pkg_append_storage(ad);
458 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button2, ad, NULL,
459 ELM_GENLIST_ITEM_NONE, NULL, NULL);
460 //elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
462 appmgrUg_pkg_append_cache(ad);
464 appmgrUg_pkg_append_default(ad);
466 appmgrUg_pkg_append_website(ad);
469 appmgrUg_pkg_append_privilege(ad);
471 appmgrUg_append_separator(ad->gl_pkg, ad);
474 static int appmgrUg_pkg_create(void *data)
478 Elm_Object_Item *navi_it;
479 SettingAppMgrUG *ad = data;
481 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
483 ret = appmgrUg_pkg_get_info(ad);
485 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
486 appmgrUg_fail_popup(MGRAPP_STR_ERROR, ad);
490 navi_it = setting_push_layout_navi_bar_genlist(ad->lo_parent, ad->win,
491 MGRAPP_STR_APPLICATION_INFO, NULL, NULL,
492 NULL, NULL, ad, &ad->gl_pkg, ad->navi);
493 elm_genlist_mode_set(ad->gl_pkg, ELM_LIST_COMPRESS);
494 elm_genlist_realization_mode_set(ad->gl_pkg, EINA_TRUE);
495 elm_naviframe_item_pop_cb_set(navi_it, appmgrUg_pkg_back_cb, ad);
497 appmgrUg_pkg_append_genlist(ad);
499 if (ad->support_taskmanager && ad->pc_main == NULL) {
501 SETTING_TRACE("Load pkginfo view");
502 appmgrUg_pkgmgr_subscribe(ad);
505 setting_view_appmgr_pkginfo.is_create = 1;
507 return SETTING_RETURN_SUCCESS;
510 static int appmgrUg_pkg_destroy(void *data)
513 SettingAppMgrUG *ad = data;
515 retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
519 evas_object_del(ad->popup);
522 if (ad->pkginfo_getsize_timer) {
523 ecore_timer_del(ad->pkginfo_getsize_timer);
524 ad->pkginfo_getsize_timer = NULL;
527 if (ad->support_taskmanager && ad->pc_main != NULL) {
529 SETTING_TRACE("Load pkginfo view");
530 pkgmgr_client_free(ad->pc_main);
534 appmgrUg_pkg_free_pkginfo(ad->pkginfo);
543 setting_view_appmgr_pkginfo.is_create = 0;
545 return SETTING_RETURN_SUCCESS;
548 static int appmgrUg_pkg_update(void *data)
552 SettingAppMgrUG *ad = data;
554 retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
556 //record old size info, need not re-get size info when update
558 if (ad->pkginfo->sz_total >= 0)
559 ad->sel_total = ad->pkginfo->sz_total;
560 if (ad->pkginfo->sz_data>= 0)
561 ad->sel_data_size = ad->pkginfo->sz_data;
564 elm_genlist_clear(ad->gl_pkg);
566 appmgr_pkginfo *old_pkginfo = ad->pkginfo;
569 ret = appmgrUg_pkg_get_info(ad);
572 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
573 elm_naviframe_item_pop(ad->navi);
577 //appmgrUg_pkg_append_toolbar(NULL, ad);
578 appmgrUg_pkg_append_genlist(ad);
580 appmgrUg_pkg_free_pkginfo(old_pkginfo);
582 return SETTING_RETURN_SUCCESS;
585 static int appmgrUg_pkg_cleanup(void *data)
587 return appmgrUg_pkg_destroy(data);
590 void appmgrUg_pkginfo_init(SettingAppMgrUG *ad)
593 ret_if(ad->pkginfo_view);
595 setting_view_appmgr_pkginfo.create = appmgrUg_pkg_create;
596 setting_view_appmgr_pkginfo.destroy = appmgrUg_pkg_destroy;
597 setting_view_appmgr_pkginfo.update = appmgrUg_pkg_update;
598 setting_view_appmgr_pkginfo.cleanup = appmgrUg_pkg_cleanup;
600 ad->pkginfo_view = &setting_view_appmgr_pkginfo;