857434e78811ce15e51292c892a5392548aa6dc9
[apps/core/preloaded/settings.git] / setting-profile / src / setting-profile-sound-main.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 #include <setting-profile-sound-main.h>
22
23 #define VOLUME_STR                      _("IDS_ST_SK_VOLUME")
24 #define RINGTONE_STR            _("IDS_COM_BODY_RINGTONES")
25
26 #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG"
27
28 static int setting_profile_sound_main_create(void *cb);
29 static int setting_profile_sound_main_destroy(void *cb);
30 static int setting_profile_sound_main_update(void *cb);
31 static int setting_profile_sound_main_cleanup(void *cb);
32
33 static void setting_profile_layout_ug_cb(ui_gadget_h ug,
34                                          enum ug_mode mode, void *priv);
35
36 setting_view setting_view_profile_sound_main = {
37         .create = setting_profile_sound_main_create,
38         .destroy = setting_profile_sound_main_destroy,
39         .update = setting_profile_sound_main_update,
40         .cleanup = setting_profile_sound_main_cleanup,
41 };
42
43 /* ***************************************************
44  *
45  *basic func
46  *
47  ***************************************************/
48 void __change_state_of_sliderbars(void *data)
49 {
50         ret_if(data == NULL);
51         SettingProfileUG *ad = (SettingProfileUG *) data;
52
53         int sound_on = TRUE;
54         int vibration_on = TRUE;
55
56         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_on) == 0) {
57                 if (sound_on == FALSE) {
58                         /*  disable slider bar of call ringtone, notification, media, and system volume */
59                         if (ad->data_call_volume) {
60                                 setting_disable_genlist_item(ad->data_call_volume->item);
61                         }
62                         if (ad->data_noti_volume) {
63                                 setting_disable_genlist_item(ad->data_noti_volume->item);
64                         }
65                         if (ad->data_media_volume) {
66                                 setting_disable_genlist_item(ad->data_media_volume->item);
67                         }
68                         if (ad->data_touch_volume) {
69                                 setting_disable_genlist_item(ad->data_touch_volume->item);
70                         }
71                 }
72         }
73
74         if (vconf_get_bool
75             (VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration_on) == 0) {
76                 if (vibration_on == FALSE) {
77                         /*  disable slider bar of notification and system vibration */
78                         if (ad->data_vib_volume) {
79                                 setting_disable_genlist_item(ad->data_vib_volume->item);
80                         }
81                         if (ad->data_touch_vib) {
82                                 setting_disable_genlist_item(ad->data_touch_vib->item);
83                         }
84                 }
85         }
86 }
87
88 void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
89 {
90         /* error check */
91         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
92         retm_if(data == NULL, "Invalid argument: data is NULL");
93
94         SettingProfileUG *ad = (SettingProfileUG *) data;
95         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
96         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
97         elm_genlist_item_selected_set(subitem, 0);
98         Setting_GenGroupItem_Data *data_subItem =
99             elm_object_item_data_get(subitem);
100         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
101         if (NULL == data_subItem || NULL == data_parentItem)
102                 return;
103
104         elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
105         int err;
106         setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
107                                 data_subItem->chk_status, &err);
108
109         if (data_parentItem) {
110                 data_parentItem->sub_desc =
111                     (char *)g_strdup(_(data_subItem->keyStr));
112                 elm_object_item_data_set(data_parentItem->item, data_parentItem);
113                 elm_genlist_item_update(data_parentItem->item);
114         }
115
116         if (data_parentItem->int_slp_setting_binded ==
117             INT_SLP_SETTING_CALL_ALERT_VIB) {
118                 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
119                         SETTING_TRACE("ERROR device_haptic_stop_play");
120                         /* return; */
121                 }
122                 setting_profile_play_vibration(ad,
123                                                setting_profile_get_call_playing_vib_by_vconf_value
124                                                (data_subItem->chk_status));
125         }
126 }
127
128 static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info)
129 {
130         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
131         retm_if(data == NULL, "Invalid argument: data is NULL");
132
133         SettingProfileUG *ad = (SettingProfileUG *) data;
134         Elm_Object_Item *parentItem = event_info;       /* parent item */
135         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
136         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
137
138         Evas_Object *rgd;
139         if (data_parentItem == ad->data_call_alert_vib) {
140                 rgd = elm_radio_add(scroller);
141                 elm_radio_value_set(rgd, -1);
142                 setting_create_Gendial_exp_sub_field(scroller,
143                                                      &(ad->itc_1icon_1text_sub),
144                                                      __sound_sub_list_sel_cb,
145                                                      ad, parentItem,
146                                                      SWALLOW_Type_1RADIO, rgd,
147                                                      0,
148                                                      "IDS_ST_BODY_VIBRATION_1",
149                                                      NULL);
150
151                 setting_create_Gendial_exp_sub_field(scroller,
152                                                      &(ad->itc_1icon_1text_sub),
153                                                      __sound_sub_list_sel_cb,
154                                                      ad, parentItem,
155                                                      SWALLOW_Type_1RADIO, rgd,
156                                                      1,
157                                                      "IDS_ST_BODY_VIBRATION_2",
158                                                      NULL);
159
160                 setting_create_Gendial_exp_sub_field(scroller,
161                                                      &(ad->itc_1icon_1text_sub),
162                                                      __sound_sub_list_sel_cb,
163                                                      ad, parentItem,
164                                                      SWALLOW_Type_1RADIO, rgd,
165                                                      2,
166                                                      "IDS_ST_BODY_VIBRATION_3",
167                                                      NULL);
168
169                 setting_update_chk_status(rgd,
170                                           data_parentItem->
171                                           int_slp_setting_binded);
172
173         } else if (data_parentItem == ad->data_msg_alert_repeat
174                    || data_parentItem == ad->data_email_alert_repeat) {
175                 rgd = elm_radio_add(scroller);
176                 elm_radio_value_set(rgd, -1);
177                 setting_create_Gendial_exp_sub_field(scroller,
178                                                      &(ad->itc_1icon_1text_sub),
179                                                      __sound_sub_list_sel_cb,
180                                                      ad, parentItem,
181                                                      SWALLOW_Type_1RADIO, rgd,
182                                                      0,
183                                                      SETTING_SOUND_TEXT_REPEAT_ONCE,
184                                                      NULL);
185
186                 setting_create_Gendial_exp_sub_field(scroller,
187                                                      &(ad->itc_1icon_1text_sub),
188                                                      __sound_sub_list_sel_cb,
189                                                      ad, parentItem,
190                                                      SWALLOW_Type_1RADIO, rgd,
191                                                      1,
192                                                      SETTING_SOUND_TEXT_REPEAT_2MIN,
193                                                      NULL);
194
195                 setting_create_Gendial_exp_sub_field(scroller,
196                                                      &(ad->itc_1icon_1text_sub),
197                                                      __sound_sub_list_sel_cb,
198                                                      ad, parentItem,
199                                                      SWALLOW_Type_1RADIO, rgd,
200                                                      2,
201                                                      SETTING_SOUND_TEXT_REPEAT_5MIN,
202                                                      NULL);
203                 setting_create_Gendial_exp_sub_field(scroller,
204                                                      &(ad->itc_1icon_1text_sub),
205                                                      __sound_sub_list_sel_cb,
206                                                      ad, parentItem,
207                                                      SWALLOW_Type_1RADIO, rgd,
208                                                      3,
209                                                      SETTING_SOUND_TEXT_REPEAT_10MIN,
210                                                      NULL);
211
212                 setting_update_chk_status(rgd,
213                                           data_parentItem->
214                                           int_slp_setting_binded);
215         }
216 }
217
218 static void __mm_player_msg_cb(void *user_param)
219 {
220         ret_if(user_param == NULL);
221         SettingProfileUG *ad = (SettingProfileUG *)user_param;
222         /*switch(message)
223         {
224                 case MM_MESSAGE_END_OF_STREAM:
225                         SETTING_TRACE_DEBUG("End of Stream");
226                         setting_profile_close_all_mm_players(ad);
227                         return TRUE;
228                 default:
229                         return FALSE;
230         }*/
231         SETTING_TRACE("completed_cb is called.");
232         setting_profile_close_all_mm_players(ad);
233 }
234
235 void __ringtone_start_change_cb(void *data, Evas_Object *obj, void *event_info)
236 {
237         ret_if(data == NULL);
238
239         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
240         SettingProfileUG *ad = list_item->userdata;
241
242         ad->cur_vol_type = SETTING_VOL_TYPE_RINGTONE;
243         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
244 }
245 void __noti_start_change_cb(void *data, Evas_Object *obj, void *event_info)
246 {
247         ret_if(data == NULL);
248
249         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
250         SettingProfileUG *ad = list_item->userdata;
251
252         ad->cur_vol_type = SETTING_VOL_TYPE_NOTIFICATION;
253         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_NOTIFICATION);
254 }
255 void __media_start_change_cb(void *data, Evas_Object *obj, void *event_info)
256 {
257         ret_if(data == NULL);
258
259         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
260         SettingProfileUG *ad = list_item->userdata;
261
262         ad->cur_vol_type = SETTING_VOL_TYPE_MEDIA;
263         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_MEDIA);
264 }
265 void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info)
266 {
267         ret_if(data == NULL);
268
269         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
270         SettingProfileUG *ad = list_item->userdata;
271
272         ad->cur_vol_type = SETTING_VOL_TYPE_SYSTEM;
273         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_SYSTEM);
274 }
275
276 void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
277 {
278         SETTING_TRACE_BEGIN;
279         ret_if(data == NULL);
280
281         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
282         SettingProfileUG *ad = list_item->userdata;
283
284         char    *pa_tone_path = NULL;
285         player_h **player = NULL;
286
287         double   value = elm_slider_value_get(obj);
288
289         switch(ad->cur_vol_type)
290         {
291                 case SETTING_VOL_TYPE_RINGTONE:
292                         sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)(value+0.5));
293                         player = &(ad->mp_ringtone);
294                         if(*player != NULL)
295                                 return;
296                         SETTING_TRACE_DEBUG("ringtone player will be created");
297                         pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
298                         if(pa_tone_path == NULL)
299                         {
300                                 pa_tone_path = SETTING_DEFAULT_CALL_TONE;
301
302                                 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0)
303                                         return;
304                         }
305                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
306                                                         pa_tone_path,
307                                                         (float)value,
308                                                         SOUND_TYPE_RINGTONE);
309                         break;
310                 case SETTING_VOL_TYPE_NOTIFICATION:
311                         sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
312                         player = &(ad->mp_noti);
313                         if(*player != NULL)
314                                 return;
315                         SETTING_TRACE_DEBUG("noti player will be created");
316                         pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
317                         if(pa_tone_path == NULL)
318                         {
319                                 pa_tone_path = SETTING_DEFAULT_MSG_TONE;
320                                 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0)
321                                         return;
322                         }
323                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
324                                                         pa_tone_path,
325                                                         (float)value,
326                                                         SOUND_TYPE_NOTIFICATION);
327                         break;
328                 case SETTING_VOL_TYPE_MEDIA:
329                         sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)(value+0.5));
330                         player = &(ad->mp_media);
331                         if(*player != NULL)
332                                 return;
333                         SETTING_TRACE_DEBUG("media player will be created");
334                         pa_tone_path = (char*)strdup(SETTING_DEFAULT_MEDIA_TONE);
335
336                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
337                                                         pa_tone_path,
338                                                         (float)value,
339                                                         SOUND_TYPE_MEDIA);
340                         break;
341                 case SETTING_VOL_TYPE_SYSTEM:
342                         sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)(value+0.5));
343                         player = &(ad->mp_sys);
344                         if(*player != NULL)
345                                 return;
346                         SETTING_TRACE_DEBUG("ringtone player will be created");
347                         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
348                         svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
349
350                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
351                                                         pattern_file,
352                                                         (float)value,
353                                                         SOUND_TYPE_SYSTEM);
354                         break;
355                 default:
356                 return;
357         }
358
359         FREE(pa_tone_path);
360
361         SETTING_TRACE_END;
362 }
363
364 static Evas_Object *__get_main_list(void *data)
365 {
366         retv_if(data == NULL, NULL);
367
368         SettingProfileUG *ad = (SettingProfileUG *) data;
369
370         if(ad->sub_view[SETTING_PROF_VIEW_VOL])
371                 return ad->sub_view[SETTING_PROF_VIEW_VOL];
372
373         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
374         elm_object_style_set(genlist, "dialogue");
375         retvm_if(genlist == NULL, NULL,
376                  "Cannot set genlist object as contento of layout");
377         elm_genlist_clear(genlist);     /* first to clear list */
378
379         int vconf_value = 0;
380         int mm_value = 0;
381
382         Elm_Object_Item *item = elm_genlist_item_append(genlist,
383                                                                 &(ad->itc_seperator), NULL, NULL,
384                                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
385         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
386
387         /* a.use sound */
388         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
389                 vconf_value = TRUE;     /*  default value of sound : on */
390         ad->data_sound =
391             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
392                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
393                                              ad, SWALLOW_Type_1TOGGLE, NULL,
394                                              NULL, vconf_value,
395                                              SETTING_SOUND_TEXT_SOUND, NULL,
396                                              setting_profile_sound_main_Gendial_chk_cb);
397         if (ad->data_sound) {
398                 ad->data_sound->userdata = ad;
399         } else {
400                 SETTING_TRACE_ERROR("ad->data_sound is NULL");
401         }
402
403         (void)setting_create_Gendial_field_titleItem(genlist,
404                                                      &(ad->itc_group_item),
405                                                      "IDS_ST_BODY_VOLUME", NULL);
406
407         /* d.call volumn. */
408         if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
409                 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
410         ad->data_call_volume =
411             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
412                                              NULL,
413                                              SWALLOW_Type_LAYOUT_SLIDER,
414                                              IMG_SLIDER_BTN_VOLUME01,
415                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
416                                              SETTING_SOUND_TEXT_INCOMING_CALL,
417                                              NULL,
418                                              setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
419         if (ad->data_call_volume) {
420                 ad->data_call_volume->win_main = ad->win_main_layout;
421                 ad->data_call_volume->evas = ad->evas;
422                 ad->data_call_volume->isIndicatorVisible = true;
423                 ad->data_call_volume->slider_min = 0;
424                 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
425                 ad->data_call_volume->userdata = ad;
426                 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
427                 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
428                 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
429         } else {
430                 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
431         }
432
433         /* e.noti volumn */
434         if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
435                 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
436         ad->data_noti_volume =
437             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
438                                              NULL,
439                                              SWALLOW_Type_LAYOUT_SLIDER,
440                                              IMG_SLIDER_BTN_VOLUME01,
441                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
442                                              SETTING_SOUND_TEXT_NOTIFICATION,
443                                              NULL,
444                                              setting_profile_sound_main_noti_sound_slider_value_change_cb);
445         if (ad->data_noti_volume) {
446                 ad->data_noti_volume->win_main = ad->win_main_layout;
447                 ad->data_noti_volume->evas = ad->evas;
448                 ad->data_noti_volume->isIndicatorVisible = true;
449                 ad->data_noti_volume->slider_min = 0;
450                 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
451                 ad->data_noti_volume->userdata = ad;
452                 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
453                 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
454                 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
455         } else {
456                 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
457         }
458
459         /* g.media volume */
460         if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
461                 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
462         ad->data_media_volume =
463             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
464                                              NULL,
465                                              SWALLOW_Type_LAYOUT_SLIDER,
466                                              IMG_SLIDER_BTN_VOLUME01,
467                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
468                                              SETTING_SOUND_TEXT_MEDIA, NULL,
469                                              setting_profile_sound_main_media_sound_slider_value_change_cb);
470         if (ad->data_media_volume) {
471                 ad->data_media_volume->win_main = ad->win_main_layout;
472                 ad->data_media_volume->evas = ad->evas;
473                 ad->data_media_volume->isIndicatorVisible = true;
474                 ad->data_media_volume->slider_min = 0;
475                 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
476                 ad->data_media_volume->userdata = ad;
477                 ad->data_media_volume->start_change_cb = __media_start_change_cb;
478                 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
479                 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
480         } else {
481                 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
482         }
483
484         /* h.system volume */
485         if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
486                 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
487         ad->data_touch_volume =
488             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
489                                              NULL,
490                                              SWALLOW_Type_LAYOUT_SLIDER,
491                                              IMG_SLIDER_BTN_VOLUME01,
492                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
493                                              SETTING_SOUND_TEXT_SYSTEM, NULL,
494                                              settings_profile_sound_main_sys_sound_slider_value_change_cb);
495         if (ad->data_touch_volume) {
496                 ad->data_touch_volume->win_main = ad->win_main_layout;
497                 ad->data_touch_volume->evas = ad->evas;
498                 ad->data_touch_volume->isIndicatorVisible = true;
499                 ad->data_touch_volume->slider_min = 0;
500                 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
501                 ad->data_touch_volume->userdata = ad;
502                 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
503                 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
504                 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
505         } else {
506                 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
507         }
508
509         setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
510                                          NULL, ad,
511                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
512                                          NULL, NULL, 0, SOUND_DESC, NULL, NULL);
513         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
514                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
515
516         /* Touch sounds */
517         ad->data_touch_sounds =
518             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
519                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
520                                              ad, SWALLOW_Type_1TOGGLE, NULL,
521                                              NULL, vconf_value,
522                                              "IDS_ST_BODY_TOUCH_SOUNDS",
523                                              NULL,
524                                              setting_profile_sound_main_Gendial_chk_cb);
525         if (ad->data_touch_sounds) {
526                 ad->data_touch_sounds->userdata = ad;
527         } else {
528                 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
529         }
530
531         setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
532                                          NULL, ad,
533                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
534                                          NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
535         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
536                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
537
538         item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
539                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
540         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
541
542         __change_state_of_sliderbars(ad);
543
544         ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
545
546         return ad->sub_view[SETTING_PROF_VIEW_VOL];
547 }
548
549 static Evas_Object *__get_ringtone_list(void *data)
550 {
551         retv_if(data == NULL, NULL);
552         SettingProfileUG *ad = (SettingProfileUG *) data;
553
554         if(ad->sub_view[SETTING_PROF_VIEW_RTN])
555                 return ad->sub_view[SETTING_PROF_VIEW_RTN];
556
557         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
558         elm_object_style_set(genlist, "dialogue");
559         retvm_if(genlist == NULL, NULL,
560                  "Cannot set genlist object as contento of layout");
561         elm_genlist_clear(genlist);     /* first to clear list */
562         setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
563
564         /*  a. incoming call group */
565         (void)setting_create_Gendial_field_titleItem(genlist,
566                                                      &(ad->itc_group_item),
567                                                      SETTING_SOUND_TEXT_INCOMING_CALL,
568                                                      NULL);
569
570         /*  a-1. ringtone */
571         int vconf_ret = 0;
572         char *sub_desc = NULL;
573         char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
574         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
575         {
576                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
577                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
578                 if(vconf_ret < 0)
579                         SETTING_TRACE_DEBUG("failed to set vconf");
580         }
581         sub_desc = setting_file_basename(pa_ringtone);
582
583         ad->data_call_alert_tone =
584             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
585                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
586                                              ad, SWALLOW_Type_INVALID, NULL,
587                                              NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
588                                              sub_desc, NULL);
589         if (ad->data_call_alert_tone) {
590                 ad->data_call_alert_tone->userdata = ad;
591         } else {
592                 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
593         }
594
595         FREE(pa_ringtone);
596         G_FREE(sub_desc);
597
598         /*  b. notification */
599         (void)setting_create_Gendial_field_titleItem(genlist,
600                                                      &(ad->itc_group_item),
601                                                      SETTING_SOUND_TEXT_NOTIFICATION,
602                                                      NULL);
603
604         char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
605                 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
606                 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
607                 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
608                 _(SETTING_SOUND_TEXT_REPEAT_10MIN)
609         };
610         int repeat_value = 0;
611
612         /*  b-1. msg ringtone */
613         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
614         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
615         {
616                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
617                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
618                 if(vconf_ret < 0)
619                         SETTING_TRACE_DEBUG("failed to set vconf");
620         }
621         sub_desc = setting_file_basename(pa_ringtone);
622
623         ad->data_msg_alert_tone =
624             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
625                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
626                                              ad, SWALLOW_Type_INVALID, NULL,
627                                              NULL, 0,
628                                              SETTING_SOUND_TEXT_MSG_ALERT,
629                                              sub_desc, NULL);
630         if (ad->data_msg_alert_tone) {
631                 ad->data_msg_alert_tone->userdata = ad;
632         } else {
633                 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
634         }
635         FREE(pa_ringtone);
636         G_FREE(sub_desc);
637
638         /*  b-2. msg alert repetition */
639         if (vconf_get_int
640             (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
641                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
642         ad->data_msg_alert_repeat =
643             setting_create_Gendial_exp_parent_field(genlist,
644                                                     &(ad->itc_2text_3_parent),
645                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
646                                                     ad, SWALLOW_Type_INVALID,
647                                                     SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
648                                                     repeat_type[repeat_value]);
649         if (ad->data_msg_alert_repeat) {
650                 ad->data_msg_alert_repeat->int_slp_setting_binded =
651                         INT_SLP_SETTING_MSG_ALERT_REPEAT;
652         } else {
653                 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
654         }
655
656         /*  b-3. email ringtone */
657         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
658         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
659         {
660                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
661                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
662                 if(vconf_ret < 0)
663                         SETTING_TRACE_DEBUG("failed to set vconf");
664         }
665         sub_desc = setting_file_basename(pa_ringtone);
666
667         ad->data_email_alert_tone =
668             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
669                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
670                                              ad, SWALLOW_Type_INVALID, NULL,
671                                              NULL, 0,
672                                              SETTING_SOUND_TEXT_EMAIL_ALERT,
673                                              sub_desc, NULL);
674         if (ad->data_email_alert_tone) {
675                 ad->data_email_alert_tone->userdata = ad;
676         } else {
677                 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
678         }
679         FREE(pa_ringtone);
680         G_FREE(sub_desc);
681
682         /*  b-4. email alert repetition */
683         if (vconf_get_int
684             (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
685              &repeat_value) != 0)
686                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
687         ad->data_email_alert_repeat =
688             setting_create_Gendial_exp_parent_field(genlist,
689                                                     &(ad->itc_2text_3_parent),
690                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
691                                                     ad, SWALLOW_Type_INVALID,
692                                                     SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
693                                                     repeat_type[repeat_value]);
694         if (ad->data_email_alert_repeat) {
695                 ad->data_email_alert_repeat->int_slp_setting_binded =
696                         INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
697         } else {
698                 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
699         }
700
701         Elm_Object_Item *item = NULL;
702         item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
703                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
704         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
705
706         ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
707
708         return ad->sub_view[SETTING_PROF_VIEW_RTN];
709 }
710
711 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
712 {
713         //appcore_measure_start();
714         retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
715         retm_if(data == NULL, "Invalid argmuent: data is NULL");
716
717         SettingProfileUG *ad = (SettingProfileUG *) data;
718
719         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
720                 SETTING_TRACE("ERROR device_haptic_stop_play");
721                 /* return; */
722         }
723         setting_profile_close_all_mm_players(ad);
724
725         Evas_Object *sub_view = NULL;
726         Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
727         const char *tab_lable = elm_object_item_text_get(sel_item);
728         ret_if(!tab_lable);
729         //SETTING_TRACE("tab_lable:%s", tab_lable);
730         if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
731                 if(ad->hnd_hpt)
732                         device_haptic_stop_play(ad->hnd_hpt);
733                 sub_view = __get_main_list(ad);
734         } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
735                 sub_view = __get_ringtone_list(ad);
736         }
737
738         Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
739         ret_if(old_sub_view == sub_view);
740
741         if (sub_view) {
742                 if (old_sub_view)
743                 {
744                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
745                         evas_object_hide(old_sub_view);
746                 }
747                 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
748                 evas_object_show(sub_view);
749         }
750 }
751
752 static int setting_profile_sound_main_create(void *cb)
753 {
754         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
755
756         SettingProfileUG *ad = (SettingProfileUG *) cb;
757
758         ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
759         ad->navi_bar = setting_create_navi_bar(ad->ly_main);
760
761         /*  view layout */
762         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
763         elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
764         evas_object_show(view_layout);
765         ad->view_layout = view_layout;
766
767         Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
768         if(tabbar == NULL)
769                 return SETTING_RETURN_FAIL;
770
771         elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
772         ad->ctrl_bar = tabbar;
773         elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
774         elm_object_style_set(tabbar, "tabbar");
775
776         ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
777                                         NULL,
778                                         VOLUME_STR, __view_change_cb, ad);
779
780         ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
781                                         NULL,
782                                         RINGTONE_STR, __view_change_cb, ad);
783
784         elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
785         elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
786
787         Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
788         elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
789         evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
790
791         Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
792         elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
793
794         setting_view_profile_sound_main.is_create = TRUE;
795
796         return SETTING_RETURN_SUCCESS;
797 }
798
799 static int setting_profile_sound_main_destroy(void *cb)
800 {
801         /* error check */
802         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
803
804         SettingProfileUG *ad = (SettingProfileUG *) cb;
805
806         if (ad->ly_main != NULL) {
807                 //Fix the memory leak,
808                 //Manage ad->sub_view[] separately, unset first, then delete in together
809                 if (ad->view_layout)
810                 {
811                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
812                 }
813                 int i = SETTING_PROF_VIEW_VOL;
814                 for (; i < SETTING_PROF_VIEW_MAX; i++ )
815                 {
816                         evas_object_del(ad->sub_view[i]);
817                 }
818
819                 evas_object_del(ad->ly_main);
820                 setting_view_profile_sound_main.is_create = FALSE;
821         }
822         return SETTING_RETURN_SUCCESS;
823 }
824
825 static int setting_profile_sound_main_update(void *cb)
826 {
827         /* error check */
828         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
829
830         SettingProfileUG *ad = (SettingProfileUG *) cb;
831
832         if (ad->ly_main != NULL) {
833                 evas_object_show(ad->ly_main);
834         }
835
836         return SETTING_RETURN_SUCCESS;
837 }
838
839 static int setting_profile_sound_main_cleanup(void *cb)
840 {
841         /* error check */
842         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
843
844         SettingProfileUG *ad = (SettingProfileUG *) cb;
845
846         if (ad->ly_main != NULL) {
847                 evas_object_hide(ad->ly_main);
848         }
849
850         return SETTING_RETURN_SUCCESS;
851 }
852
853 /* ***************************************************
854  *
855  *general func
856  *
857  ***************************************************/
858
859 /* ***************************************************
860  *
861  *call back func
862  *
863  ***************************************************/
864
865 static void
866 setting_profile_sound_main_click_softkey_cancel_cb(void *data,
867                                                    Evas_Object *obj,
868                                                    void *event_info)
869 {
870         /* error check */
871         ret_if(data == NULL);
872
873         SettingProfileUG *ad = (SettingProfileUG *) data;
874
875         /* close mm plaer */
876         setting_profile_close_all_mm_players(ad);
877         /* close vibration */
878         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
879                 SETTING_TRACE("ERROR device_haptic_stop_play");
880                 /* return; */
881         }
882
883         /* Send destroy request */
884         ug_destroy_me(ad->ug);
885
886         return;
887 }
888
889 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
890 {
891         ret_if(priv == NULL);
892         SettingProfileUG *ad = (SettingProfileUG *) priv;
893
894         if (ug) {
895                 ug_destroy(ug);
896                 ad->ug_loading = NULL;
897         }
898 }
899
900 static void
901 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
902                                                service_h result, void *priv)
903 {
904         ret_if(priv == NULL);
905
906         SettingProfileUG *ad = (SettingProfileUG *) priv;
907         char *ringtone_file = NULL;
908         char *ringtone_path = NULL;
909
910         service_get_extra_data(result, "result", &ringtone_path);
911         if(!ringtone_path)
912                 return;
913
914         SETTING_TRACE("ringtone_path:%s", ringtone_path);
915
916         if (ringtone_path != NULL) {
917                 ringtone_file = setting_file_basename(ringtone_path);
918                 SETTING_TRACE("ringtone_file:%s", ringtone_file);
919
920                 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
921                         if (vconf_set_str
922                             (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
923                                 if (ad->data_call_alert_tone) {
924                                         ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
925
926                                         elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
927                                         elm_genlist_item_update(ad->data_call_alert_tone->item);
928                                 }
929                         }
930                 } else if (0 ==
931                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
932                         if (vconf_set_str
933                             (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
934                                 if (ad->data_msg_alert_tone) {
935                                         ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
936
937                                         elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
938                                         elm_genlist_item_update(ad->data_msg_alert_tone->item);
939                                 }
940                         }
941                 } else if (0 ==
942                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
943                         if (vconf_set_str
944                             (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
945                                 if (ad->data_email_alert_tone) {
946                                         ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
947
948                                         elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
949                                         elm_genlist_item_update(ad->data_email_alert_tone->item);
950                                 }
951                         }
952                 }
953         }
954
955         G_FREE(ringtone_file);
956         return;
957 }
958
959 static void
960 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
961                              void *priv)
962 {
963         ret_if(priv == NULL);
964
965         SettingProfileUG *ad = (SettingProfileUG *) priv;
966         Evas_Object *base;
967
968         base = (Evas_Object *) ug_get_layout(ug);
969         if (!base)
970                 return;
971
972         switch (mode) {
973                 case UG_MODE_FULLVIEW:
974                         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
975                         elm_win_resize_object_add(ad->win_get, base);
976                         evas_object_show(base);
977                         break;
978                 default:
979                         break;
980         }
981 }
982
983
984 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
985 {
986         ret_if(ad == NULL);
987
988         if(ad->ug_loading)
989         {
990                 SETTING_TRACE("Myfiles ug is already loaded.");
991                 return;
992         }
993
994         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
995         if (!cbs)
996                 return;
997
998         cbs->layout_cb = setting_profile_layout_ug_cb;
999         cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1000         cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1001         cbs->priv = (void *)ad;
1002
1003         service_h svc;
1004         if (service_create(&svc)) {
1005                 FREE(cbs);
1006                 return;
1007         }
1008
1009         const char *pa_cur_ringtone = NULL;
1010         const char *dir_path = NULL;
1011         if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1012                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1013                 if (pa_cur_ringtone == NULL)
1014                 {
1015                         pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1016                 }
1017                 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1018         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1019                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1020                 if (pa_cur_ringtone == NULL)
1021                         pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1022                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1023         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1024                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1025                 if (pa_cur_ringtone == NULL)
1026                         pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1027                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1028         }
1029         SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1030         SETTING_TRACE("dir_path:\t%s", dir_path);
1031
1032         service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1033         service_add_extra_data(svc, "path", dir_path);
1034         service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1035         service_add_extra_data(svc, "file_type", "SOUND");
1036         service_add_extra_data(svc, "drm_type", "DRM_ALL");
1037
1038         SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1039         ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1040         if (NULL == ad->ug_loading) {   /* error handling */
1041                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1042         }
1043
1044         service_destroy(svc);
1045         FREE(cbs);
1046
1047         /** @todo verify it's valid */
1048         if(pa_cur_ringtone)
1049                 FREE(pa_cur_ringtone);
1050
1051         return;
1052 }
1053
1054 static void
1055 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1056                                           void *event_info)
1057 {
1058         /* error check */
1059         ret_if(data == NULL);
1060
1061         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1062         SettingProfileUG *ad = list_item->userdata;
1063
1064         int state = list_item->chk_status = elm_check_state_get(obj);   /*  for genlist update status */
1065
1066         /* restore the selected check status */
1067         list_item->chk_status = state;
1068         elm_check_state_set(list_item->eo_check, state);
1069
1070         if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1071                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1072                         list_item->chk_status = !state;
1073                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1074                 }
1075
1076                 if (list_item->chk_status) {
1077                         setting_enable_genlist_item(ad->data_call_volume->item);
1078                         setting_enable_genlist_item(ad->data_noti_volume->item);
1079                         setting_enable_genlist_item(ad->data_media_volume->item);
1080                         setting_enable_genlist_item(ad->data_touch_volume->item);
1081                 } else {
1082                         setting_profile_close_all_mm_players(ad);
1083                         setting_disable_genlist_item(ad->data_call_volume->item);
1084                         setting_disable_genlist_item(ad->data_noti_volume->item);
1085                         setting_disable_genlist_item(ad->data_media_volume->item);
1086                         setting_disable_genlist_item(ad->data_touch_volume->item);
1087                 }
1088         } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1089                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1090                         list_item->chk_status = !state;
1091                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1092                 }
1093                 if (list_item->chk_status) {
1094                         setting_enable_genlist_item(ad->data_vib_volume->item);
1095                         setting_enable_genlist_item(ad->data_touch_vib->item);
1096
1097                         /* Play vib if vib turns on */
1098                         int err = 0;
1099                         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1100                         svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1101                         device_haptic_stop_play(ad->hnd_hpt);
1102                         err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5));
1103
1104                         if (err < 0)
1105                                 SETTING_TRACE("Failed to play haptic monotone");
1106                 } else {
1107                         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1108                                 SETTING_TRACE("ERROR device_haptic_stop_play");
1109                         }
1110                         setting_disable_genlist_item(ad->data_vib_volume->item);
1111                         setting_disable_genlist_item(ad->data_touch_vib->item);
1112                 }
1113         }
1114         /* additional items */
1115         else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1116                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1117                         list_item->chk_status = !state;
1118                         elm_check_state_set(list_item->eo_check, !state);
1119                 }
1120         }
1121
1122         /* end */
1123
1124 }
1125
1126 static void
1127 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1128                                                     Evas_Object *obj,
1129                                                     void *event_info)
1130 {
1131         /* error check */
1132         ret_if(data == NULL);
1133         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1134
1135         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1136         elm_genlist_item_selected_set(item, 0);
1137         Setting_GenGroupItem_Data *list_item =
1138             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1139
1140         SettingProfileUG *ad = data;
1141
1142         if(ad->hnd_hpt)
1143                         device_haptic_stop_play(ad->hnd_hpt);
1144
1145         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1146         if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1147             || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1148             || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1149                 ad->ringtone_type = list_item->keyStr;
1150                 setting_profile_sound_main_create_myfile_ug(ad);
1151         } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1152                 int old_status = elm_check_state_get(list_item->eo_check);
1153                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1154                         /* new status */
1155                         list_item->chk_status = !old_status;
1156                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1157                         if (list_item->chk_status) {
1158                                 setting_enable_genlist_item(ad->data_call_volume->item);
1159                                 setting_enable_genlist_item(ad->data_noti_volume->item);
1160                                 setting_enable_genlist_item(ad->data_media_volume->item);
1161                                 setting_enable_genlist_item(ad->data_touch_volume->item);
1162                         } else {
1163                                 setting_profile_close_all_mm_players(ad);
1164                                 setting_disable_genlist_item(ad->data_call_volume->item);
1165                                 setting_disable_genlist_item(ad->data_noti_volume->item);
1166                                 setting_disable_genlist_item(ad->data_media_volume->item);
1167                                 setting_disable_genlist_item(ad->data_touch_volume->item);
1168                         }
1169                 }
1170                 return;
1171         }
1172         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1173                 int old_status = elm_check_state_get(list_item->eo_check);
1174                 /* To do : set vconfkey for touch sounds */
1175
1176                 list_item->chk_status = !old_status;
1177                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1178         }
1179         /* end */
1180         else if (ad->data_msg_alert_repeat == list_item
1181                  || ad->data_email_alert_repeat == list_item) {
1182                 bool status = !elm_genlist_item_expanded_get(item);
1183                 elm_genlist_item_expanded_set(item, status);
1184         }
1185 }
1186
1187 static void
1188 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1189                                                                       Evas_Object *obj,
1190                                                                       void *event_info)
1191 {
1192         /* error check */
1193         ret_if(data == NULL);
1194
1195         double val = elm_slider_value_get(obj);
1196
1197         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1198         SettingProfileUG *ad = list_item->userdata;
1199
1200         if(ad->mp_ringtone == NULL)
1201                 return;
1202
1203         if(list_item->chk_status != (int)(val+0.5))
1204         {
1205                 list_item->chk_status = (int)(val+0.5);
1206                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)list_item->chk_status);
1207                 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1208         }
1209 }
1210
1211 static void
1212 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1213                                                              Evas_Object *obj,
1214                                                              void *event_info)
1215 {
1216         /* error check */
1217         ret_if(data == NULL);
1218
1219         double val = elm_slider_value_get(obj);
1220
1221         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1222         SettingProfileUG *ad = list_item->userdata;
1223
1224         if(ad->mp_noti == NULL)
1225                 return;
1226
1227         if(list_item->chk_status != (int)(val+0.5))
1228         {
1229                 list_item->chk_status = val;
1230                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)list_item->chk_status);
1231                 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1232         }
1233 }
1234
1235 static void
1236 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1237                                                               Evas_Object *obj,
1238                                                               void *event_info)
1239 {
1240         /* error check */
1241         ret_if(data == NULL);
1242
1243         double val = elm_slider_value_get(obj);
1244
1245         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1246         SettingProfileUG *ad = list_item->userdata;
1247
1248         if(ad->mp_media == NULL)
1249                 return;
1250         if(list_item->chk_status != (int)(val+0.5))
1251         {
1252                 list_item->chk_status = val;
1253                 sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)list_item->chk_status);
1254                 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1255         }
1256 }
1257
1258 static void
1259 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1260                                                              Evas_Object *obj,
1261                                                              void *event_info)
1262 {
1263         /* error check */
1264         ret_if(data == NULL);
1265
1266         double val = elm_slider_value_get(obj);
1267
1268         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1269         SettingProfileUG *ad = list_item->userdata;
1270
1271         if(ad->mp_sys == NULL)
1272                 return;
1273
1274         if(list_item->chk_status != (int)(val+0.5))
1275         {
1276                 list_item->chk_status = val;
1277                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)list_item->chk_status);
1278                 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1279         }
1280 }
1281