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.
21 #include <setting-display-wallpaper.h>
24 static int setting_display_wallpaper_create(void *cb);
25 static int setting_display_wallpaper_destroy(void *cb);
26 static int setting_display_wallpaper_update(void *cb);
27 static int setting_display_wallpaper_cleanup(void *cb);
29 setting_view setting_view_display_wallpaper = {
30 .create = setting_display_wallpaper_create,
31 .destroy = setting_display_wallpaper_destroy,
32 .update = setting_display_wallpaper_update,
33 .cleanup = setting_display_wallpaper_cleanup,
37 /* ***************************************************
41 ***************************************************/
42 static void __setting_display_wallpaper_vconf_change_cb(keynode_t *key, void *data)
45 setting_retm_if(data == NULL, "Data parameter is NULL");
46 SettingDisplayUG *ad = (SettingDisplayUG *)data;
48 char *vconf_name = vconf_keynode_get_name(key);
50 if (!safeStrCmp(vconf_name, VCONFKEY_BGSET)) {
51 if (ad->cur_sel == WALLPAPER_CUR_SEL_LOCK_SCREEN) {
52 ad->cur_sel = WALLPAPER_CUR_SEL_HOME_AND_LOCK_SCREEN;
53 } else if (ad->cur_sel == WALLPAPER_CUR_SEL_NONE) {
54 ad->cur_sel = WALLPAPER_CUR_SEL_HOME_SCREEN;
58 } else if (!safeStrCmp(vconf_name, VCONFKEY_IDLE_LOCK_BGSET)) {
59 if (ad->cur_sel == WALLPAPER_CUR_SEL_HOME_SCREEN) {
60 ad->cur_sel = WALLPAPER_CUR_SEL_HOME_AND_LOCK_SCREEN;
61 } else if (ad->cur_sel == WALLPAPER_CUR_SEL_NONE) {
62 ad->cur_sel = WALLPAPER_CUR_SEL_LOCK_SCREEN;
69 static int __setting_display_wallpaper_listen_vconf_change(void *data)
73 ret = vconf_notify_key_changed(VCONFKEY_BGSET,
74 __setting_display_wallpaper_vconf_change_cb, data);
75 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)", (char *)VCONFKEY_BGSET, ret);
77 ret = vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_BGSET,
78 __setting_display_wallpaper_vconf_change_cb, data);
79 setting_retvm_if(ret < 0, ret, "%s notifications Failed(%d)", (char *)VCONFKEY_IDLE_LOCK_BGSET, ret);
83 static int __setting_display_wallpaper_unlisten_vconf_change()
86 (void)vconf_ignore_key_changed(VCONFKEY_BGSET,
87 __setting_display_wallpaper_vconf_change_cb);
88 (void)vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_BGSET,
89 __setting_display_wallpaper_vconf_change_cb);
93 static void __destroy_gallery_ug_cb(ui_gadget_h ug, void *priv)
96 setting_retm_if(priv == NULL, "Data parameter is NULL");
97 SettingDisplayUG *ad = (SettingDisplayUG *) priv; /* ad is point to priv */
101 ad->ug_loading = NULL;
104 /* restore the '<-' button on the navigate bar */
105 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
107 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
109 if (back_btn != NULL) {
110 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
113 char text[MAX_DISPLAY_NAME_LEN_ON_UI +1] = {0, };
114 SETTING_TRACE("cur_sel = %d", ad->cur_sel);
115 switch(ad->cur_sel) {
116 case WALLPAPER_CUR_SEL_HOME_SCREEN:
117 snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%s", SETTING_WALLPAPER_HOME_SCREEN_CHANGED);
119 case WALLPAPER_CUR_SEL_LOCK_SCREEN:
120 snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%s", SETTING_WALLPAPER_LOCK_SCREEN_CHANGED);
122 case WALLPAPER_CUR_SEL_HOME_AND_LOCK_SCREEN:
123 snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, "%s", SETTING_WALLPAPER_HOME_AND_LOCK_SCREEN_CHANGED);
126 ad->cur_sel = WALLPAPER_CUR_SEL_NONE;
130 setting_create_sel_info_popup(ad->view_layout,
131 &(ad->selInfoPop_layout),
133 elm_notify_timeout_set(ad->selInfoPop, 3);
135 edje_object_part_text_set(_EDJ(ad->selInfoPop_layout), "elm.text", text);
136 ad->cur_sel = WALLPAPER_CUR_SEL_NONE;
139 static void __setting_display_wallpaper_ug_launch(void *data)
142 setting_retm_if(data == NULL, "Data parameter is NULL");
143 SettingDisplayUG *ad = (SettingDisplayUG *) data;
146 if (service_create(&svc)) {
150 service_add_extra_data(svc, "launch-type", "select-setas");
151 service_add_extra_data(svc, "setas-type", "wallpaper");
152 service_add_extra_data(svc, "file-type", "image");
154 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
156 service_destroy(svc);
160 cbs->layout_cb = setting_display_layout_ug_cb;
161 cbs->result_cb = NULL;
162 cbs->destroy_cb = __destroy_gallery_ug_cb;
163 cbs->priv = (void *)ad;
165 ad->ug_loading = ug_create(ad->ug, "gallery-efl", UG_MODE_FULLVIEW, svc, cbs);
167 if (NULL == ad->ug_loading) { /* error handling */
168 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
169 setting_create_simple_popup(ad, ad->win_get, NULL, _(UNSUPPORTED_FUNCTION));
172 service_destroy(svc);
176 static void __setting_display_wallpaper_mouse_up_Gendial_list_cb(void *data, Evas_Object * obj, void *event_info)
179 setting_retm_if(data == NULL, "Data parameter is NULL");
180 setting_retm_if(event_info == NULL, "Invalid argument: event info is NULL");
182 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
183 elm_genlist_item_selected_set(item, 0);
184 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
186 SettingDisplayUG *ad = (SettingDisplayUG *) data;
188 if (!safeStrCmp("IDS_ST_MBODY_HOME_SCREEN_WALLPAPER", list_item->keyStr)) {
189 __setting_display_wallpaper_ug_launch(ad);
190 } else if (!safeStrCmp("IDS_ST_MBODY_LOCK_SCREEN_WALLPAPER_M_NOUN", list_item->keyStr)) {
191 __setting_display_wallpaper_ug_launch(ad);
192 } else if (!safeStrCmp(SETTING_WALLPAPER_HOME_AND_LOCK_SCREEN, list_item->keyStr)) {
193 __setting_display_wallpaper_ug_launch(ad);
200 static int setting_display_wallpaper_create(void *cb)
203 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
205 SettingDisplayUG *ad = (SettingDisplayUG *) cb; /* ad is point to cb */
206 ad->cur_sel = WALLPAPER_CUR_SEL_NONE;
208 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
209 elm_layout_file_set(view_layout, SETTING_THEME_EDJ_NAME, "selinfo_bottom");
210 evas_object_size_hint_weight_set(view_layout, EVAS_HINT_EXPAND, 0.0);
211 ad->view_layout = view_layout;
213 Evas_Object *controllbar = NULL;
214 Evas_Object *scroller = NULL;
216 ad->ly_wall = setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
218 _("IDS_COM_BODY_BACK"), NULL, NULL,
219 setting_display_wallpaper_click_softkey_cancel_cb,
220 NULL, NULL, ad, view_layout,
221 &ad->navi_bar, &controllbar);
223 scroller = elm_genlist_add(ad->navi_bar);
224 elm_object_style_set(scroller, "dialogue");
225 retvm_if(scroller == NULL, SETTING_RETURN_FAIL, "Cannot set scroller object as contento of layout");
226 elm_genlist_clear(scroller); /* first to clear list */
227 elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
229 Elm_Object_Item *item = NULL;
230 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
231 ELM_GENLIST_ITEM_NONE, NULL, NULL);
232 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
234 ad->data_home_screen =
235 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
236 __setting_display_wallpaper_mouse_up_Gendial_list_cb,
237 ad, SWALLOW_Type_INVALID, NULL,
238 NULL, 0, "IDS_ST_MBODY_HOME_SCREEN_WALLPAPER",
240 if (ad->data_home_screen) {
241 ad->data_home_screen->userdata = ad;
243 SETTING_TRACE_ERROR("ad->screen_reader is NULL");
244 return SETTING_RETURN_FAIL;
247 ad->data_lock_screen =
248 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
249 __setting_display_wallpaper_mouse_up_Gendial_list_cb,
250 ad, SWALLOW_Type_INVALID, NULL,
251 NULL, 0, "IDS_ST_MBODY_LOCK_SCREEN_WALLPAPER_M_NOUN",
253 if (ad->data_lock_screen) {
254 ad->data_lock_screen->userdata = ad;
256 SETTING_TRACE_ERROR("ad->screen_reader is NULL");
257 return SETTING_RETURN_FAIL;
260 ad->data_home_lock_screen =
261 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
262 __setting_display_wallpaper_mouse_up_Gendial_list_cb,
263 ad, SWALLOW_Type_INVALID, NULL,
264 NULL, 0, SETTING_WALLPAPER_HOME_AND_LOCK_SCREEN,
266 if (ad->data_home_lock_screen) {
267 ad->data_home_lock_screen->userdata = ad;
269 SETTING_TRACE_ERROR("ad->screen_reader is NULL");
270 return SETTING_RETURN_FAIL;
273 setting_view_display_wallpaper.is_create = 1;
274 __setting_display_wallpaper_listen_vconf_change(ad);
275 return SETTING_RETURN_SUCCESS;
278 static int setting_display_wallpaper_destroy(void *cb)
282 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
284 SettingDisplayUG *ad = (SettingDisplayUG *) cb; /* ad is point to cb */
285 __setting_display_wallpaper_unlisten_vconf_change();
287 if (ad->selInfoPop) {
288 evas_object_del(ad->selInfoPop);
289 ad->selInfoPop = NULL;
292 if (ad->ly_wall != NULL) {
293 evas_object_del(ad->ly_wall);
296 setting_view_display_wallpaper.is_create = 0;
298 return SETTING_RETURN_SUCCESS;
301 static int setting_display_wallpaper_update(void *cb)
303 return SETTING_RETURN_SUCCESS;
306 static int setting_display_wallpaper_cleanup(void *cb)
309 return SETTING_RETURN_SUCCESS;
312 /* ***************************************************
316 ***************************************************/
318 /* ***************************************************
322 ***************************************************/
325 setting_display_wallpaper_click_softkey_cancel_cb(void *data, Evas_Object *obj,
330 retm_if(data == NULL, "Data parameter is NULL");
331 SettingDisplayUG *ad = (SettingDisplayUG *) data; /* ad is point to cb */
333 /* called when this shared gadget is terminated. similar with app_exit */
334 /* Send destroy request */
335 ug_destroy_me(ad->ug);