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>
23 #include <package_manager.h>
25 #include "setting-appmgr-utils.h"
26 #include "setting-appmgr-pkginfo-utils.h"
27 #include "setting-appmgr-pkginfo.h"
29 #define APPMGRUG_PROGRESSBAR_TIMEOUT 10
31 setting_view setting_view_appmgr_pkginfo;
33 static Eina_Bool appmgrUg_pkg_back_cb(void *data, Elm_Object_Item *it)
36 SettingAppMgrUG *ad = data;
38 retv_if(data == NULL, EINA_FALSE);
40 if (ad->support_taskmanager) {
41 ug_destroy_me(ad->ug);
44 setting_view_destroy(ad->pkginfo_view, ad);
49 static inline void appmgrUg_pkg_append_storage(SettingAppMgrUG *ad)
53 char desc[APPMGRUG_MAX_STR_LEN] = {0};
59 appmgrUg_append_separator(ad->gl_pkg, ad);
61 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
62 MGRAPP_STR_STORAGE, NULL);
65 if (0 <= ad->sel_total)
66 appmgrUg_size_to_str(ad->sel_total, desc, sizeof(desc));
68 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
69 info->total_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
70 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, _(MGRAPP_STR_TOTAL), desc,
73 if (info->total_size) {
74 info->total_size->group_style = SETTING_GROUP_STYLE_TOP;
75 elm_genlist_item_select_mode_set(info->total_size->item,
76 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
80 if (0 <= info->sz_total && 0 <= info->sz_data)
81 appmgrUg_size_to_str(info->sz_total - info->sz_data, desc, sizeof(desc));
83 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
84 info->app_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
85 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,
101 if (info->data_size) {
102 info->data_size->group_style = SETTING_GROUP_STYLE_BOTTOM;
103 elm_genlist_item_select_mode_set(info->data_size->item,
104 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
109 static inline void appmgrUg_pkg_append_cache(SettingAppMgrUG *ad)
113 appmgr_pkginfo *info;
114 Setting_GenGroupItem_Data *item_data = NULL;
115 char desc[APPMGRUG_MAX_STR_LEN] = {0};
118 ret_if(NULL == ad->pkginfo);
122 appmgrUg_append_separator(ad->gl_pkg, ad);
125 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
126 MGRAPP_STR_CACHE, NULL);
129 if (0 <= info->sz_cache)
130 appmgrUg_size_to_str(info->sz_cache, desc, sizeof(desc));
132 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
133 ad->cache_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
134 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_CACHE,
136 if (ad->cache_size) {
137 __BACK_POINTER_SET(ad->cache_size);
138 ad->cache_size->group_style = SETTING_GROUP_STYLE_NONE;
139 elm_genlist_item_select_mode_set(ad->cache_size->item,
140 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
144 item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
146 ad->clear_cache = item_data;
147 __BACK_POINTER_SET(ad->clear_cache);
148 item_data->userdata = ad;
149 item_data->item = elm_genlist_item_append(ad->gl_pkg, &(ad->itc_1button), item_data, NULL,
150 ELM_GENLIST_ITEM_NONE, NULL, NULL);
151 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
153 SETTING_TRACE_ERROR("item_data is NULL");
157 static inline void appmgrUg_pkg_append_default(SettingAppMgrUG *ad)
161 appmgr_pkginfo *info;
164 ret_if(NULL == ad->pkginfo);
170 char *appid = cur->data;
172 if (appid && 1 == appsvc_is_defapp(appid))
179 SETTING_TRACE_ERROR("No defualt Application");
183 info->def_sep = appmgrUg_append_separator(ad->gl_pkg, ad);
185 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
186 MGRAPP_STR_LAUNCH_BY_DEFAULT, NULL);
188 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
189 appmgrUg_pkg_clear_default, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
190 MGRAPP_STR_CLEAR_DEFAULTS, NULL, NULL);
192 setting_create_Gendial_field_titleItem(ad->gl_pkg, &ad->itc_multiline,
193 MGRAPP_STR_DEFAULT_DESC, NULL);
196 static inline void appmgrUg_pkg_append_website(SettingAppMgrUG *ad)
199 appmgr_pkginfo *info;
202 ret_if(NULL == ad->pkginfo);
206 if (safeStrCmp(info->pkg_type, "wgt")) {
207 SETTING_TRACE_ERROR("No Web Application");
211 appmgrUg_append_separator(ad->gl_pkg, ad);
213 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
214 appmgrUg_pkg_webapp_ug, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
215 MAGAPP_STR_WEB_SETTING, NULL, NULL);
218 static inline void appmgrUg_pkg_append_privilege(SettingAppMgrUG *ad)
222 appmgr_pkginfo *info;
223 Elm_Object_Item *sep_it;
224 Setting_GenGroupItem_Data *title_itdata;
227 ret_if(NULL == ad->pkginfo);
231 sep_it = appmgrUg_append_separator(ad->gl_pkg, ad);
233 title_itdata = setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
234 MGRAPP_STR_PRIVILEGE, NULL);
236 info->first_prv = NULL;
237 ret = privilege_info_foreach_privilege_group_list_by_pkgid(info->pkgid,
238 appmgrUg_pkg_get_privileges_grp_iter, ad);
239 warn_if(PRVMGR_ERR_NONE != ret,
240 "privilege_info_foreach_privilege_group_list_by_pkgid() Fail(%d)", ret);
242 if (NULL == info->first_prv) {
243 SETTING_TRACE_ERROR("No privilege");
244 elm_object_item_del(sep_it);
246 elm_object_item_del(title_itdata->item);
250 if (info->first_prv == info->last_prv)
251 info->first_prv->group_style = SETTING_GROUP_STYLE_NONE;
253 info->last_prv->group_style = SETTING_GROUP_STYLE_BOTTOM;
256 static void appmgrUg_pkg_uninstall(void *data, Evas_Object *obj, void *event_info)
261 appmgr_pkginfo *info;
262 SettingAppMgrUG *ad = data;
264 ret_if(NULL == data);
265 ret_if(NULL == ad->pkginfo);
269 btn_str = elm_entry_markup_to_utf8(elm_object_text_get(obj));
270 ret = safeStrCmp(btn_str, _(MGRAPP_STR_UNINSTALL));
274 evas_object_del(ad->popup);
281 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE, NULL,
282 MGRAPP_STR_UNINSTALLING, appmgrUg_popup_del, 0, TRUE, TRUE);
284 if (info->pc_request)
285 pkgmgr_client_free(info->pc_request);
286 info->pc_request = pkgmgr_client_new(PC_REQUEST);
287 if (NULL == info->pc_request) {
288 SETTING_TRACE_ERROR("pkgmgr_client_new() Fail");
292 ad->pkg_request = APPMGRUG_PKG_REQUEST_UNINSTALL;
293 ret = pkgmgr_client_uninstall(info->pc_request, info->pkg_type, info->pkgid, PM_QUIET,
295 if (ret < PKGMGR_R_OK) {
296 SETTING_TRACE_ERROR("pkgmgr_client_uninstall() Fail(%d)", ret);
297 ad->pkg_request = APPMGRUG_PKG_REQUEST_NONE;
298 appmgrUg_fail_popup(MGRAPP_STR_UNINSTALL_FAILED, ad);
302 void appmgrUg_pkg_uninstall_click(void *data, Evas_Object *obj,
306 SettingAppMgrUG *ad = data;
308 ret_if(NULL == data);
311 evas_object_del(ad->popup);
312 ad->popup = setting_create_popup_with_btn(ad, ad->win, MGRAPP_STR_UNINSTALL, MGRAPP_STR_UNINSTALL_MSG,
313 appmgrUg_pkg_uninstall, 0, 2, MGRAPP_STR_UNINSTALL, MGRAPP_STR_CANCEL);
316 void appmgrUg_pkg_clear_cache_click(void *data, Evas_Object *obj,
320 setting_retm_if(data == NULL, "Data parameter is NULL");
321 SettingAppMgrUG *ad = data;
322 ret_if(NULL == ad->pkginfo);
324 appmgr_pkginfo *info = ad->pkginfo;
325 int ret = package_manager_clear_cache_dir(info->pkgid);
327 SETTING_TRACE_ERROR("failed to invoke, ret = %d", ret);
330 appmgrUg_pkg_update_cache_size(ad);
334 void appmgrUg_pkg_moveto_cb(void *data, Evas_Object *obj,
339 appmgr_pkginfo *info;
340 SettingAppMgrUG *ad = data;
342 ret_if(NULL == data);
343 ret_if(NULL == ad->pkginfo);
347 evas_object_del(ad->popup);
349 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
350 NULL, MGRAPP_STR_MOVEING, appmgrUg_popup_del, 0, TRUE, TRUE);
352 ad->pkg_request = APPMGRUG_PKG_REQUEST_MOVE;
354 ret = pthread_create(&info->tid, NULL, appmgrUg_pkg_moveto_worker, ad);
356 SETTING_TRACE_ERROR("phread_create() Fail(%d)", ret);
357 appmgrUg_fail_popup(MGRAPP_STR_MOVE_FAIL, ad);
361 static void appmgrUg_pkg_append_toolbar(Evas_Object *toolbar,
367 appmgr_pkginfo *info;
368 Elm_Object_Item *tool_it;
369 const char *mmc_key = VCONFKEY_SYSMAN_MMC_STATUS;
371 ret_if(NULL == ad->pkginfo);
375 if (NULL == toolbar) {
376 elm_object_item_del(elm_toolbar_first_item_get(ad->pkg_toolbar));
377 elm_object_item_del(elm_toolbar_last_item_get(ad->pkg_toolbar));
378 toolbar = ad->pkg_toolbar;
382 mmc = VCONFKEY_SYSMAN_MMC_REMOVED;
383 ret = vconf_get_int(mmc_key, &mmc);
384 warn_if(ret, "vconf_get_int(%s) Fail", mmc_key);
386 if (PMINFO_INTERNAL_STORAGE == info->storage)
387 btn_str = MGRAPP_STR_MOVE_TO_SD;
389 btn_str = MGRAPP_STR_MOVE_TO_PHONE;
390 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str, appmgrUg_pkg_moveto_cb, ad);
391 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
392 if (VCONFKEY_SYSMAN_MMC_MOUNTED != mmc || !info->is_movable || info->is_preload)
393 elm_object_item_disabled_set(tool_it, EINA_TRUE);
396 if (info->is_preload && info->is_updated)
397 btn_str = MGRAPP_STR_UNINSTALL_UPDATES;
399 btn_str = MGRAPP_STR_UNINSTALL;
400 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str,
401 appmgrUg_pkg_uninstall_click, ad);
402 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
404 if (!info->removable)
405 elm_object_item_disabled_set(tool_it, EINA_TRUE);
408 static inline Evas_Object *appmgrUg_pkg_create_toolbar(Evas_Object *parent,
412 Evas_Object *toolbar;
414 retv_if(NULL == ad, NULL);
416 toolbar = elm_toolbar_add(parent);
418 elm_object_style_set(toolbar, "default");
419 elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
420 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
421 elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
423 appmgrUg_pkg_append_toolbar(toolbar, ad);
425 evas_object_show(toolbar);
430 static void appmgrUg_pkg_append_genlist(SettingAppMgrUG *ad)
433 Elm_Object_Item *item;
435 appmgrUg_append_separator(ad->gl_pkg, ad);
437 /* Title (pkg name, version S) */
438 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_info_title, ad, NULL,
439 ELM_GENLIST_ITEM_NONE, NULL, NULL);
440 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
442 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button1, ad, NULL,
443 ELM_GENLIST_ITEM_NONE, NULL, NULL);
444 /*elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); */
446 appmgrUg_pkg_append_storage(ad);
448 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button2, ad, NULL,
449 ELM_GENLIST_ITEM_NONE, NULL, NULL);
450 /*elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); */
452 appmgrUg_pkg_append_cache(ad);
454 appmgrUg_pkg_append_default(ad);
456 appmgrUg_pkg_append_website(ad);
459 appmgrUg_pkg_append_privilege(ad);
461 appmgrUg_append_separator(ad->gl_pkg, ad);
464 static int appmgrUg_pkg_create(void *data)
468 Elm_Object_Item *navi_it;
469 SettingAppMgrUG *ad = data;
471 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
473 ret = appmgrUg_pkg_get_info(ad);
475 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
476 appmgrUg_fail_popup(MGRAPP_STR_ERROR, ad);
480 navi_it = setting_push_layout_navi_bar_genlist(ad->lo_parent, ad->win,
481 MGRAPP_STR_APPLICATION_INFO, NULL, NULL,
482 NULL, NULL, ad, &ad->gl_pkg, ad->navi);
483 elm_genlist_mode_set(ad->gl_pkg, ELM_LIST_COMPRESS);
484 //elm_genlist_realization_mode_set(ad->gl_pkg, EINA_TRUE);
485 elm_naviframe_item_pop_cb_set(navi_it, appmgrUg_pkg_back_cb, ad);
487 appmgrUg_pkg_append_genlist(ad);
489 if (ad->support_taskmanager && ad->pc_main == NULL) {
491 SETTING_TRACE("Load pkginfo view");
492 appmgrUg_pkgmgr_subscribe(ad);
495 setting_view_appmgr_pkginfo.is_create = 1;
497 return SETTING_RETURN_SUCCESS;
500 static int appmgrUg_pkg_destroy(void *data)
503 SettingAppMgrUG *ad = data;
505 retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
508 evas_object_del(ad->popup);
511 if (ad->pkginfo_getsize_timer) {
512 ecore_timer_del(ad->pkginfo_getsize_timer);
513 ad->pkginfo_getsize_timer = NULL;
516 if (ad->support_taskmanager && ad->pc_main != NULL) {
518 SETTING_TRACE("Load pkginfo view");
519 pkgmgr_client_free(ad->pc_main);
523 appmgrUg_pkg_free_pkginfo(ad->pkginfo);
532 setting_view_appmgr_pkginfo.is_create = 0;
534 return SETTING_RETURN_SUCCESS;
537 static int appmgrUg_pkg_update(void *data)
541 SettingAppMgrUG *ad = data;
543 retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
545 /*record old size info, need not re-get size info when update */
547 if (ad->pkginfo->sz_total >= 0)
548 ad->sel_total = ad->pkginfo->sz_total;
549 if (ad->pkginfo->sz_data >= 0)
550 ad->sel_data_size = ad->pkginfo->sz_data;
553 elm_genlist_clear(ad->gl_pkg);
555 appmgr_pkginfo *old_pkginfo = ad->pkginfo;
558 ret = appmgrUg_pkg_get_info(ad);
560 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
561 elm_naviframe_item_pop(ad->navi);
565 /*appmgrUg_pkg_append_toolbar(NULL, ad); */
566 appmgrUg_pkg_append_genlist(ad);
568 appmgrUg_pkg_free_pkginfo(old_pkginfo);
570 return SETTING_RETURN_SUCCESS;
573 static int appmgrUg_pkg_cleanup(void *data)
575 return appmgrUg_pkg_destroy(data);
578 void appmgrUg_pkginfo_init(SettingAppMgrUG *ad)
581 ret_if(ad->pkginfo_view);
583 setting_view_appmgr_pkginfo.create = appmgrUg_pkg_create;
584 setting_view_appmgr_pkginfo.destroy = appmgrUg_pkg_destroy;
585 setting_view_appmgr_pkginfo.update = appmgrUg_pkg_update;
586 setting_view_appmgr_pkginfo.cleanup = appmgrUg_pkg_cleanup;
588 ad->pkginfo_view = &setting_view_appmgr_pkginfo;