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);
41 setting_view_destroy(ad->pkginfo_view, ad);
46 static inline void appmgrUg_pkg_append_storage(SettingAppMgrUG *ad)
50 char desc[APPMGRUG_MAX_STR_LEN] = {0};
56 appmgrUg_append_separator(ad->gl_pkg, ad);
58 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
59 MGRAPP_STR_STORAGE, NULL);
62 if (0 <= ad->sel_total)
63 appmgrUg_size_to_str(ad->sel_total, desc, sizeof(desc));
65 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
66 info->total_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
67 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, _(MGRAPP_STR_TOTAL), desc,
70 if (info->total_size) {
71 info->total_size->group_style = SETTING_GROUP_STYLE_TOP;
72 elm_genlist_item_select_mode_set(info->total_size->item,
73 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
77 if (0 <= info->sz_total && 0 <= info->sz_data)
78 appmgrUg_size_to_str(info->sz_total - info->sz_data, desc, sizeof(desc));
80 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
81 info->app_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
82 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_APPLICATION,
85 info->app_size->group_style = SETTING_GROUP_STYLE_CENTER;
86 elm_genlist_item_select_mode_set(info->app_size->item,
87 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
91 if (0 <= info->sz_data)
92 appmgrUg_size_to_str(info->sz_data, desc, sizeof(desc));
94 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
95 info->data_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
96 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_DATA,
98 if (info->data_size) {
99 info->data_size->group_style = SETTING_GROUP_STYLE_BOTTOM;
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);
130 ad->cache_size = setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_2txt_2,
131 NULL, NULL, SWALLOW_Type_INVALID, NULL, NULL, 0, MGRAPP_STR_CACHE,
133 if (ad->cache_size) {
134 __BACK_POINTER_SET(ad->cache_size);
135 ad->cache_size->group_style = SETTING_GROUP_STYLE_NONE;
136 elm_genlist_item_select_mode_set(ad->cache_size->item,
137 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
141 item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
143 ad->clear_cache = item_data;
144 __BACK_POINTER_SET(ad->clear_cache);
145 item_data->userdata = ad;
146 item_data->item = elm_genlist_item_append(ad->gl_pkg, &(ad->itc_1button), item_data, NULL,
147 ELM_GENLIST_ITEM_NONE, NULL, NULL);
148 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
150 SETTING_TRACE_ERROR("item_data is NULL");
154 static inline void appmgrUg_pkg_append_default(SettingAppMgrUG *ad)
158 appmgr_pkginfo *info;
161 ret_if(NULL == ad->pkginfo);
167 char *appid = cur->data;
169 if (appid && 1 == appsvc_is_defapp(appid))
176 SETTING_TRACE_ERROR("No defualt Application");
180 info->def_sep = appmgrUg_append_separator(ad->gl_pkg, ad);
182 setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
183 MGRAPP_STR_LAUNCH_BY_DEFAULT, NULL);
185 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
186 appmgrUg_pkg_clear_default, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
187 MGRAPP_STR_CLEAR_DEFAULTS, NULL, NULL);
189 setting_create_Gendial_field_titleItem(ad->gl_pkg, &ad->itc_multiline,
190 MGRAPP_STR_DEFAULT_DESC, NULL);
193 static inline void appmgrUg_pkg_append_website(SettingAppMgrUG *ad)
196 appmgr_pkginfo *info;
199 ret_if(NULL == ad->pkginfo);
203 if (safeStrCmp(info->pkg_type, "wgt")) {
204 SETTING_TRACE_ERROR("No Web Application");
208 appmgrUg_append_separator(ad->gl_pkg, ad);
210 setting_create_Gendial_field_def(ad->gl_pkg, &ad->itc_1txt,
211 appmgrUg_pkg_webapp_ug, ad, SWALLOW_Type_INVALID, NULL, NULL, 0,
212 MAGAPP_STR_WEB_SETTING, NULL, NULL);
215 static inline void appmgrUg_pkg_append_privilege(SettingAppMgrUG *ad)
219 appmgr_pkginfo *info;
220 Elm_Object_Item *sep_it;
221 Setting_GenGroupItem_Data *title_itdata;
224 ret_if(NULL == ad->pkginfo);
228 sep_it = appmgrUg_append_separator(ad->gl_pkg, ad);
230 title_itdata = setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
231 MGRAPP_STR_PRIVILEGE, NULL);
233 info->first_prv = NULL;
234 ret = privilege_info_foreach_privilege_group_list_by_pkgid(info->pkgid,
235 appmgrUg_pkg_get_privileges_grp_iter, ad);
236 warn_if(PRVMGR_ERR_NONE != ret,
237 "privilege_info_foreach_privilege_group_list_by_pkgid() Fail(%d)", ret);
239 if (NULL == info->first_prv && title_itdata) {
240 SETTING_TRACE_ERROR("No privilege");
241 elm_object_item_del(sep_it);
242 elm_object_item_del(title_itdata->item);
246 if (info->first_prv == info->last_prv)
247 info->first_prv->group_style = SETTING_GROUP_STYLE_NONE;
249 info->last_prv->group_style = SETTING_GROUP_STYLE_BOTTOM;
252 static void appmgrUg_pkg_uninstall(void *data, Evas_Object *obj, void *event_info)
257 appmgr_pkginfo *info;
258 SettingAppMgrUG *ad = data;
260 ret_if(NULL == data);
261 ret_if(NULL == ad->pkginfo);
265 btn_str = elm_entry_markup_to_utf8(elm_object_text_get(obj));
266 ret = safeStrCmp(btn_str, _(MGRAPP_STR_UNINSTALL));
270 evas_object_del(ad->popup);
277 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE, NULL,
278 MGRAPP_STR_UNINSTALLING, appmgrUg_popup_del, 0, TRUE, TRUE);
280 if (info->pc_request)
281 pkgmgr_client_free(info->pc_request);
282 info->pc_request = pkgmgr_client_new(PC_REQUEST);
283 if (NULL == info->pc_request) {
284 SETTING_TRACE_ERROR("pkgmgr_client_new() Fail");
288 ad->pkg_request = APPMGRUG_PKG_REQUEST_UNINSTALL;
289 ret = pkgmgr_client_uninstall(info->pc_request, info->pkg_type, info->pkgid, PM_QUIET,
291 if (ret < PKGMGR_R_OK) {
292 SETTING_TRACE_ERROR("pkgmgr_client_uninstall() Fail(%d)", ret);
293 ad->pkg_request = APPMGRUG_PKG_REQUEST_NONE;
294 appmgrUg_fail_popup(MGRAPP_STR_UNINSTALL_FAILED, ad);
298 void appmgrUg_pkg_uninstall_click(void *data, Evas_Object *obj,
302 SettingAppMgrUG *ad = data;
304 ret_if(NULL == data);
307 evas_object_del(ad->popup);
308 ad->popup = setting_create_popup_with_btn(ad, ad->win, MGRAPP_STR_UNINSTALL, MGRAPP_STR_UNINSTALL_MSG,
309 appmgrUg_pkg_uninstall, 0, 2, MGRAPP_STR_UNINSTALL, MGRAPP_STR_CANCEL);
312 void appmgrUg_pkg_clear_cache_click(void *data, Evas_Object *obj,
316 setting_retm_if(data == NULL, "Data parameter is NULL");
317 SettingAppMgrUG *ad = data;
318 ret_if(NULL == ad->pkginfo);
320 appmgr_pkginfo *info = ad->pkginfo;
321 int ret = package_manager_clear_cache_dir(info->pkgid);
323 SETTING_TRACE_ERROR("failed to invoke, ret = %d", ret);
326 appmgrUg_pkg_update_cache_size(ad);
330 void appmgrUg_pkg_moveto_cb(void *data, Evas_Object *obj,
335 appmgr_pkginfo *info;
336 SettingAppMgrUG *ad = data;
338 ret_if(NULL == data);
339 ret_if(NULL == ad->pkginfo);
343 evas_object_del(ad->popup);
345 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
346 NULL, MGRAPP_STR_MOVEING, appmgrUg_popup_del, 0, TRUE, TRUE);
348 ad->pkg_request = APPMGRUG_PKG_REQUEST_MOVE;
350 ret = pthread_create(&info->tid, NULL, appmgrUg_pkg_moveto_worker, ad);
352 SETTING_TRACE_ERROR("phread_create() Fail(%d)", ret);
353 appmgrUg_fail_popup(MGRAPP_STR_MOVE_FAIL, ad);
357 static void appmgrUg_pkg_append_toolbar(Evas_Object *toolbar,
363 appmgr_pkginfo *info;
364 Elm_Object_Item *tool_it;
365 const char *mmc_key = VCONFKEY_SYSMAN_MMC_STATUS;
367 ret_if(NULL == ad->pkginfo);
371 if (NULL == toolbar) {
372 elm_object_item_del(elm_toolbar_first_item_get(ad->pkg_toolbar));
373 elm_object_item_del(elm_toolbar_last_item_get(ad->pkg_toolbar));
374 toolbar = ad->pkg_toolbar;
378 mmc = VCONFKEY_SYSMAN_MMC_REMOVED;
379 ret = vconf_get_int(mmc_key, &mmc);
380 warn_if(ret, "vconf_get_int(%s) Fail", mmc_key);
382 if (PMINFO_INTERNAL_STORAGE == info->storage)
383 btn_str = MGRAPP_STR_MOVE_TO_SD;
385 btn_str = MGRAPP_STR_MOVE_TO_PHONE;
386 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str, appmgrUg_pkg_moveto_cb, ad);
387 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
388 if (VCONFKEY_SYSMAN_MMC_MOUNTED != mmc || !info->is_movable || info->is_preload)
389 elm_object_item_disabled_set(tool_it, EINA_TRUE);
392 if (info->is_preload && info->is_updated)
393 btn_str = MGRAPP_STR_UNINSTALL_UPDATES;
395 btn_str = MGRAPP_STR_UNINSTALL;
396 tool_it = elm_toolbar_item_append(toolbar, NULL, btn_str,
397 appmgrUg_pkg_uninstall_click, ad);
398 elm_object_item_domain_text_translatable_set(tool_it, SETTING_PACKAGE, EINA_TRUE);
400 if (!info->removable)
401 elm_object_item_disabled_set(tool_it, EINA_TRUE);
404 static inline Evas_Object *appmgrUg_pkg_create_toolbar(Evas_Object *parent,
408 Evas_Object *toolbar;
410 retv_if(NULL == ad, NULL);
412 toolbar = elm_toolbar_add(parent);
414 elm_object_style_set(toolbar, "default");
415 elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
416 elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
417 elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
419 appmgrUg_pkg_append_toolbar(toolbar, ad);
421 evas_object_show(toolbar);
426 static void appmgrUg_pkg_append_genlist(SettingAppMgrUG *ad)
429 Elm_Object_Item *item;
431 appmgrUg_append_separator(ad->gl_pkg, ad);
433 /* Title (pkg name, version S) */
434 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_info_title, ad, NULL,
435 ELM_GENLIST_ITEM_NONE, NULL, NULL);
436 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
438 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button1, ad, NULL,
439 ELM_GENLIST_ITEM_NONE, NULL, NULL);
440 /*elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); */
442 appmgrUg_pkg_append_storage(ad);
444 item = elm_genlist_item_append(ad->gl_pkg, &ad->itc_2button2, ad, NULL,
445 ELM_GENLIST_ITEM_NONE, NULL, NULL);
446 /*elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); */
448 appmgrUg_pkg_append_cache(ad);
450 appmgrUg_pkg_append_default(ad);
452 appmgrUg_pkg_append_website(ad);
455 appmgrUg_pkg_append_privilege(ad);
457 appmgrUg_append_separator(ad->gl_pkg, ad);
460 static int appmgrUg_pkg_create(void *data)
464 Elm_Object_Item *navi_it;
465 SettingAppMgrUG *ad = data;
467 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
469 ret = appmgrUg_pkg_get_info(ad);
471 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
472 appmgrUg_fail_popup(MGRAPP_STR_ERROR, ad);
476 navi_it = setting_push_layout_navi_bar_genlist(ad->lo_parent, ad->win,
477 MGRAPP_STR_APPLICATION_INFO, NULL, NULL,
478 NULL, NULL, ad, &ad->gl_pkg, ad->navi);
479 elm_genlist_mode_set(ad->gl_pkg, ELM_LIST_COMPRESS);
480 elm_genlist_realization_mode_set(ad->gl_pkg, EINA_TRUE);
481 elm_naviframe_item_pop_cb_set(navi_it, appmgrUg_pkg_back_cb, ad);
483 appmgrUg_pkg_append_genlist(ad);
485 if (ad->support_taskmanager && ad->pc_main == NULL) {
487 SETTING_TRACE("Load pkginfo view");
488 appmgrUg_pkgmgr_subscribe(ad);
491 setting_view_appmgr_pkginfo.is_create = 1;
493 return SETTING_RETURN_SUCCESS;
496 static int appmgrUg_pkg_destroy(void *data)
499 SettingAppMgrUG *ad = data;
501 retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
504 evas_object_del(ad->popup);
507 if (ad->pkginfo_getsize_timer) {
508 ecore_timer_del(ad->pkginfo_getsize_timer);
509 ad->pkginfo_getsize_timer = NULL;
512 if (ad->support_taskmanager && ad->pc_main != NULL) {
514 SETTING_TRACE("Load pkginfo view");
515 pkgmgr_client_free(ad->pc_main);
519 appmgrUg_pkg_free_pkginfo(ad->pkginfo);
528 setting_view_appmgr_pkginfo.is_create = 0;
530 return SETTING_RETURN_SUCCESS;
533 static int appmgrUg_pkg_update(void *data)
537 SettingAppMgrUG *ad = data;
539 retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
541 /*record old size info, need not re-get size info when update */
543 if (ad->pkginfo->sz_total >= 0)
544 ad->sel_total = ad->pkginfo->sz_total;
545 if (ad->pkginfo->sz_data >= 0)
546 ad->sel_data_size = ad->pkginfo->sz_data;
549 elm_genlist_clear(ad->gl_pkg);
551 appmgr_pkginfo *old_pkginfo = ad->pkginfo;
554 ret = appmgrUg_pkg_get_info(ad);
556 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
557 elm_naviframe_item_pop(ad->navi);
561 /*appmgrUg_pkg_append_toolbar(NULL, ad); */
562 appmgrUg_pkg_append_genlist(ad);
564 appmgrUg_pkg_free_pkginfo(old_pkginfo);
566 return SETTING_RETURN_SUCCESS;
569 static int appmgrUg_pkg_cleanup(void *data)
571 return appmgrUg_pkg_destroy(data);
574 void appmgrUg_pkginfo_init(SettingAppMgrUG *ad)
577 ret_if(ad->pkginfo_view);
579 setting_view_appmgr_pkginfo.create = appmgrUg_pkg_create;
580 setting_view_appmgr_pkginfo.destroy = appmgrUg_pkg_destroy;
581 setting_view_appmgr_pkginfo.update = appmgrUg_pkg_update;
582 setting_view_appmgr_pkginfo.cleanup = appmgrUg_pkg_cleanup;
584 ad->pkginfo_view = &setting_view_appmgr_pkginfo;