6aba67445ef73db2c4d1726dc7e14a93e27fcf93
[apps/home/settings.git] / setting-applications / src / setting-applications-defaultapp.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <setting-applications-defaultapp.h>
23 #include <dbus/dbus.h>
24 #include <dbus/dbus-glib-lowlevel.h>
25
26
27 static int setting_applications_defaultapp_create(void *cb);
28 static int setting_applications_defaultapp_destroy(void *cb);
29 static int setting_applications_defaultapp_update(void *cb);
30 static int setting_applications_defaultapp_cleanup(void *cb);
31
32 static void setting_applications_defaultapp_click_softkey_cancel_cb(void *data, Evas_Object *obj, void *event_info);
33 static void setting_applications_defaultapp_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info);
34
35 static gboolean setting_applications_create_homescreen_setting_ug(void *data);
36 static char *setting_application_get_defaultapp_name(const char *appid);
37
38 setting_view setting_view_applications_defaultapp = {
39         .create = setting_applications_defaultapp_create,
40         .destroy = setting_applications_defaultapp_destroy,
41         .update = setting_applications_defaultapp_update,
42         .cleanup = setting_applications_defaultapp_cleanup,
43 };
44 /* ***************************************************
45  *
46  *basic func
47  *
48  ***************************************************/
49 static char *setting_application_get_defaultapp_name(const char *appid)
50 {
51         SETTING_TRACE_BEGIN;
52         int ret = PMINFO_R_ERROR;
53         char *name = NULL;
54         char *ret_name = NULL;
55         pkgmgrinfo_appinfo_h handle;
56         if (!appid) {
57                 SETTING_TRACE_ERROR("invalid appid");
58                 return NULL;
59         }
60         ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
61         if (ret != PMINFO_R_OK) {
62                 SETTING_TRACE_ERROR("Failed[%d] ail_get_appinfo(%s)", ret, appid);
63                 return NULL;
64         }
65         ret = pkgmgrinfo_appinfo_get_label(handle, &name);
66         if (ret != PMINFO_R_OK) {
67                 SETTING_TRACE_ERROR("Failed ail_appinfo_get_str(%s) : %d", appid, ret);
68                 pkgmgrinfo_appinfo_destroy_appinfo(handle);
69                 return NULL;
70         }
71         if (!name) {
72                 pkgmgrinfo_appinfo_destroy_appinfo(handle);
73                 return NULL;
74         }
75         ret_name = strdup(name);
76         pkgmgrinfo_appinfo_destroy_appinfo(handle);
77         return ret_name;
78 }
79
80 void construct_defaultapp(void *data, Evas_Object *genlist)
81 {
82         SETTING_TRACE_BEGIN;
83         ret_if(data == NULL);
84         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
85
86         char *appid = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
87         char *sub_desc = setting_application_get_defaultapp_name(appid);
88         ad->data_home =
89             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
90                                              setting_applications_defaultapp_mouse_up_Gendial_list_cb,
91                                              ad, SWALLOW_Type_INVALID, NULL,
92                                              NULL, 0, KeyStr_Home,
93                                              sub_desc, NULL);
94         if (ad->data_home) {
95                 ad->data_home->userdata = ad;
96                 __BACK_POINTER_SET(ad->data_home);
97         } else {
98                 SETTING_TRACE_ERROR("ad->data_home is NULL");
99         }
100 }
101
102 void destruct_defaultapp(void *data)
103 {
104         SETTING_TRACE_BEGIN;
105         ret_if(data == NULL);
106 #if 0
107         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
108         if (ad->popup) {
109                 evas_object_del(ad->popup);
110                 ad->popup = NULL;
111         }
112 #endif
113 }
114
115 static void setting_applications_defaultapp_vconf_change_cb(keynode_t *key, void *data)
116 {
117         ret_if(data == NULL);
118
119         SettingApplicationsUG *ad = data;
120         int status = 0;
121
122         //status = vconf_keynode_get_string(key);
123         char *vconf_name = vconf_keynode_get_name(key);
124         //SETTING_TRACE("status:%d", status);
125
126         if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME)) {
127                 if (ad->data_home) {
128                         G_FREE(ad->data_home->sub_desc);
129                         //ad->data_home->sub_desc = get_pa_backlight_time_value_str();
130                         char* pkgname = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
131
132                         // pkgname --> label
133                         char * label = setting_application_get_defaultapp_name(pkgname);
134                         ad->data_home->sub_desc = label;
135                         elm_object_item_data_set(ad->data_home->item, ad->data_home);
136                         elm_genlist_item_update(ad->data_home->item);
137                 }
138         }
139 }
140
141
142
143 static int setting_applications_defaultapp_create(void *cb)
144 {
145         SETTING_TRACE_BEGIN;
146         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
147
148         SettingApplicationsUG *ad = (SettingApplicationsUG *) cb;
149         Evas_Object *genlist = elm_genlist_add(ad->win_main_layout);
150         retvm_if(genlist == NULL, SETTING_RETURN_FAIL, "Cannot set scroller object as contento of layout");
151         /*elm_object_style_set(genlist, "dialogue"); */
152         elm_genlist_realization_mode_set(genlist, EINA_TRUE);
153         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
154         elm_genlist_clear(genlist);     /* first to clear list */
155
156         setting_push_layout_navi_bar(KeyStr_DefaultApplications,
157                                      _("IDS_ST_BUTTON_BACK"), NULL, NULL,
158                                      setting_applications_defaultapp_click_softkey_cancel_cb,
159                                      NULL,
160                                      NULL, ad, genlist, ad->navi_bar, NULL);
161
162         /*ad->genlist = genlist; */
163         evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, ad);
164
165         construct_defaultapp(ad, genlist);/*------- */
166         // ad->data_home
167         int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME,
168                                        setting_applications_defaultapp_vconf_change_cb, ad);
169
170         // org.tizen.homescreen-efl : homescreen-efl
171         // org.tizen.homescreen     : Homescreen
172         // org.tizen.menu-screen : Simple Menu-screen
173
174         setting_view_applications_defaultapp.is_create = 1;
175         return SETTING_RETURN_SUCCESS;
176 }
177
178 static int setting_applications_defaultapp_destroy(void *cb)
179 {
180         SETTING_TRACE_BEGIN;
181
182         /* error check */
183         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
184         retv_if(!(setting_view_applications_defaultapp.is_create), SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
185
186         destruct_defaultapp(cb);/*------- */
187
188         SettingApplicationsUG *ad = (SettingApplicationsUG *) cb;
189
190
191         vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME,
192                                        setting_applications_defaultapp_vconf_change_cb);
193
194         setting_view_applications_defaultapp.is_create = 0;
195         elm_naviframe_item_pop(ad->navi_bar);
196
197         return SETTING_RETURN_SUCCESS;
198 }
199
200 static int setting_applications_defaultapp_update(void *cb)
201 {
202         SETTING_TRACE_BEGIN;
203         return SETTING_RETURN_SUCCESS;
204
205 }
206
207 static int setting_applications_defaultapp_cleanup(void *cb)
208 {
209         SETTING_TRACE_BEGIN;
210         /* error check */
211         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
212         setting_applications_defaultapp_destroy(cb);
213
214         return SETTING_RETURN_SUCCESS;
215 }
216
217 /* ***************************************************
218  *
219  *general func
220  *
221  ***************************************************/
222
223 /* ***************************************************
224  *
225  *call back func
226  *
227  ***************************************************/
228
229 static void
230 setting_applications_defaultapp_click_softkey_cancel_cb(void *data,
231                                                         Evas_Object *obj,
232                                                         void *event_info)
233 {
234         SETTING_TRACE_BEGIN;
235         /* error check */
236         retm_if(data == NULL, "Data parameter is NULL");
237         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
238
239         setting_view_change(&setting_view_applications_defaultapp,
240                             &setting_view_applications_main, ad);
241 }
242
243 void setting_applications_defaultapp_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info)
244 {
245         SETTING_TRACE_BEGIN;
246         /* error check */
247         setting_retm_if(data == NULL, "Data parameter is NULL");
248
249         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
250         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
251         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
252         elm_genlist_item_selected_set(item, 0);
253         Setting_GenGroupItem_Data *list_item =
254             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
255
256         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
257         /*SETTING_TRACE("chk_status[%d]", list_item->chk_status); */
258         if (!safeStrCmp(KeyStr_Home, list_item->keyStr)) {
259                 SETTING_TRACE("click Home and run UG");
260                 setting_applications_create_homescreen_setting_ug(ad);
261         }
262 }
263
264 static void setting_applications_destroy_homescreen_setting_ug_cb(ui_gadget_h ug, void *priv)
265 {
266         SETTING_TRACE_BEGIN;
267         ret_if(priv == NULL);
268         SettingApplicationsUG *ad = (SettingApplicationsUG *) priv;
269         if (ug) {
270                 setting_ug_destroy(ug);
271                 ad->ug_homescreen = NULL;
272         }
273         elm_genlist_realized_items_update(ad->genlist);
274 }
275
276 static gboolean setting_applications_create_homescreen_setting_ug(void *data)
277 {
278         SETTING_TRACE_BEGIN;
279         /* error check */
280         retv_if(data == NULL, FALSE);
281
282         SettingApplicationsUG *ad = (SettingApplicationsUG *) data;     /* ad is point to data */
283
284         if (ad->ug_homescreen) {
285                 SETTING_TRACE("Font UG is already loaded.");
286                 return FALSE;
287         }
288         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
289
290         if (!cbs) {
291                 return FALSE;
292         }
293         cbs->layout_cb = setting_applications_layout_ug_cb;
294         cbs->result_cb = NULL;
295         cbs->destroy_cb = setting_applications_destroy_homescreen_setting_ug_cb;
296         cbs->priv = (void *)ad;
297
298         elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
299
300         ad->ug_homescreen = setting_ug_create(ad->ug, "setting-homescreen-efl", UG_MODE_FULLVIEW, NULL, cbs);
301         if (NULL == ad->ug_homescreen) {        /* error handling */
302                 SETTING_TRACE_ERROR("NULL == ad->ug_homescreen");
303                 evas_object_show(ad->ly_main);
304         }
305         FREE(cbs);
306
307         return TRUE;
308 }
309
310