tizen 2.3.1 release
[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 #include "setting-appmgr-utils.h"
23 #include "setting-appmgr-pkginfo-utils.h"
24 #include "setting-appmgr-pkginfo.h"
25
26 #define APPMGRUG_PROGRESSBAR_TIMEOUT 10
27
28 setting_view setting_view_appmgr_pkginfo;
29
30 static Eina_Bool appmgrUg_pkg_back_cb(void *data, Elm_Object_Item *it)
31 {
32         SETTING_TRACE_BEGIN;
33         SettingAppMgrUG *ad = data;
34
35         retv_if(data == NULL, EINA_FALSE);
36
37         if (ad->support_taskmanager) {
38                 ug_destroy_me(ad->ug);
39                 return EINA_FALSE;
40         } else {
41                 setting_view_destroy(ad->pkginfo_view, ad);
42                 return EINA_TRUE;
43         }
44 }
45
46 static inline void appmgrUg_pkg_append_storage(SettingAppMgrUG *ad)
47 {
48         SETTING_TRACE_BEGIN;
49         appmgr_pkginfo *info;
50         char desc[APPMGRUG_MAX_STR_LEN] = {0};
51
52         ret_if(NULL == ad);
53
54         info = ad->pkginfo;
55
56         appmgrUg_append_separator(ad->gl_pkg, ad);
57
58         setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
59                                                MGRAPP_STR_STORAGE, NULL);
60
61         /* Total size */
62         if (0 <= ad->sel_total)
63                 appmgrUg_size_to_str(ad->sel_total, desc, sizeof(desc));
64         else
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,
68                                                             NULL);
69
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);
74         }
75
76         /* App size */
77         if (0 <= info->sz_total && 0 <= info->sz_data)
78                 appmgrUg_size_to_str(info->sz_total - info->sz_data, desc, sizeof(desc));
79         else
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,
83                                                           desc, NULL);
84         if (info->app_size) {
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);
88         }
89
90         /* Data size */
91         if (0 <= info->sz_data)
92                 appmgrUg_size_to_str(info->sz_data, desc, sizeof(desc));
93         else
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,
97                                                            desc, NULL);
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);
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         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,
132                                                           desc, NULL);
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);
138         }
139
140         /* clear cache */
141         item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
142         if (item_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);
149         } else {
150                 SETTING_TRACE_ERROR("item_data is NULL");
151         }
152 }
153
154 static inline void appmgrUg_pkg_append_default(SettingAppMgrUG *ad)
155 {
156         SETTING_TRACE_BEGIN;
157         GList *cur;
158         appmgr_pkginfo *info;
159
160         ret_if(NULL == ad);
161         ret_if(NULL == ad->pkginfo);
162
163         info = ad->pkginfo;
164
165         cur = info->appids;
166         while (cur) {
167                 char *appid = cur->data;
168
169                 if (appid && 1 == appsvc_is_defapp(appid))
170                         break;
171
172                 cur = cur->next;
173         }
174
175         if (NULL == cur) {
176                 SETTING_TRACE_ERROR("No defualt Application");
177                 return;
178         }
179
180         info->def_sep = appmgrUg_append_separator(ad->gl_pkg, ad);
181
182         setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
183                                                MGRAPP_STR_LAUNCH_BY_DEFAULT, NULL);
184
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);
188
189         setting_create_Gendial_field_titleItem(ad->gl_pkg, &ad->itc_multiline,
190                                                MGRAPP_STR_DEFAULT_DESC, NULL);
191 }
192
193 static inline void appmgrUg_pkg_append_website(SettingAppMgrUG *ad)
194 {
195         SETTING_TRACE_BEGIN;
196         appmgr_pkginfo *info;
197
198         ret_if(NULL == ad);
199         ret_if(NULL == ad->pkginfo);
200
201         info = ad->pkginfo;
202
203         if (safeStrCmp(info->pkg_type, "wgt")) {
204                 SETTING_TRACE_ERROR("No Web Application");
205                 return;
206         }
207
208         appmgrUg_append_separator(ad->gl_pkg, ad);
209
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);
213 }
214
215 static inline void appmgrUg_pkg_append_privilege(SettingAppMgrUG *ad)
216 {
217         SETTING_TRACE_BEGIN;
218         int ret;
219         appmgr_pkginfo *info;
220         Elm_Object_Item *sep_it;
221         Setting_GenGroupItem_Data *title_itdata;
222
223         ret_if(NULL == ad);
224         ret_if(NULL == ad->pkginfo);
225
226         info = ad->pkginfo;
227
228         sep_it = appmgrUg_append_separator(ad->gl_pkg, ad);
229
230         title_itdata = setting_create_Gendial_field_titleItem(ad->gl_pkg, &(ad->itc_grp_title),
231                                                               MGRAPP_STR_PRIVILEGE, NULL);
232
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);
238
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);
243                 return;
244         }
245
246         if (info->first_prv == info->last_prv)
247                 info->first_prv->group_style = SETTING_GROUP_STYLE_NONE;
248         else
249                 info->last_prv->group_style = SETTING_GROUP_STYLE_BOTTOM;
250 }
251
252 static void appmgrUg_pkg_uninstall(void *data, Evas_Object *obj, void *event_info)
253 {
254         SETTING_TRACE_BEGIN;
255         int ret;
256         char *btn_str;
257         appmgr_pkginfo *info;
258         SettingAppMgrUG *ad = data;
259
260         ret_if(NULL == data);
261         ret_if(NULL == ad->pkginfo);
262
263         info = ad->pkginfo;
264
265         btn_str = elm_entry_markup_to_utf8(elm_object_text_get(obj));
266         ret = safeStrCmp(btn_str, _(MGRAPP_STR_UNINSTALL));
267         free(btn_str);
268
269         if (ad->popup) {
270                 evas_object_del(ad->popup);
271                 ad->popup = NULL;
272         }
273
274         if (0 != ret)
275                 return;
276
277         ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE, NULL,
278                                                           MGRAPP_STR_UNINSTALLING, appmgrUg_popup_del, 0, TRUE, TRUE);
279
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");
285                 return;
286         }
287
288         ad->pkg_request = APPMGRUG_PKG_REQUEST_UNINSTALL;
289         ret = pkgmgr_client_uninstall(info->pc_request, info->pkg_type, info->pkgid, PM_QUIET,
290                                       NULL, NULL);
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);
295         }
296 }
297
298 void appmgrUg_pkg_uninstall_click(void *data, Evas_Object *obj,
299                                   void *event_info)
300 {
301         SETTING_TRACE_BEGIN;
302         SettingAppMgrUG *ad = data;
303
304         ret_if(NULL == data);
305
306         if (ad->popup)
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);
310 }
311
312 void appmgrUg_pkg_clear_cache_click(void *data, Evas_Object *obj,
313                                     void *event_info)
314 {
315         SETTING_TRACE_BEGIN;
316         setting_retm_if(data == NULL, "Data parameter is NULL");
317         SettingAppMgrUG *ad = data;
318         ret_if(NULL == ad->pkginfo);
319
320         appmgr_pkginfo *info = ad->pkginfo;
321         int ret = package_manager_clear_cache_dir(info->pkgid);
322         if (ret != 0) {
323                 SETTING_TRACE_ERROR("failed to invoke, ret = %d", ret);
324         } else {
325                 info->sz_cache = 0;
326                 appmgrUg_pkg_update_cache_size(ad);
327         }
328 }
329
330 void appmgrUg_pkg_moveto_cb(void *data, Evas_Object *obj,
331                             void *event_info)
332 {
333         SETTING_TRACE_BEGIN;
334         int ret;
335         appmgr_pkginfo *info;
336         SettingAppMgrUG *ad = data;
337
338         ret_if(NULL == data);
339         ret_if(NULL == ad->pkginfo);
340
341         info = ad->pkginfo;
342         if (ad->popup)
343                 evas_object_del(ad->popup);
344
345         ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
346                                                           NULL, MGRAPP_STR_MOVEING, appmgrUg_popup_del, 0, TRUE, TRUE);
347
348         ad->pkg_request = APPMGRUG_PKG_REQUEST_MOVE;
349
350         ret = pthread_create(&info->tid, NULL, appmgrUg_pkg_moveto_worker, ad);
351         if (ret) {
352                 SETTING_TRACE_ERROR("phread_create() Fail(%d)", ret);
353                 appmgrUg_fail_popup(MGRAPP_STR_MOVE_FAIL, ad);
354         }
355 }
356
357 static void appmgrUg_pkg_append_toolbar(Evas_Object *toolbar,
358                                         SettingAppMgrUG *ad)
359 {
360         SETTING_TRACE_BEGIN;
361         int ret, mmc;
362         char *btn_str;
363         appmgr_pkginfo *info;
364         Elm_Object_Item *tool_it;
365         const char *mmc_key = VCONFKEY_SYSMAN_MMC_STATUS;
366
367         ret_if(NULL == ad->pkginfo);
368
369         info = ad->pkginfo;
370
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;
375         }
376
377         /* Move to */
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);
381
382         if (PMINFO_INTERNAL_STORAGE == info->storage)
383                 btn_str = MGRAPP_STR_MOVE_TO_SD;
384         else
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);
390
391         /* Uninstall */
392         if (info->is_preload && info->is_updated)
393                 btn_str = MGRAPP_STR_UNINSTALL_UPDATES;
394         else
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);
399
400         if (!info->removable)
401                 elm_object_item_disabled_set(tool_it, EINA_TRUE);
402 }
403
404 static inline Evas_Object *appmgrUg_pkg_create_toolbar(Evas_Object *parent,
405                                                        SettingAppMgrUG *ad)
406 {
407         SETTING_TRACE_BEGIN;
408         Evas_Object *toolbar;
409
410         retv_if(NULL == ad, NULL);
411
412         toolbar = elm_toolbar_add(parent);
413
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);
418
419         appmgrUg_pkg_append_toolbar(toolbar, ad);
420
421         evas_object_show(toolbar);
422
423         return toolbar;
424 }
425
426 static void appmgrUg_pkg_append_genlist(SettingAppMgrUG *ad)
427 {
428         SETTING_TRACE_BEGIN;
429         Elm_Object_Item *item;
430
431         appmgrUg_append_separator(ad->gl_pkg, ad);
432
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);
437
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); */
441
442         appmgrUg_pkg_append_storage(ad);
443
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); */
447
448         appmgrUg_pkg_append_cache(ad);
449
450         appmgrUg_pkg_append_default(ad);
451 #if 0
452         appmgrUg_pkg_append_website(ad);
453 #endif
454
455         appmgrUg_pkg_append_privilege(ad);
456
457         appmgrUg_append_separator(ad->gl_pkg, ad);
458 }
459
460 static int appmgrUg_pkg_create(void *data)
461 {
462         SETTING_TRACE_BEGIN;
463         int ret;
464         Elm_Object_Item *navi_it;
465         SettingAppMgrUG *ad = data;
466
467         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
468
469         ret = appmgrUg_pkg_get_info(ad);
470         if (ret) {
471                 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
472                 appmgrUg_fail_popup(MGRAPP_STR_ERROR, ad);
473                 return -1;
474         }
475
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);
482
483         appmgrUg_pkg_append_genlist(ad);
484
485         if (ad->support_taskmanager && ad->pc_main == NULL) {
486
487                 SETTING_TRACE("Load pkginfo view");
488                 appmgrUg_pkgmgr_subscribe(ad);
489         }
490
491         setting_view_appmgr_pkginfo.is_create = 1;
492
493         return SETTING_RETURN_SUCCESS;
494 }
495
496 static int appmgrUg_pkg_destroy(void *data)
497 {
498         SETTING_TRACE_BEGIN;
499         SettingAppMgrUG *ad = data;
500
501         retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
502
503         if (ad->popup) {
504                 evas_object_del(ad->popup);
505                 ad->popup = NULL;
506         }
507         if (ad->pkginfo_getsize_timer) {
508                 ecore_timer_del(ad->pkginfo_getsize_timer);
509                 ad->pkginfo_getsize_timer = NULL;
510         }
511
512         if (ad->support_taskmanager && ad->pc_main != NULL) {
513
514                 SETTING_TRACE("Load pkginfo view");
515                 pkgmgr_client_free(ad->pc_main);
516                 ad->pc_main = NULL;
517         }
518
519         appmgrUg_pkg_free_pkginfo(ad->pkginfo);
520         ad->pkginfo = NULL;
521         ad->info_run = NULL;
522         ad->runinfos = NULL;
523
524         FREE(ad->sel_pkgid);
525         FREE(ad->sel_label);
526         FREE(ad->sel_icon);
527
528         setting_view_appmgr_pkginfo.is_create = 0;
529
530         return SETTING_RETURN_SUCCESS;
531 }
532
533 static int appmgrUg_pkg_update(void *data)
534 {
535         SETTING_TRACE_BEGIN;
536         int ret;
537         SettingAppMgrUG *ad = data;
538
539         retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
540
541         /*record old size info, need not re-get size info when update */
542         if (ad->pkginfo) {
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;
547         }
548
549         elm_genlist_clear(ad->gl_pkg);
550
551         appmgr_pkginfo *old_pkginfo = ad->pkginfo;
552         ad->pkginfo = NULL;
553
554         ret = appmgrUg_pkg_get_info(ad);
555         if (ret) {
556                 SETTING_TRACE_ERROR("appmgrUg_pkg_get_info() Fail", ret);
557                 elm_naviframe_item_pop(ad->navi);
558                 return -1;
559         }
560
561         /*appmgrUg_pkg_append_toolbar(NULL, ad); */
562         appmgrUg_pkg_append_genlist(ad);
563
564         appmgrUg_pkg_free_pkginfo(old_pkginfo);
565
566         return SETTING_RETURN_SUCCESS;
567 }
568
569 static int appmgrUg_pkg_cleanup(void *data)
570 {
571         return appmgrUg_pkg_destroy(data);
572 }
573
574 void appmgrUg_pkginfo_init(SettingAppMgrUG *ad)
575 {
576         ret_if(NULL == ad);
577         ret_if(ad->pkginfo_view);
578
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;
583
584         ad->pkginfo_view = &setting_view_appmgr_pkginfo;
585 }