4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <setting-applications-defaultapp.h>
23 #include <dbus/dbus.h>
24 #include <dbus/dbus-glib-lowlevel.h>
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);
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);
35 static gboolean setting_applications_create_homescreen_setting_ug(void *data);
36 static char *setting_application_get_defaultapp_name(const char *appid);
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,
44 /* ***************************************************
48 ***************************************************/
49 static char *setting_application_get_defaultapp_name(const char *appid)
52 int ret = PMINFO_R_ERROR;
54 char *ret_name = NULL;
55 pkgmgrinfo_appinfo_h handle;
57 SETTING_TRACE_ERROR("invalid appid");
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);
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);
72 pkgmgrinfo_appinfo_destroy_appinfo(handle);
75 ret_name = strdup(name);
76 pkgmgrinfo_appinfo_destroy_appinfo(handle);
80 void construct_defaultapp(void *data, Evas_Object *genlist)
84 SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
86 char *appid = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
87 char *sub_desc = setting_application_get_defaultapp_name(appid);
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,
95 ad->data_home->userdata = ad;
96 __BACK_POINTER_SET(ad->data_home);
98 SETTING_TRACE_ERROR("ad->data_home is NULL");
102 void destruct_defaultapp(void *data)
105 ret_if(data == NULL);
107 SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
109 evas_object_del(ad->popup);
115 static void setting_applications_defaultapp_vconf_change_cb(keynode_t *key, void *data)
117 ret_if(data == NULL);
119 SettingApplicationsUG *ad = data;
122 //status = vconf_keynode_get_string(key);
123 char *vconf_name = vconf_keynode_get_name(key);
124 //SETTING_TRACE("status:%d", status);
126 if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME)) {
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);
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);
143 static int setting_applications_defaultapp_create(void *cb)
146 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
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 */
156 setting_push_layout_navi_bar(KeyStr_DefaultApplications,
157 _("IDS_ST_BUTTON_BACK"), NULL, NULL,
158 setting_applications_defaultapp_click_softkey_cancel_cb,
160 NULL, ad, genlist, ad->navi_bar, NULL);
162 /*ad->genlist = genlist; */
163 evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, ad);
165 construct_defaultapp(ad, genlist);/*------- */
167 int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME,
168 setting_applications_defaultapp_vconf_change_cb, ad);
170 // org.tizen.homescreen-efl : homescreen-efl
171 // org.tizen.homescreen : Homescreen
172 // org.tizen.menu-screen : Simple Menu-screen
174 setting_view_applications_defaultapp.is_create = 1;
175 return SETTING_RETURN_SUCCESS;
178 static int setting_applications_defaultapp_destroy(void *cb)
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);
186 destruct_defaultapp(cb);/*------- */
188 SettingApplicationsUG *ad = (SettingApplicationsUG *) cb;
191 vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME,
192 setting_applications_defaultapp_vconf_change_cb);
194 setting_view_applications_defaultapp.is_create = 0;
195 elm_naviframe_item_pop(ad->navi_bar);
197 return SETTING_RETURN_SUCCESS;
200 static int setting_applications_defaultapp_update(void *cb)
203 return SETTING_RETURN_SUCCESS;
207 static int setting_applications_defaultapp_cleanup(void *cb)
211 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
212 setting_applications_defaultapp_destroy(cb);
214 return SETTING_RETURN_SUCCESS;
217 /* ***************************************************
221 ***************************************************/
223 /* ***************************************************
227 ***************************************************/
230 setting_applications_defaultapp_click_softkey_cancel_cb(void *data,
236 retm_if(data == NULL, "Data parameter is NULL");
237 SettingApplicationsUG *ad = (SettingApplicationsUG *) data;
239 setting_view_change(&setting_view_applications_defaultapp,
240 &setting_view_applications_main, ad);
243 void setting_applications_defaultapp_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj, void *event_info)
247 setting_retm_if(data == NULL, "Data parameter is NULL");
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);
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);
264 static void setting_applications_destroy_homescreen_setting_ug_cb(ui_gadget_h ug, void *priv)
267 ret_if(priv == NULL);
268 SettingApplicationsUG *ad = (SettingApplicationsUG *) priv;
270 setting_ug_destroy(ug);
271 ad->ug_homescreen = NULL;
273 elm_genlist_realized_items_update(ad->genlist);
276 static gboolean setting_applications_create_homescreen_setting_ug(void *data)
280 retv_if(data == NULL, FALSE);
282 SettingApplicationsUG *ad = (SettingApplicationsUG *) data; /* ad is point to data */
284 if (ad->ug_homescreen) {
285 SETTING_TRACE("Font UG is already loaded.");
288 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
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;
298 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
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);