b38bda5d9af6500bae229c0f30a247acb89bfd0c
[apps/home/settings.git] / setting-appmgr / src / setting-appmgr-pkginfo.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19 #include <appsvc.h>
20 #include <privilege_info.h>
21
22
23 #include <package_manager.h>
24
25 #include "setting-appmgr-utils.h"
26 #include "setting-appmgr-pkginfo-utils.h"
27 #include "setting-appmgr-pkginfo.h"
28
29 #define APPMGRUG_PROGRESSBAR_TIMEOUT 10
30
31 setting_view setting_view_appmgr_pkginfo;
32
33 static Eina_Bool appmgrUg_pkg_back_cb(void *data, Elm_Object_Item *it)
34 {
35         SETTING_TRACE_BEGIN;
36         SettingAppMgrUG *ad = data;
37
38         retv_if(data == NULL, EINA_FALSE);
39
40         if (ad->support_taskmanager) {
41                 ug_destroy_me(ad->ug);
42                 return EINA_FALSE;
43         } else {
44                 setting_view_destroy(ad->pkginfo_view, ad);
45                 return EINA_TRUE;
46         }
47 }
48
49 static inline void appmgrUg_pkg_append_storage(SettingAppMgrUG *ad)
50 {
51         SETTING_TRACE_BEGIN;
52         appmgr_pkginfo *info;
53         char desc[APPMGRUG_MAX_STR_LEN] = {0};
54
55         ret_if(NULL == ad);
56
57         info = ad->pkginfo;
58
59         //appmgrUg_append_separator(ad->gl_pkg, ad);
60
61         setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
62                                                MGRAPP_STR_STORAGE, NULL);
63
64         /* Total size */
65         if (0 <= ad->sel_total)
66                 appmgrUg_size_to_str(ad->sel_total, desc, sizeof(desc));
67         else
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,
71                                                             NULL);
72
73         if (info->total_size) {
74                 elm_genlist_item_select_mode_set(info->total_size->item,
75                                                  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
76         }
77
78         /* App size */
79         if (0 <= info->sz_total && 0 <= info->sz_data)
80                 appmgrUg_size_to_str(info->sz_total - info->sz_data, desc, sizeof(desc));
81         else
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,
85                                                           desc, NULL);
86         if (info->app_size) {
87                 elm_genlist_item_select_mode_set(info->app_size->item,
88                                                  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
89         }
90
91         /* Data size */
92         if (0 <= info->sz_data)
93                 appmgrUg_size_to_str(info->sz_data, desc, sizeof(desc));
94         else
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,
98                                                            desc, NULL);
99         if (info->data_size) {
100                 elm_genlist_item_select_mode_set(info->data_size->item,
101                                                  ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
102         }
103
104 }
105
106 static inline void appmgrUg_pkg_append_cache(SettingAppMgrUG *ad)
107 {
108         SETTING_TRACE_BEGIN;
109         GList *cur;
110         appmgr_pkginfo *info;
111         Setting_GenGroupItem_Data *item_data = NULL;
112         char desc[APPMGRUG_MAX_STR_LEN] = {0};
113
114         ret_if(NULL == ad);
115         ret_if(NULL == ad->pkginfo);
116
117         info = ad->pkginfo;
118
119         //appmgrUg_append_separator(ad->gl_pkg, ad);
120
121         /* title */
122         setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
123                                                MGRAPP_STR_CACHE, NULL);
124
125         /* cache size */
126         if (0 <= info->sz_cache)
127                 appmgrUg_size_to_str(info->sz_cache, desc, sizeof(desc));
128         else
129                 snprintf(desc, sizeof(desc), "%s", MGRAPP_STR_COMPUTING);
130
131         SETTING_TRACE(" ************************************************************* ----> DESC : %s", desc);
132
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,
135                                                           desc, NULL);
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);
140         }
141
142         /* clear cache */
143         item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
144         if (item_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);
151         } else {
152                 SETTING_TRACE_ERROR("item_data is NULL");
153         }
154 }
155
156 static inline void appmgrUg_pkg_append_default(SettingAppMgrUG *ad)
157 {
158         SETTING_TRACE_BEGIN;
159         GList *cur;
160         appmgr_pkginfo *info;
161
162         ret_if(NULL == ad);
163         ret_if(NULL == ad->pkginfo);
164
165         info = ad->pkginfo;
166
167         cur = info->appids;
168         while (cur) {
169                 char *appid = cur->data;
170
171                 if (appid && 1 == appsvc_is_defapp(appid))
172                         break;
173
174                 cur = cur->next;
175         }
176
177         if (NULL == cur) {
178                 SETTING_TRACE_ERROR("No defualt Application");
179                 return;
180         }
181
182         //info->def_sep = appmgrUg_append_separator(ad->gl_pkg, ad);
183
184         setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
185                                                MGRAPP_STR_LAUNCH_BY_DEFAULT, NULL);
186
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);
190
191         setting_create_Gendial_field_titleItem(ad->gl_pkg, &ad->itc_multiline,
192                                                MGRAPP_STR_DEFAULT_DESC, NULL);
193 }
194
195 static inline void appmgrUg_pkg_append_website(SettingAppMgrUG *ad)
196 {
197         SETTING_TRACE_BEGIN;
198         appmgr_pkginfo *info;
199
200         ret_if(NULL == ad);
201         ret_if(NULL == ad->pkginfo);
202
203         info = ad->pkginfo;
204
205         if (safeStrCmp(info->pkg_type, "wgt")) {
206                 SETTING_TRACE_ERROR("No Web Application");
207                 return;
208         }
209
210         //appmgrUg_append_separator(ad->gl_pkg, ad);
211
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);
215 }
216
217 static inline void appmgrUg_pkg_append_privilege(SettingAppMgrUG *ad)
218 {
219         SETTING_TRACE_BEGIN;
220         int ret;
221         appmgr_pkginfo *info;
222         //Elm_Object_Item *sep_it;
223         Setting_GenGroupItem_Data *title_itdata;
224
225         ret_if(NULL == ad);
226         ret_if(NULL == ad->pkginfo);
227
228         info = ad->pkginfo;
229
230         //sep_it = appmgrUg_append_separator(ad->gl_pkg, ad);
231
232         title_itdata = setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
233                                                               MGRAPP_STR_PRIVILEGE, NULL);
234
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);
240
241         if (NULL == info->first_prv) {
242                 SETTING_TRACE_ERROR("No privilege");
243                 //elm_object_item_del(sep_it);
244                 if (title_itdata)
245                         elm_object_item_del(title_itdata->item);
246                 return;
247         }
248 }
249
250 static void appmgrUg_pkg_uninstall(void *data, Evas_Object *obj, void *event_info)
251 {
252         SETTING_TRACE_BEGIN;
253         int ret;
254         char *btn_str;
255         appmgr_pkginfo *info;
256         SettingAppMgrUG *ad = data;
257
258         ret_if(NULL == data);
259         ret_if(NULL == ad->pkginfo);
260
261         info = ad->pkginfo;
262
263         btn_str = elm_entry_markup_to_utf8(elm_object_text_get(obj));
264         ret = safeStrCmp(btn_str, _(MGRAPP_STR_UNINSTALL));
265         free(btn_str);
266
267         if (ad->popup) {
268                 evas_object_del(ad->popup);
269                 ad->popup = NULL;
270         }
271
272         if (0 != ret)
273                 return;
274
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);
277
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");
283                 return;
284         }
285
286         ad->pkg_request = APPMGRUG_PKG_REQUEST_UNINSTALL;
287         ret = pkgmgr_client_uninstall(info->pc_request, info->pkg_type, info->pkgid, PM_QUIET,
288                                       NULL, NULL);
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);
293         }
294 }
295
296 void appmgrUg_pkg_uninstall_click(void *data, Evas_Object *obj,
297                                   void *event_info)
298 {
299         SETTING_TRACE_BEGIN;
300         SettingAppMgrUG *ad = data;
301
302         ret_if(NULL == data);
303
304         if (ad->popup)
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);
309 }
310
311 void appmgrUg_pkg_clear_cache_click(void *data, Evas_Object *obj,
312                                     void *event_info)
313 {
314         SETTING_TRACE_BEGIN;
315         setting_retm_if(data == NULL, "Data parameter is NULL");
316         SettingAppMgrUG *ad = data;
317         ret_if(NULL == ad->pkginfo);
318
319         appmgr_pkginfo *info = ad->pkginfo;
320         int ret = package_manager_clear_cache_dir(info->pkgid);
321         if (ret != 0) {
322                 SETTING_TRACE_ERROR("failed to invoke, ret = %d", ret);
323         } else {
324                 info->sz_cache = 0;
325                 appmgrUg_pkg_update_cache_size(ad);
326         }
327 }
328
329 void appmgrUg_pkg_moveto_cb(void *data, Evas_Object *obj,
330                             void *event_info)
331 {
332         SETTING_TRACE_BEGIN;
333         int ret;
334         appmgr_pkginfo *info;
335         SettingAppMgrUG *ad = data;
336
337         ret_if(NULL == data);
338         ret_if(NULL == ad->pkginfo);
339
340         info = ad->pkginfo;
341         if (ad->popup)
342                 evas_object_del(ad->popup);
343
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);
346
347         ad->pkg_request = APPMGRUG_PKG_REQUEST_MOVE;
348
349         ret = pthread_create(&info->tid, NULL, appmgrUg_pkg_moveto_worker, ad);
350         if (ret) {
351                 SETTING_TRACE_ERROR("phread_create() Fail(%d)", ret);
352                 appmgrUg_fail_popup(MGRAPP_STR_MOVE_FAIL, ad);
353         }
354 }
355
356 static void appmgrUg_pkg_append_toolbar(Evas_Object *toolbar,
357                                         SettingAppMgrUG *ad)
358 {
359         SETTING_TRACE_BEGIN;
360         int ret, mmc;
361         char *btn_str;
362         appmgr_pkginfo *info;
363         Elm_Object_Item *tool_it;
364         const char *mmc_key = VCONFKEY_SYSMAN_MMC_STATUS;
365
366         ret_if(NULL == ad->pkginfo);
367
368         info = ad->pkginfo;
369
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;
374         }
375
376         /* Move to */
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);
380
381         if (PMINFO_INTERNAL_STORAGE == info->storage)
382                 btn_str = MGRAPP_STR_MOVE_TO_SD;
383         else
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);
389
390         /* Uninstall */
391         if (info->is_preload && info->is_updated)
392                 btn_str = MGRAPP_STR_UNINSTALL_UPDATES;
393         else
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);
398
399         if (!info->removable)
400                 elm_object_item_disabled_set(tool_it, EINA_TRUE);
401 }
402
403 static inline Evas_Object *appmgrUg_pkg_create_toolbar(Evas_Object *parent,
404                                                        SettingAppMgrUG *ad)
405 {
406         SETTING_TRACE_BEGIN;
407         Evas_Object *toolbar;
408
409         retv_if(NULL == ad, NULL);
410
411         toolbar = elm_toolbar_add(parent);
412
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);
417
418         appmgrUg_pkg_append_toolbar(toolbar, ad);
419
420         evas_object_show(toolbar);
421
422         return toolbar;
423 }
424
425 static void appmgrUg_pkg_append_genlist(SettingAppMgrUG *ad)
426 {
427         SETTING_TRACE_BEGIN;
428         Elm_Object_Item *item;
429
430         //appmgrUg_append_separator(ad->gl_pkg, ad);
431
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);
436
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); */
440
441         appmgrUg_pkg_append_storage(ad);
442
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); */
446
447         appmgrUg_pkg_append_cache(ad);
448
449         appmgrUg_pkg_append_default(ad);
450 #if 0
451         appmgrUg_pkg_append_website(ad);
452 #endif
453
454         appmgrUg_pkg_append_privilege(ad);
455
456         //appmgrUg_append_separator(ad->gl_pkg, ad);
457 }
458
459
460 /**
461  * [UI] Naviframe : "Application info"
462  */
463 static int appmgrUg_pkg_create(void *data)
464 {
465         SETTING_TRACE_BEGIN;
466         int ret;
467         Elm_Object_Item *navi_it;
468         SettingAppMgrUG *ad = data;
469
470         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
471
472         ret = appmgrUg_pkg_get_info(ad);
473         if (ret) {
474                 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
475                 appmgrUg_fail_popup(MGRAPP_STR_ERROR, ad);
476                 return -1;
477         }
478
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);
485
486         appmgrUg_pkg_append_genlist(ad);
487
488         if (ad->support_taskmanager && ad->pc_main == NULL) {
489
490                 SETTING_TRACE("Load pkginfo view");
491                 appmgrUg_pkgmgr_subscribe(ad);
492         }
493
494         setting_view_appmgr_pkginfo.is_create = 1;
495
496         return SETTING_RETURN_SUCCESS;
497 }
498
499 static int appmgrUg_pkg_destroy(void *data)
500 {
501         SETTING_TRACE_BEGIN;
502         SettingAppMgrUG *ad = data;
503
504         retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
505
506         if (ad->popup) {
507                 evas_object_del(ad->popup);
508                 ad->popup = NULL;
509         }
510         if (ad->pkginfo_getsize_timer) {
511                 ecore_timer_del(ad->pkginfo_getsize_timer);
512                 ad->pkginfo_getsize_timer = NULL;
513         }
514
515         if (ad->support_taskmanager && ad->pc_main != NULL) {
516
517                 SETTING_TRACE("Load pkginfo view");
518                 pkgmgr_client_free(ad->pc_main);
519                 ad->pc_main = NULL;
520         }
521
522         appmgrUg_pkg_free_pkginfo(ad->pkginfo);
523         ad->pkginfo = NULL;
524         ad->info_run = NULL;
525         ad->runinfos = NULL;
526
527         FREE(ad->sel_pkgid);
528         FREE(ad->sel_label);
529         FREE(ad->sel_icon);
530
531         setting_view_appmgr_pkginfo.is_create = 0;
532         elm_naviframe_item_pop(ad->navi);
533
534         return SETTING_RETURN_SUCCESS;
535 }
536
537 static int appmgrUg_pkg_update(void *data)
538 {
539         SETTING_TRACE_BEGIN;
540         int ret;
541         SettingAppMgrUG *ad = data;
542
543         retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
544
545         /*record old size info, need not re-get size info when update */
546         if (ad->pkginfo) {
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;
551         }
552
553         elm_genlist_clear(ad->gl_pkg);
554
555         appmgr_pkginfo *old_pkginfo = ad->pkginfo;
556         ad->pkginfo = NULL;
557
558         ret = appmgrUg_pkg_get_info(ad);
559         if (ret) {
560                 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
561                 elm_naviframe_item_pop(ad->navi);
562                 return -1;
563         }
564
565         /*appmgrUg_pkg_append_toolbar(NULL, ad); */
566         appmgrUg_pkg_append_genlist(ad);
567
568         appmgrUg_pkg_free_pkginfo(old_pkginfo);
569
570         return SETTING_RETURN_SUCCESS;
571 }
572
573 static int appmgrUg_pkg_cleanup(void *data)
574 {
575         return appmgrUg_pkg_destroy(data);
576 }
577
578 void appmgrUg_pkginfo_init(SettingAppMgrUG *ad)
579 {
580         ret_if(NULL == ad);
581         ret_if(ad->pkginfo_view);
582
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;
587
588         ad->pkginfo_view = &setting_view_appmgr_pkginfo;
589 }