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 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,
87 elm_genlist_item_select_mode_set(info->app_size->item,
88 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
92 if (0 <= info->sz_data)
93 appmgrUg_size_to_str(info->sz_data, desc, sizeof(desc));
95 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
96 info->data_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
97 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_DATA,
99 if (info->data_size) {
100 elm_genlist_item_select_mode_set(info->data_size->item,
101 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
106 static inline void appmgrUg_pkg_append_cache(SettingAppMgrUG *ad)
110 appmgr_pkginfo *info;
111 Setting_GenGroupItem_Data *item_data = NULL;
112 char desc[APPMGRUG_MAX_STR_LEN] = {0};
115 ret_if(NULL == ad->pkginfo);
119 //appmgrUg_append_separator(ad->gl_pkg, ad);
122 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
123 MGRAPP_STR_CACHE, NULL);
126 if (0 <= info->sz_cache)
127 appmgrUg_size_to_str(info->sz_cache, desc, sizeof(desc));
129 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
131 SETTING_TRACE(" ************************************************************* ----> DESC : %s", desc);
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 elm_genlist_item_select_mode_set(ad->cache_size->item,
139 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
143 item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
145 ad->clear_cache = item_data;
146 __BACK_POINTER_SET(ad->clear_cache);
147 item_data->userdata = ad;
148 item_data->item = elm_genlist_item_append(ad->gl_pkg, &(ad->itc_1button), item_data, NULL,
149 ELM_GENLIST_ITEM_NONE, NULL, NULL);
150 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
152 SETTING_TRACE_ERROR("item_data is NULL");
156 static inline void appmgrUg_pkg_append_default(SettingAppMgrUG *ad)
160 appmgr_pkginfo *info;
163 ret_if(NULL == ad->pkginfo);
169 char *appid = cur->data;
171 if (appid && 1 == appsvc_is_defapp(appid))
178 SETTING_TRACE_ERROR("No defualt Application");
182 //info->def_sep = appmgrUg_append_separator(ad->gl_pkg, ad);
184 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
185 MGRAPP_STR_LAUNCH_BY_DEFAULT, NULL);
187 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
188 appmgrUg_pkg_clear_default, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
189 MGRAPP_STR_CLEAR_DEFAULTS, NULL, NULL);
191 setting_create_Gendial_field_titleItem(ad->gl_pkg, &ad->itc_multiline,
192 MGRAPP_STR_DEFAULT_DESC, NULL);
195 static inline void appmgrUg_pkg_append_website(SettingAppMgrUG *ad)
198 appmgr_pkginfo *info;
201 ret_if(NULL == ad->pkginfo);
205 if (safeStrCmp(info->pkg_type, "wgt")) {
206 SETTING_TRACE_ERROR("No Web Application");
210 //appmgrUg_append_separator(ad->gl_pkg, ad);
212 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
213 appmgrUg_pkg_webapp_ug, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
214 MAGAPP_STR_WEB_SETTING, NULL, NULL);
217 static inline void appmgrUg_pkg_append_privilege(SettingAppMgrUG *ad)
221 appmgr_pkginfo *info;
222 //Elm_Object_Item *sep_it;
223 Setting_GenGroupItem_Data *title_itdata;
226 ret_if(NULL == ad->pkginfo);
230 //sep_it = appmgrUg_append_separator(ad->gl_pkg, ad);
232 title_itdata = setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
233 MGRAPP_STR_PRIVILEGE, NULL);
235 info->first_prv = NULL;
236 ret = privilege_info_foreach_privilege_group_list_by_pkgid(info->pkgid,
237 appmgrUg_pkg_get_privileges_grp_iter, ad);
238 warn_if(PRVMGR_ERR_NONE != ret,
239 "privilege_info_foreach_privilege_group_list_by_pkgid() Fail(%d)", ret);
241 if (NULL == info->first_prv) {
242 SETTING_TRACE_ERROR("No privilege");
243 //elm_object_item_del(sep_it);
245 elm_object_item_del(title_itdata->item);
250 static void appmgrUg_pkg_uninstall(void *data, Evas_Object *obj, void *event_info)
255 appmgr_pkginfo *info;
256 SettingAppMgrUG *ad = data;
258 ret_if(NULL == data);
259 ret_if(NULL == ad->pkginfo);
263 btn_str = elm_entry_markup_to_utf8(elm_object_text_get(obj));
264 ret = safeStrCmp(btn_str, _(MGRAPP_STR_UNINSTALL));
268 evas_object_del(ad->popup);
275 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE, NULL,
276 MGRAPP_STR_UNINSTALLING, appmgrUg_popup_del, 0, TRUE, TRUE, 0);
278 if (info->pc_request)
279 pkgmgr_client_free(info->pc_request);
280 info->pc_request = pkgmgr_client_new(PC_REQUEST);
281 if (NULL == info->pc_request) {
282 SETTING_TRACE_ERROR("pkgmgr_client_new() Fail");
286 ad->pkg_request = APPMGRUG_PKG_REQUEST_UNINSTALL;
287 ret = pkgmgr_client_uninstall(info->pc_request, info->pkg_type, info->pkgid, PM_QUIET,
289 if (ret < PKGMGR_R_OK) {
290 SETTING_TRACE_ERROR("pkgmgr_client_uninstall() Fail(%d)", ret);
291 ad->pkg_request = APPMGRUG_PKG_REQUEST_NONE;
292 appmgrUg_fail_popup(MGRAPP_STR_UNINSTALL_FAILED, ad);
296 void appmgrUg_pkg_uninstall_click(void *data, Evas_Object *obj,
300 SettingAppMgrUG *ad = data;
302 ret_if(NULL == data);
305 evas_object_del(ad->popup);
306 ad->popup = setting_create_popup(ad, ad->win, MGRAPP_STR_UNINSTALL, MGRAPP_STR_UNINSTALL_MSG,
307 appmgrUg_pkg_uninstall, 0, FALSE, FALSE,
308 2, MGRAPP_STR_UNINSTALL, MGRAPP_STR_CANCEL);
311 void appmgrUg_pkg_clear_cache_click(void *data, Evas_Object *obj,
315 setting_retm_if(data == NULL, "Data parameter is NULL");
316 SettingAppMgrUG *ad = data;
317 ret_if(NULL == ad->pkginfo);
319 appmgr_pkginfo *info = ad->pkginfo;
320 int ret = package_manager_clear_cache_dir(info->pkgid);
322 SETTING_TRACE_ERROR("failed to invoke, ret = %d", ret);
325 appmgrUg_pkg_update_cache_size(ad);
329 void appmgrUg_pkg_moveto_cb(void *data, Evas_Object *obj,
334 appmgr_pkginfo *info;
335 SettingAppMgrUG *ad = data;
337 ret_if(NULL == data);
338 ret_if(NULL == ad->pkginfo);
342 evas_object_del(ad->popup);
344 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
345 NULL, MGRAPP_STR_MOVEING, appmgrUg_popup_del, 0, TRUE, TRUE, 0);
347 ad->pkg_request = APPMGRUG_PKG_REQUEST_MOVE;
349 ret = pthread_create(&info->tid, NULL, appmgrUg_pkg_moveto_worker, ad);
351 SETTING_TRACE_ERROR("phread_create() Fail(%d)", ret);
352 appmgrUg_fail_popup(MGRAPP_STR_MOVE_FAIL, ad);
356 static void appmgrUg_pkg_append_toolbar(Evas_Object *toolbar,
362 appmgr_pkginfo *info;
363 Elm_Object_Item *tool_it;
364 const char *mmc_key = VCONFKEY_SYSMAN_MMC_STATUS;
366 ret_if(NULL == ad->pkginfo);
370 if (NULL == toolbar) {
371 elm_object_item_del(elm_toolbar_first_item_get(ad->pkg_toolbar));
372 elm_object_item_del(elm_toolbar_last_item_get(ad->pkg_toolbar));
373 toolbar = ad->pkg_toolbar;
377 mmc = VCONFKEY_SYSMAN_MMC_REMOVED;
378 ret = vconf_get_int(mmc_key, &mmc);
379 warn_if(ret, "vconf_get_int(%s) Fail", mmc_key);
381 if (PMINFO_INTERNAL_STORAGE == info->storage)
382 btn_str = MGRAPP_STR_MOVE_TO_SD;
384 btn_str = MGRAPP_STR_MOVE_TO_PHONE;
385 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str, appmgrUg_pkg_moveto_cb, ad);
386 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
387 if (VCONFKEY_SYSMAN_MMC_MOUNTED != mmc || !info->is_movable || info->is_preload)
388 elm_object_item_disabled_set(tool_it, EINA_TRUE);
391 if (info->is_preload && info->is_updated)
392 btn_str = MGRAPP_STR_UNINSTALL_UPDATES;
394 btn_str = MGRAPP_STR_UNINSTALL;
395 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str,
396 appmgrUg_pkg_uninstall_click, ad);
397 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
399 if (!info->removable)
400 elm_object_item_disabled_set(tool_it, EINA_TRUE);
403 static inline Evas_Object *appmgrUg_pkg_create_toolbar(Evas_Object *parent,
407 Evas_Object *toolbar;
409 retv_if(NULL == ad, NULL);
411 toolbar = elm_toolbar_add(parent);
413 elm_object_style_set(toolbar, "default");
414 elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
415 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
416 elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
418 appmgrUg_pkg_append_toolbar(toolbar, ad);
420 evas_object_show(toolbar);
425 static void appmgrUg_pkg_append_genlist(SettingAppMgrUG *ad)
428 Elm_Object_Item *item;
430 //appmgrUg_append_separator(ad->gl_pkg, ad);
432 /* Title (pkg name, version S) */
433 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_info_title, ad, NULL,
434 ELM_GENLIST_ITEM_NONE, NULL, NULL);
435 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
437 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button1, ad, NULL,
438 ELM_GENLIST_ITEM_NONE, NULL, NULL);
439 /*elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); */
441 appmgrUg_pkg_append_storage(ad);
443 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button2, ad, NULL,
444 ELM_GENLIST_ITEM_NONE, NULL, NULL);
445 /*elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); */
447 appmgrUg_pkg_append_cache(ad);
449 appmgrUg_pkg_append_default(ad);
451 appmgrUg_pkg_append_website(ad);
454 appmgrUg_pkg_append_privilege(ad);
456 //appmgrUg_append_separator(ad->gl_pkg, ad);
461 * [UI] Naviframe : "Application info"
463 static int appmgrUg_pkg_create(void *data)
467 Elm_Object_Item *navi_it;
468 SettingAppMgrUG *ad = data;
470 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
472 ret = appmgrUg_pkg_get_info(ad);
474 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
475 appmgrUg_fail_popup(MGRAPP_STR_ERROR, ad);
479 navi_it = setting_push_layout_navi_bar_genlist(ad->lo_parent, ad->win,
480 MGRAPP_STR_APPLICATION_INFO, NULL, NULL,
481 appmgrUg_pkg_back_cb, NULL, ad, &ad->gl_pkg, ad->navi);
482 elm_genlist_mode_set(ad->gl_pkg, ELM_LIST_COMPRESS);
483 elm_genlist_realization_mode_set(ad->gl_pkg, EINA_TRUE);
484 elm_naviframe_item_pop_cb_set(navi_it, appmgrUg_pkg_back_cb, ad);
486 appmgrUg_pkg_append_genlist(ad);
488 if (ad->support_taskmanager && ad->pc_main == NULL) {
490 SETTING_TRACE("Load pkginfo view");
491 appmgrUg_pkgmgr_subscribe(ad);
494 setting_view_appmgr_pkginfo.is_create = 1;
496 return SETTING_RETURN_SUCCESS;
499 static int appmgrUg_pkg_destroy(void *data)
502 SettingAppMgrUG *ad = data;
504 retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
507 evas_object_del(ad->popup);
510 if (ad->pkginfo_getsize_timer) {
511 ecore_timer_del(ad->pkginfo_getsize_timer);
512 ad->pkginfo_getsize_timer = NULL;
515 if (ad->support_taskmanager && ad->pc_main != NULL) {
517 SETTING_TRACE("Load pkginfo view");
518 pkgmgr_client_free(ad->pc_main);
522 appmgrUg_pkg_free_pkginfo(ad->pkginfo);
531 setting_view_appmgr_pkginfo.is_create = 0;
532 elm_naviframe_item_pop(ad->navi);
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;