37c3a584fa49062464fcf709b441b9dde35aee33
[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 void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
365 {
366         SETTING_TRACE_BEGIN;
367         retv_if(data == NULL, NULL);
368
369         SettingProfileUG *ad = (SettingProfileUG *) data;
370
371         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
372         Setting_GenGroupItem_Data *list_item =
373             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
374
375         /* backup each slider's value */
376         if(list_item == ad->data_call_volume)
377                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
378         else if(list_item == ad->data_noti_volume)
379                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
380         else if(list_item == ad->data_media_volume)
381                 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
382         else if(list_item == ad->data_touch_volume)
383                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
384 }
385
386 static Evas_Object *__get_main_list(void *data)
387 {
388         retv_if(data == NULL, NULL);
389
390         SettingProfileUG *ad = (SettingProfileUG *) data;
391
392         if(ad->sub_view[SETTING_PROF_VIEW_VOL])
393                 return ad->sub_view[SETTING_PROF_VIEW_VOL];
394
395         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
396         elm_object_style_set(genlist, "dialogue");
397         retvm_if(genlist == NULL, NULL,
398                  "Cannot set genlist object as contento of layout");
399         elm_genlist_clear(genlist);     /* first to clear list */
400
401         int vconf_value = 0;
402         int mm_value = 0;
403
404         Elm_Object_Item *item = elm_genlist_item_append(genlist,
405                                                                 &(ad->itc_seperator), NULL, NULL,
406                                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
407         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
408
409         /* a.use sound */
410         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
411                 vconf_value = TRUE;     /*  default value of sound : on */
412         ad->data_sound =
413             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
414                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
415                                              ad, SWALLOW_Type_1TOGGLE, NULL,
416                                              NULL, vconf_value,
417                                              SETTING_SOUND_TEXT_SOUND, NULL,
418                                              setting_profile_sound_main_Gendial_chk_cb);
419         if (ad->data_sound) {
420                 ad->data_sound->userdata = ad;
421         } else {
422                 SETTING_TRACE_ERROR("ad->data_sound is NULL");
423         }
424
425         (void)setting_create_Gendial_field_titleItem(genlist,
426                                                      &(ad->itc_group_item),
427                                                      "IDS_ST_BODY_VOLUME", NULL);
428
429         /* d.call volumn. */
430         if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
431                 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
432         ad->data_call_volume =
433             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
434                                              NULL,
435                                              SWALLOW_Type_LAYOUT_SLIDER,
436                                              IMG_SLIDER_BTN_VOLUME01,
437                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
438                                              SETTING_SOUND_TEXT_INCOMING_CALL,
439                                              NULL,
440                                              setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
441         if (ad->data_call_volume) {
442                 ad->data_call_volume->win_main = ad->win_main_layout;
443                 ad->data_call_volume->evas = ad->evas;
444                 ad->data_call_volume->isIndicatorVisible = true;
445                 ad->data_call_volume->slider_min = 0;
446                 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
447                 ad->data_call_volume->userdata = ad;
448                 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
449                 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
450                 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
451         } else {
452                 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
453         }
454
455         /* e.noti volumn */
456         if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
457                 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
458         ad->data_noti_volume =
459             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
460                                              NULL,
461                                              SWALLOW_Type_LAYOUT_SLIDER,
462                                              IMG_SLIDER_BTN_VOLUME01,
463                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
464                                              SETTING_SOUND_TEXT_NOTIFICATION,
465                                              NULL,
466                                              setting_profile_sound_main_noti_sound_slider_value_change_cb);
467         if (ad->data_noti_volume) {
468                 ad->data_noti_volume->win_main = ad->win_main_layout;
469                 ad->data_noti_volume->evas = ad->evas;
470                 ad->data_noti_volume->isIndicatorVisible = true;
471                 ad->data_noti_volume->slider_min = 0;
472                 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
473                 ad->data_noti_volume->userdata = ad;
474                 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
475                 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
476                 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
477         } else {
478                 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
479         }
480
481         /* g.media volume */
482         if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
483                 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
484         ad->data_media_volume =
485             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
486                                              NULL,
487                                              SWALLOW_Type_LAYOUT_SLIDER,
488                                              IMG_SLIDER_BTN_VOLUME01,
489                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
490                                              SETTING_SOUND_TEXT_MEDIA, NULL,
491                                              setting_profile_sound_main_media_sound_slider_value_change_cb);
492         if (ad->data_media_volume) {
493                 ad->data_media_volume->win_main = ad->win_main_layout;
494                 ad->data_media_volume->evas = ad->evas;
495                 ad->data_media_volume->isIndicatorVisible = true;
496                 ad->data_media_volume->slider_min = 0;
497                 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
498                 ad->data_media_volume->userdata = ad;
499                 ad->data_media_volume->start_change_cb = __media_start_change_cb;
500                 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
501                 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
502         } else {
503                 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
504         }
505
506         /* h.system volume */
507         if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
508                 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
509         ad->data_touch_volume =
510             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
511                                              NULL,
512                                              SWALLOW_Type_LAYOUT_SLIDER,
513                                              IMG_SLIDER_BTN_VOLUME01,
514                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
515                                              SETTING_SOUND_TEXT_SYSTEM, NULL,
516                                              settings_profile_sound_main_sys_sound_slider_value_change_cb);
517         if (ad->data_touch_volume) {
518                 ad->data_touch_volume->win_main = ad->win_main_layout;
519                 ad->data_touch_volume->evas = ad->evas;
520                 ad->data_touch_volume->isIndicatorVisible = true;
521                 ad->data_touch_volume->slider_min = 0;
522                 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
523                 ad->data_touch_volume->userdata = ad;
524                 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
525                 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
526                 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
527         } else {
528                 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
529         }
530
531         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
532                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
533
534         /* Touch sounds */
535         if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
536                 vconf_value = TRUE;     /*  default value of touch sounds : on */
537
538         ad->data_touch_sounds =
539             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
540                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
541                                              ad, SWALLOW_Type_1TOGGLE, NULL,
542                                              NULL, vconf_value,
543                                              "IDS_ST_BODY_TOUCH_SOUNDS",
544                                              NULL,
545                                              setting_profile_sound_main_Gendial_chk_cb);
546         if (ad->data_touch_sounds) {
547                 ad->data_touch_sounds->userdata = ad;
548         } else {
549                 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
550         }
551
552         setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
553                                          NULL, ad,
554                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
555                                          NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
556
557         __change_state_of_sliderbars(ad);
558
559         evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
560
561         ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
562
563         return ad->sub_view[SETTING_PROF_VIEW_VOL];
564 }
565
566 static Evas_Object *__get_ringtone_list(void *data)
567 {
568         retv_if(data == NULL, NULL);
569         SettingProfileUG *ad = (SettingProfileUG *) data;
570
571         if(ad->sub_view[SETTING_PROF_VIEW_RTN])
572                 return ad->sub_view[SETTING_PROF_VIEW_RTN];
573
574         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
575         elm_object_style_set(genlist, "dialogue");
576         retvm_if(genlist == NULL, NULL,
577                  "Cannot set genlist object as contento of layout");
578         elm_genlist_clear(genlist);     /* first to clear list */
579         setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
580
581         /*  a. incoming call group */
582         (void)setting_create_Gendial_field_titleItem(genlist,
583                                                      &(ad->itc_group_item),
584                                                      SETTING_SOUND_TEXT_INCOMING_CALL,
585                                                      NULL);
586
587         /*  a-1. ringtone */
588         int vconf_ret = 0;
589         char *sub_desc = NULL;
590         char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
591         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
592         {
593                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
594                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
595                 if(vconf_ret < 0)
596                         SETTING_TRACE_DEBUG("failed to set vconf");
597         }
598         sub_desc = setting_file_basename(pa_ringtone);
599
600         ad->data_call_alert_tone =
601             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
602                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
603                                              ad, SWALLOW_Type_INVALID, NULL,
604                                              NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
605                                              sub_desc, NULL);
606         if (ad->data_call_alert_tone) {
607                 ad->data_call_alert_tone->userdata = ad;
608         } else {
609                 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
610         }
611
612         FREE(pa_ringtone);
613         G_FREE(sub_desc);
614
615         /*  b. notification */
616         (void)setting_create_Gendial_field_titleItem(genlist,
617                                                      &(ad->itc_group_item),
618                                                      SETTING_SOUND_TEXT_NOTIFICATION,
619                                                      NULL);
620
621         char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
622                 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
623                 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
624                 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
625                 _(SETTING_SOUND_TEXT_REPEAT_10MIN)
626         };
627         int repeat_value = 0;
628
629         /*  b-1. msg ringtone */
630         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
631         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
632         {
633                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
634                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
635                 if(vconf_ret < 0)
636                         SETTING_TRACE_DEBUG("failed to set vconf");
637         }
638         sub_desc = setting_file_basename(pa_ringtone);
639
640         ad->data_msg_alert_tone =
641             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
642                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
643                                              ad, SWALLOW_Type_INVALID, NULL,
644                                              NULL, 0,
645                                              SETTING_SOUND_TEXT_MSG_ALERT,
646                                              sub_desc, NULL);
647         if (ad->data_msg_alert_tone) {
648                 ad->data_msg_alert_tone->userdata = ad;
649         } else {
650                 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
651         }
652         FREE(pa_ringtone);
653         G_FREE(sub_desc);
654
655         /*  b-2. msg alert repetition */
656         if (vconf_get_int
657             (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
658                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
659         ad->data_msg_alert_repeat =
660             setting_create_Gendial_exp_parent_field(genlist,
661                                                     &(ad->itc_2text_3_parent),
662                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
663                                                     ad, SWALLOW_Type_INVALID,
664                                                     SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
665                                                     repeat_type[repeat_value]);
666         if (ad->data_msg_alert_repeat) {
667                 ad->data_msg_alert_repeat->int_slp_setting_binded =
668                         INT_SLP_SETTING_MSG_ALERT_REPEAT;
669         } else {
670                 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
671         }
672
673         /*  b-3. email ringtone */
674         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
675         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
676         {
677                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
678                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
679                 if(vconf_ret < 0)
680                         SETTING_TRACE_DEBUG("failed to set vconf");
681         }
682         sub_desc = setting_file_basename(pa_ringtone);
683
684         ad->data_email_alert_tone =
685             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
686                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
687                                              ad, SWALLOW_Type_INVALID, NULL,
688                                              NULL, 0,
689                                              SETTING_SOUND_TEXT_EMAIL_ALERT,
690                                              sub_desc, NULL);
691         if (ad->data_email_alert_tone) {
692                 ad->data_email_alert_tone->userdata = ad;
693         } else {
694                 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
695         }
696         FREE(pa_ringtone);
697         G_FREE(sub_desc);
698
699         /*  b-4. email alert repetition */
700         if (vconf_get_int
701             (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
702              &repeat_value) != 0)
703                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
704         ad->data_email_alert_repeat =
705             setting_create_Gendial_exp_parent_field(genlist,
706                                                     &(ad->itc_2text_3_parent),
707                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
708                                                     ad, SWALLOW_Type_INVALID,
709                                                     SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
710                                                     repeat_type[repeat_value]);
711         if (ad->data_email_alert_repeat) {
712                 ad->data_email_alert_repeat->int_slp_setting_binded =
713                         INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
714         } else {
715                 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
716         }
717
718         Elm_Object_Item *item = NULL;
719         item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
720                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
721         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
722
723         ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
724
725         return ad->sub_view[SETTING_PROF_VIEW_RTN];
726 }
727
728 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
729 {
730         //appcore_measure_start();
731         retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
732         retm_if(data == NULL, "Invalid argmuent: data is NULL");
733
734         SettingProfileUG *ad = (SettingProfileUG *) data;
735
736         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
737                 SETTING_TRACE("ERROR device_haptic_stop_play");
738                 /* return; */
739         }
740         setting_profile_close_all_mm_players(ad);
741
742         Evas_Object *sub_view = NULL;
743         Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
744         const char *tab_lable = elm_object_item_text_get(sel_item);
745         ret_if(!tab_lable);
746         //SETTING_TRACE("tab_lable:%s", tab_lable);
747         if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
748                 if(ad->hnd_hpt)
749                         device_haptic_stop_play(ad->hnd_hpt);
750                 sub_view = __get_main_list(ad);
751         } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
752                 sub_view = __get_ringtone_list(ad);
753         }
754
755         Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
756         ret_if(old_sub_view == sub_view);
757
758         if (sub_view) {
759                 if (old_sub_view)
760                 {
761                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
762                         evas_object_hide(old_sub_view);
763                 }
764                 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
765                 evas_object_show(sub_view);
766         }
767 }
768
769 static int setting_profile_sound_main_create(void *cb)
770 {
771         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
772
773         SettingProfileUG *ad = (SettingProfileUG *) cb;
774
775         ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
776         ad->navi_bar = setting_create_navi_bar(ad->ly_main);
777
778         /*  view layout */
779         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
780         elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
781         evas_object_show(view_layout);
782         ad->view_layout = view_layout;
783
784         Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
785         if(tabbar == NULL)
786                 return SETTING_RETURN_FAIL;
787
788         elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
789         ad->ctrl_bar = tabbar;
790         elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
791         elm_object_style_set(tabbar, "tabbar");
792
793         ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
794                                         NULL,
795                                         VOLUME_STR, __view_change_cb, ad);
796
797         ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
798                                         NULL,
799                                         RINGTONE_STR, __view_change_cb, ad);
800
801         elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
802         elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
803
804         Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
805         elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
806         evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
807
808         Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
809         elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
810
811         setting_view_profile_sound_main.is_create = TRUE;
812
813         return SETTING_RETURN_SUCCESS;
814 }
815
816 static int setting_profile_sound_main_destroy(void *cb)
817 {
818         /* error check */
819         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
820
821         SettingProfileUG *ad = (SettingProfileUG *) cb;
822
823         if (ad->ly_main != NULL) {
824                 //Fix the memory leak,
825                 //Manage ad->sub_view[] separately, unset first, then delete in together
826                 if (ad->view_layout)
827                 {
828                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
829                 }
830                 int i = SETTING_PROF_VIEW_VOL;
831                 for (; i < SETTING_PROF_VIEW_MAX; i++ )
832                 {
833                         evas_object_del(ad->sub_view[i]);
834                 }
835
836                 evas_object_del(ad->ly_main);
837                 setting_view_profile_sound_main.is_create = FALSE;
838         }
839         return SETTING_RETURN_SUCCESS;
840 }
841
842 static int setting_profile_sound_main_update(void *cb)
843 {
844         /* error check */
845         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
846
847         SettingProfileUG *ad = (SettingProfileUG *) cb;
848
849         if (ad->ly_main != NULL) {
850                 evas_object_show(ad->ly_main);
851         }
852
853         return SETTING_RETURN_SUCCESS;
854 }
855
856 static int setting_profile_sound_main_cleanup(void *cb)
857 {
858         /* error check */
859         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
860
861         SettingProfileUG *ad = (SettingProfileUG *) cb;
862
863         if (ad->ly_main != NULL) {
864                 evas_object_hide(ad->ly_main);
865         }
866
867         return SETTING_RETURN_SUCCESS;
868 }
869
870 /* ***************************************************
871  *
872  *general func
873  *
874  ***************************************************/
875
876 /* ***************************************************
877  *
878  *call back func
879  *
880  ***************************************************/
881
882 static void
883 setting_profile_sound_main_click_softkey_cancel_cb(void *data,
884                                                    Evas_Object *obj,
885                                                    void *event_info)
886 {
887         /* error check */
888         ret_if(data == NULL);
889
890         SettingProfileUG *ad = (SettingProfileUG *) data;
891
892         /* close mm plaer */
893         setting_profile_close_all_mm_players(ad);
894         /* close vibration */
895         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
896                 SETTING_TRACE("ERROR device_haptic_stop_play");
897                 /* return; */
898         }
899
900         /* Send destroy request */
901         ug_destroy_me(ad->ug);
902
903         return;
904 }
905
906 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
907 {
908         ret_if(priv == NULL);
909         SettingProfileUG *ad = (SettingProfileUG *) priv;
910
911         if (ug) {
912                 ug_destroy(ug);
913                 ad->ug_loading = NULL;
914         }
915 }
916
917 static void
918 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
919                                                service_h result, void *priv)
920 {
921         ret_if(priv == NULL);
922
923         SettingProfileUG *ad = (SettingProfileUG *) priv;
924         char *ringtone_file = NULL;
925         char *ringtone_path = NULL;
926
927         service_get_extra_data(result, "result", &ringtone_path);
928         if(!ringtone_path)
929                 return;
930
931         SETTING_TRACE("ringtone_path:%s", ringtone_path);
932
933         if (ringtone_path != NULL) {
934                 ringtone_file = setting_file_basename(ringtone_path);
935                 SETTING_TRACE("ringtone_file:%s", ringtone_file);
936
937                 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
938                         if (vconf_set_str
939                             (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
940                                 if (ad->data_call_alert_tone) {
941                                         ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
942
943                                         elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
944                                         elm_genlist_item_update(ad->data_call_alert_tone->item);
945                                 }
946                         }
947                 } else if (0 ==
948                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
949                         if (vconf_set_str
950                             (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
951                                 if (ad->data_msg_alert_tone) {
952                                         ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
953
954                                         elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
955                                         elm_genlist_item_update(ad->data_msg_alert_tone->item);
956                                 }
957                         }
958                 } else if (0 ==
959                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
960                         if (vconf_set_str
961                             (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
962                                 if (ad->data_email_alert_tone) {
963                                         ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
964
965                                         elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
966                                         elm_genlist_item_update(ad->data_email_alert_tone->item);
967                                 }
968                         }
969                 }
970         }
971
972         G_FREE(ringtone_file);
973         return;
974 }
975
976 static void
977 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
978                              void *priv)
979 {
980         ret_if(priv == NULL);
981
982         SettingProfileUG *ad = (SettingProfileUG *) priv;
983         Evas_Object *base;
984
985         base = (Evas_Object *) ug_get_layout(ug);
986         if (!base)
987                 return;
988
989         switch (mode) {
990                 case UG_MODE_FULLVIEW:
991                         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
992                         elm_win_resize_object_add(ad->win_get, base);
993                         evas_object_show(base);
994                         break;
995                 default:
996                         break;
997         }
998 }
999
1000
1001 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1002 {
1003         ret_if(ad == NULL);
1004
1005         if(ad->ug_loading)
1006         {
1007                 SETTING_TRACE("Myfiles ug is already loaded.");
1008                 return;
1009         }
1010
1011         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1012         if (!cbs)
1013                 return;
1014
1015         cbs->layout_cb = setting_profile_layout_ug_cb;
1016         cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1017         cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1018         cbs->priv = (void *)ad;
1019
1020         service_h svc;
1021         if (service_create(&svc)) {
1022                 FREE(cbs);
1023                 return;
1024         }
1025
1026         const char *pa_cur_ringtone = NULL;
1027         const char *dir_path = NULL;
1028         if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1029                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1030                 if (pa_cur_ringtone == NULL)
1031                 {
1032                         pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1033                 }
1034                 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1035         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1036                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1037                 if (pa_cur_ringtone == NULL)
1038                         pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1039                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1040         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1041                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1042                 if (pa_cur_ringtone == NULL)
1043                         pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1044                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1045         }
1046         SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1047         SETTING_TRACE("dir_path:\t%s", dir_path);
1048
1049         service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1050         service_add_extra_data(svc, "path", dir_path);
1051         service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1052         service_add_extra_data(svc, "file_type", "SOUND");
1053         service_add_extra_data(svc, "drm_type", "DRM_ALL");
1054
1055         SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1056         ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1057         if (NULL == ad->ug_loading) {   /* error handling */
1058                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1059         }
1060
1061         service_destroy(svc);
1062         FREE(cbs);
1063
1064         /** @todo verify it's valid */
1065         if(pa_cur_ringtone)
1066                 FREE(pa_cur_ringtone);
1067
1068         return;
1069 }
1070
1071 static void
1072 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1073                                           void *event_info)
1074 {
1075         /* error check */
1076         ret_if(data == NULL);
1077
1078         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1079         SettingProfileUG *ad = list_item->userdata;
1080
1081         int state = list_item->chk_status = elm_check_state_get(obj);   /*  for genlist update status */
1082
1083         /* restore the selected check status */
1084         list_item->chk_status = state;
1085         elm_check_state_set(list_item->eo_check, state);
1086
1087         if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1088                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1089                         list_item->chk_status = !state;
1090                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1091                 }
1092
1093                 if (list_item->chk_status) {
1094                         setting_enable_genlist_item(ad->data_call_volume->item);
1095                         setting_enable_genlist_item(ad->data_noti_volume->item);
1096                         setting_enable_genlist_item(ad->data_media_volume->item);
1097                         setting_enable_genlist_item(ad->data_touch_volume->item);
1098                 } else {
1099                         setting_profile_close_all_mm_players(ad);
1100                         setting_disable_genlist_item(ad->data_call_volume->item);
1101                         setting_disable_genlist_item(ad->data_noti_volume->item);
1102                         setting_disable_genlist_item(ad->data_media_volume->item);
1103                         setting_disable_genlist_item(ad->data_touch_volume->item);
1104                 }
1105         } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1106                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1107                         list_item->chk_status = !state;
1108                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1109                 }
1110                 if (list_item->chk_status) {
1111                         setting_enable_genlist_item(ad->data_vib_volume->item);
1112                         setting_enable_genlist_item(ad->data_touch_vib->item);
1113
1114                         /* Play vib if vib turns on */
1115                         int err = 0;
1116                         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1117                         svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1118                         device_haptic_stop_play(ad->hnd_hpt);
1119                         err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5));
1120
1121                         if (err < 0)
1122                                 SETTING_TRACE("Failed to play haptic monotone");
1123                 } else {
1124                         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1125                                 SETTING_TRACE("ERROR device_haptic_stop_play");
1126                         }
1127                         setting_disable_genlist_item(ad->data_vib_volume->item);
1128                         setting_disable_genlist_item(ad->data_touch_vib->item);
1129                 }
1130         }
1131         /* additional items */
1132         else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1133                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1134                         list_item->chk_status = !state;
1135                         elm_check_state_set(list_item->eo_check, !state);
1136                 }
1137         }
1138         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1139                 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1140                         list_item->chk_status = !state;
1141                         elm_check_state_set(list_item->eo_check, !state);
1142                 }
1143         }
1144
1145         /* end */
1146
1147 }
1148
1149 static void
1150 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1151                                                     Evas_Object *obj,
1152                                                     void *event_info)
1153 {
1154         /* error check */
1155         ret_if(data == NULL);
1156         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1157
1158         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1159         elm_genlist_item_selected_set(item, 0);
1160         Setting_GenGroupItem_Data *list_item =
1161             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1162
1163         SettingProfileUG *ad = data;
1164
1165         if(ad->hnd_hpt)
1166                         device_haptic_stop_play(ad->hnd_hpt);
1167
1168         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1169         if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1170             || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1171             || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1172                 ad->ringtone_type = list_item->keyStr;
1173                 setting_profile_sound_main_create_myfile_ug(ad);
1174         } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1175                 int old_status = elm_check_state_get(list_item->eo_check);
1176                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1177                         /* new status */
1178                         list_item->chk_status = !old_status;
1179                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1180                         if (list_item->chk_status) {
1181                                 setting_enable_genlist_item(ad->data_call_volume->item);
1182                                 setting_enable_genlist_item(ad->data_noti_volume->item);
1183                                 setting_enable_genlist_item(ad->data_media_volume->item);
1184                                 setting_enable_genlist_item(ad->data_touch_volume->item);
1185                         } else {
1186                                 setting_profile_close_all_mm_players(ad);
1187                                 setting_disable_genlist_item(ad->data_call_volume->item);
1188                                 setting_disable_genlist_item(ad->data_noti_volume->item);
1189                                 setting_disable_genlist_item(ad->data_media_volume->item);
1190                                 setting_disable_genlist_item(ad->data_touch_volume->item);
1191                         }
1192                 }
1193                 return;
1194         }
1195         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1196                 int old_status = elm_check_state_get(list_item->eo_check);
1197                 /* To do : set vconfkey for touch sounds */
1198                 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1199                         /* new status */
1200                         list_item->chk_status = !old_status;
1201                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1202                 }
1203         }
1204         /* end */
1205         else if (ad->data_msg_alert_repeat == list_item
1206                  || ad->data_email_alert_repeat == list_item) {
1207                 bool status = !elm_genlist_item_expanded_get(item);
1208                 elm_genlist_item_expanded_set(item, status);
1209         }
1210 }
1211
1212 static void
1213 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1214                                                                       Evas_Object *obj,
1215                                                                       void *event_info)
1216 {
1217         /* error check */
1218         ret_if(data == NULL);
1219
1220         double val = elm_slider_value_get(obj);
1221
1222         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1223         SettingProfileUG *ad = list_item->userdata;
1224
1225         if(ad->mp_ringtone == NULL)
1226                 return;
1227
1228         if(list_item->chk_status != (int)(val+0.5))
1229         {
1230                 list_item->chk_status = (int)(val+0.5);
1231                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)list_item->chk_status);
1232                 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1233         }
1234 }
1235
1236 static void
1237 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1238                                                              Evas_Object *obj,
1239                                                              void *event_info)
1240 {
1241         /* error check */
1242         ret_if(data == NULL);
1243
1244         double val = elm_slider_value_get(obj);
1245
1246         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1247         SettingProfileUG *ad = list_item->userdata;
1248
1249         if(ad->mp_noti == NULL)
1250                 return;
1251
1252         if(list_item->chk_status != (int)(val+0.5))
1253         {
1254                 list_item->chk_status = val;
1255                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)list_item->chk_status);
1256                 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1257         }
1258 }
1259
1260 static void
1261 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1262                                                               Evas_Object *obj,
1263                                                               void *event_info)
1264 {
1265         /* error check */
1266         ret_if(data == NULL);
1267
1268         double val = elm_slider_value_get(obj);
1269
1270         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1271         SettingProfileUG *ad = list_item->userdata;
1272
1273         if(ad->mp_media == NULL)
1274                 return;
1275         if(list_item->chk_status != (int)(val+0.5))
1276         {
1277                 list_item->chk_status = val;
1278                 sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)list_item->chk_status);
1279                 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1280         }
1281 }
1282
1283 static void
1284 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1285                                                              Evas_Object *obj,
1286                                                              void *event_info)
1287 {
1288         /* error check */
1289         ret_if(data == NULL);
1290
1291         double val = elm_slider_value_get(obj);
1292
1293         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1294         SettingProfileUG *ad = list_item->userdata;
1295
1296         if(ad->mp_sys == NULL)
1297                 return;
1298
1299         if(list_item->chk_status != (int)(val+0.5))
1300         {
1301                 list_item->chk_status = val;
1302                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)list_item->chk_status);
1303                 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1304         }
1305 }
1306