Tizen 2.0 Release
[apps/home/settings.git] / setting-profile / src / setting-profile-sound-main.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <setting-profile-sound-main.h>
18 #include <setting-profile.h>
19
20 #define VOLUME_STR                      _("IDS_ST_BODY_VOLUME")
21 #define RINGTONE_STR            _("IDS_COM_BODY_RINGTONES")
22
23 #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG"
24
25 char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
26                 SETTING_SOUND_TEXT_REPEAT_ONCE,
27                 SETTING_SOUND_TEXT_REPEAT_2MIN,
28                 SETTING_SOUND_TEXT_REPEAT_5MIN,
29                 SETTING_SOUND_TEXT_REPEAT_10MIN
30         };
31
32 static int setting_profile_sound_main_create(void *cb);
33 static int setting_profile_sound_main_destroy(void *cb);
34 static int setting_profile_sound_main_update(void *cb);
35 static int setting_profile_sound_main_cleanup(void *cb);
36
37 static void setting_profile_layout_ug_cb(ui_gadget_h ug,
38                                          enum ug_mode mode, void *priv);
39
40 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
41                                                                 Evas_Object *obj, void *event_info);
42
43 static void setting_profile_sound_main_Gendial_chk_cb(void *data,
44                                                                 Evas_Object *obj, void *event_info);
45
46 static void setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
47                                                                         Evas_Object *obj, void *event_info);
48
49 static void setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
50                                                                     Evas_Object *obj, void *event_info);
51
52 static void setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
53                                                                         Evas_Object *obj, void *event_info);
54
55 static void setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
56                                                                         Evas_Object *obj, void *event_info);
57
58 static void setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
59                                                                         Evas_Object *obj, void *event_info);
60
61 static void setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
62                                                                         Evas_Object *obj, void *event_info);
63
64 static void settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
65                                                                         Evas_Object *obj, void *event_info);
66
67
68 setting_view setting_view_profile_sound_main = {
69         .create = setting_profile_sound_main_create,
70         .destroy = setting_profile_sound_main_destroy,
71         .update = setting_profile_sound_main_update,
72         .cleanup = setting_profile_sound_main_cleanup,
73 };
74
75 /* ***************************************************
76  *
77  *basic func
78  *
79  ***************************************************/
80 void __change_state_of_sliderbars(void *data)
81 {
82         ret_if(data == NULL);
83         SettingProfileUG *ad = (SettingProfileUG *) data;
84
85         int sound_on = TRUE;
86         int vibration_on = TRUE;
87
88         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_on) == 0) {
89                 if (sound_on == FALSE) {
90                         /*  disable slider bar of call ringtone, notification, media, and system volume */
91                         if (ad->data_call_volume) {
92                                 setting_disable_genlist_item(ad->data_call_volume->item);
93                         }
94                         if (ad->data_noti_volume) {
95                                 setting_disable_genlist_item(ad->data_noti_volume->item);
96                         }
97                         if (ad->data_media_volume) {
98                                 setting_disable_genlist_item(ad->data_media_volume->item);
99                         }
100                         if (ad->data_touch_volume) {
101                                 setting_disable_genlist_item(ad->data_touch_volume->item);
102                         }
103                 }
104         }
105
106         if (vconf_get_bool
107             (VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration_on) == 0) {
108                 if (vibration_on == FALSE) {
109                         /*  disable slider bar of notification and system vibration */
110                         if (ad->data_vib_volume) {
111                                 setting_disable_genlist_item(ad->data_vib_volume->item);
112                         }
113                         if (ad->data_touch_vib) {
114                                 setting_disable_genlist_item(ad->data_touch_vib->item);
115                         }
116                 }
117         }
118 }
119
120 void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
121 {
122         /* error check */
123         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
124         retm_if(data == NULL, "Invalid argument: data is NULL");
125
126         SettingProfileUG *ad = (SettingProfileUG *) data;
127         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
128         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
129         elm_genlist_item_selected_set(subitem, 0);
130         Setting_GenGroupItem_Data *data_subItem =
131             elm_object_item_data_get(subitem);
132         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
133         if (NULL == data_subItem || NULL == data_parentItem)
134                 return;
135
136         elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
137         int err;
138         setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
139                                 data_subItem->chk_status, &err);
140
141         if (data_parentItem && data_parentItem->item) {
142                 data_parentItem->sub_desc =
143                     (char *)g_strdup(_(data_subItem->keyStr));
144                 elm_object_item_data_set(data_parentItem->item, data_parentItem);
145                 elm_genlist_item_update(data_parentItem->item);
146         }
147
148         if (data_parentItem->int_slp_setting_binded ==
149             INT_SLP_SETTING_CALL_ALERT_VIB) {
150             if(ad->hnd_hpt < 0)
151                 {
152                         SETTING_TRACE_DEBUG("[ERROR] Can't use haptic handle.");
153                         return;
154                 }
155                 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
156                         SETTING_TRACE("ERROR haptic_stop_all_effects");
157                         /* return; */
158                 }
159                 setting_profile_play_vibration(ad,
160                                                setting_profile_get_call_playing_vib_by_vconf_value
161                                                (data_subItem->chk_status));
162         }
163 }
164
165 static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info)
166 {
167         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
168         retm_if(data == NULL, "Invalid argument: data is NULL");
169
170         SettingProfileUG *ad = (SettingProfileUG *) data;
171         Elm_Object_Item *parentItem = event_info;       /* parent item */
172         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
173         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
174
175         Evas_Object *rgd;
176         if (data_parentItem == ad->data_call_alert_vib) {
177                 rgd = elm_radio_add(scroller);
178                 elm_radio_value_set(rgd, -1);
179                 setting_create_Gendial_exp_sub_field(scroller,
180                                                      &(ad->itc_1icon_1text_sub),
181                                                      __sound_sub_list_sel_cb,
182                                                      ad, parentItem,
183                                                      SWALLOW_Type_1RADIO, rgd,
184                                                      0,
185                                                      "IDS_ST_BODY_VIBRATION_1",
186                                                      NULL);
187
188                 setting_create_Gendial_exp_sub_field(scroller,
189                                                      &(ad->itc_1icon_1text_sub),
190                                                      __sound_sub_list_sel_cb,
191                                                      ad, parentItem,
192                                                      SWALLOW_Type_1RADIO, rgd,
193                                                      1,
194                                                      "IDS_ST_BODY_VIBRATION_2",
195                                                      NULL);
196
197                 setting_create_Gendial_exp_sub_field(scroller,
198                                                      &(ad->itc_1icon_1text_sub),
199                                                      __sound_sub_list_sel_cb,
200                                                      ad, parentItem,
201                                                      SWALLOW_Type_1RADIO, rgd,
202                                                      2,
203                                                      "IDS_ST_BODY_VIBRATION_3",
204                                                      NULL);
205
206                 setting_update_chk_status(rgd,
207                                           data_parentItem->
208                                           int_slp_setting_binded);
209
210         } else if (data_parentItem == ad->data_msg_alert_repeat
211                    || data_parentItem == ad->data_email_alert_repeat) {
212                 rgd = elm_radio_add(scroller);
213                 elm_radio_value_set(rgd, -1);
214                 setting_create_Gendial_exp_sub_field(scroller,
215                                                      &(ad->itc_1icon_1text_sub),
216                                                      __sound_sub_list_sel_cb,
217                                                      ad, parentItem,
218                                                      SWALLOW_Type_1RADIO, rgd,
219                                                      0,
220                                                      _(SETTING_SOUND_TEXT_REPEAT_ONCE),
221                                                      NULL);
222
223                 setting_create_Gendial_exp_sub_field(scroller,
224                                                      &(ad->itc_1icon_1text_sub),
225                                                      __sound_sub_list_sel_cb,
226                                                      ad, parentItem,
227                                                      SWALLOW_Type_1RADIO, rgd,
228                                                      1,
229                                                      _(SETTING_SOUND_TEXT_REPEAT_2MIN),
230                                                      NULL);
231
232                 setting_create_Gendial_exp_sub_field(scroller,
233                                                      &(ad->itc_1icon_1text_sub),
234                                                      __sound_sub_list_sel_cb,
235                                                      ad, parentItem,
236                                                      SWALLOW_Type_1RADIO, rgd,
237                                                      2,
238                                                      _(SETTING_SOUND_TEXT_REPEAT_5MIN),
239                                                      NULL);
240                 setting_create_Gendial_exp_sub_field(scroller,
241                                                      &(ad->itc_1icon_1text_sub),
242                                                      __sound_sub_list_sel_cb,
243                                                      ad, parentItem,
244                                                      SWALLOW_Type_1RADIO, rgd,
245                                                      3,
246                                                      _(SETTING_SOUND_TEXT_REPEAT_10MIN),
247                                                      NULL);
248
249                 setting_update_chk_status(rgd,
250                                           data_parentItem->int_slp_setting_binded);
251         }
252 }
253
254 static void __mm_player_msg_cb(void *user_param)
255 {
256         ret_if(user_param == NULL);
257         SettingProfileUG *ad = (SettingProfileUG *)user_param;
258         /*switch(message)
259         {
260                 case MM_MESSAGE_END_OF_STREAM:
261                         SETTING_TRACE_DEBUG("End of Stream");
262                         setting_profile_close_all_mm_players(ad);
263                         return TRUE;
264                 default:
265                         return FALSE;
266         }*/
267         SETTING_TRACE("completed_cb is called.");
268         setting_profile_close_all_mm_players(ad);
269 }
270
271 void __ringtone_start_change_cb(void *data, Evas_Object *obj, void *event_info)
272 {
273         ret_if(data == NULL);
274
275         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
276         SettingProfileUG *ad = list_item->userdata;
277
278         ad->cur_vol_type = SETTING_VOL_TYPE_RINGTONE;
279         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
280 }
281 void __noti_start_change_cb(void *data, Evas_Object *obj, void *event_info)
282 {
283         ret_if(data == NULL);
284
285         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
286         SettingProfileUG *ad = list_item->userdata;
287
288         ad->cur_vol_type = SETTING_VOL_TYPE_NOTIFICATION;
289         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_NOTIFICATION);
290 }
291 void __media_start_change_cb(void *data, Evas_Object *obj, void *event_info)
292 {
293         ret_if(data == NULL);
294
295         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
296         SettingProfileUG *ad = list_item->userdata;
297
298         ad->cur_vol_type = SETTING_VOL_TYPE_MEDIA;
299         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_MEDIA);
300 }
301 void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info)
302 {
303         ret_if(data == NULL);
304
305         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
306         SettingProfileUG *ad = list_item->userdata;
307
308         ad->cur_vol_type = SETTING_VOL_TYPE_SYSTEM;
309         setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_SYSTEM);
310 }
311
312 void __noti_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
313 {
314         ret_if(data == NULL);
315
316         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
317         SettingProfileUG *ad = list_item->userdata;
318
319         ad->cur_vol_type = SETTING_VOL_TYPE_NOTI_VIB;
320         setting_profile_close_all_mm_players(ad);
321
322         int err = 0;
323         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
324         svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, MAX_COMMON_BUFFER_LEN);
325         haptic_stop_all_effects(ad->hnd_hpt);
326         err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
327         if (err < 0)
328                         SETTING_TRACE("Failed to play haptic monotone");
329 }
330
331 void __haptic_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
332         {
333         SETTING_TRACE_BEGIN;
334         ret_if(data == NULL);
335
336         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
337         SettingProfileUG *ad = list_item->userdata;
338
339         ad->cur_vol_type = SETTING_VOL_TYPE_HAPTIC_VIB;
340         setting_profile_close_all_mm_players(ad);
341
342         int err = 0;
343         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
344         svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, MAX_COMMON_BUFFER_LEN);
345         haptic_stop_all_effects(ad->hnd_hpt);
346         err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
347
348         if (err < 0)
349                 SETTING_TRACE("Failed to play haptic monotone");
350 }
351
352 void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
353 {
354         SETTING_TRACE_BEGIN;
355         ret_if(data == NULL);
356
357         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
358         SettingProfileUG *ad = list_item->userdata;
359
360         char    *pa_tone_path = NULL;
361         player_h **player = NULL;
362
363         double   value = elm_slider_value_get(obj);
364         list_item->chk_status = (unsigned int)(value+0.5);
365
366         switch(ad->cur_vol_type)
367         {
368                 case SETTING_VOL_TYPE_RINGTONE:
369                         sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
370                         player = &(ad->mp_ringtone);
371                         if(*player != NULL)
372                                 return;
373                         SETTING_TRACE_DEBUG("ringtone player will be created");
374                         pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
375                         if(pa_tone_path == NULL)
376                         {
377                                 pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
378
379                                 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) {
380                                         FREE(pa_tone_path);
381                                         return;
382                                 }
383                         }
384                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
385                                                         pa_tone_path,
386                                                         (float)value,
387                                                         SOUND_TYPE_RINGTONE);
388                         break;
389                 case SETTING_VOL_TYPE_NOTIFICATION:
390                         sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
391                         player = &(ad->mp_noti);
392                         if(*player != NULL)
393                                 return;
394                         SETTING_TRACE_DEBUG("noti player will be created");
395                         pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
396                         if(pa_tone_path == NULL)
397                         {
398                                 pa_tone_path = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
399                                 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0) {
400                                         FREE(pa_tone_path);
401                                         return;
402                                 }
403                         }
404                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
405                                                         pa_tone_path,
406                                                         (float)value,
407                                                         SOUND_TYPE_NOTIFICATION);
408                         break;
409                 case SETTING_VOL_TYPE_MEDIA:
410                         sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
411                         player = &(ad->mp_media);
412                         if(*player != NULL)
413                                 return;
414                         SETTING_TRACE_DEBUG("media player will be created");
415                         pa_tone_path = (char*)strdup(SETTING_DEFAULT_MEDIA_TONE);
416
417                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
418                                                         pa_tone_path,
419                                                         (float)value,
420                                                         SOUND_TYPE_MEDIA);
421                         break;
422                 case SETTING_VOL_TYPE_SYSTEM:
423                         sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
424                         player = &(ad->mp_sys);
425                         if(*player != NULL)
426                                 return;
427                         SETTING_TRACE_DEBUG("ringtone player will be created");
428                         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
429                         svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
430
431                         setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
432                                                         pattern_file,
433                                                         (float)value,
434                                                         SOUND_TYPE_SYSTEM);
435                         break;
436                 default:
437                 return;
438         }
439
440         if(pa_tone_path) {
441                 free(pa_tone_path);
442                 pa_tone_path = NULL;
443         }
444
445         SETTING_TRACE_END;
446 }
447
448 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
449 {
450         ret_if(data == NULL);
451
452         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
453         SettingProfileUG *ad = list_item->userdata;
454
455         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
456                 SETTING_TRACE("ERROR haptic_stop_all_effects");
457                 /* return; */
458         }
459 #if DISABLED_CODE
460         double value = 0.0;
461         switch(ad->cur_vol_type)
462         {
463                 case SETTING_VOL_TYPE_NOTI_VIB:
464                         if(ad->data_vib_volume)
465                         {
466                                 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
467                                 list_item->chk_status = (int)(value + 0.5);
468                                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status);
469                                 if(value < 0.5)
470                                         elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
471                                 else
472                                         elm_slider_value_set(ad->data_vib_volume->eo_check, list_item->chk_status);
473                         }
474                         break;
475                 case SETTING_VOL_TYPE_HAPTIC_VIB:
476                         if(ad->data_touch_vib)
477                         {
478                                 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
479                                 list_item->chk_status = (int)(value + 0.5);
480                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status);
481                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, list_item->chk_status);
482                                 if(value < 0.5)
483                                         elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
484                                 else
485                                         elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
486                         }
487                         break;
488                 default:
489                         break;
490         }
491 #endif
492         ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
493         SETTING_TRACE_END;
494 }
495
496 static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
497 {
498         SETTING_TRACE_BEGIN;
499         ret_if(data == NULL);
500
501         SettingProfileUG *ad = (SettingProfileUG *) data;
502
503         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
504         Setting_GenGroupItem_Data *list_item =
505             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
506
507         /* backup each slider's value */
508         if(list_item == ad->data_call_volume)
509                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
510         else if(list_item == ad->data_noti_volume)
511                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
512         else if(list_item == ad->data_media_volume)
513                 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
514         else if(list_item == ad->data_touch_volume)
515                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
516         else if(list_item == ad->data_vib_volume)
517                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status);
518         else if(list_item == ad->data_touch_vib)
519                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status);
520 }
521
522 static Evas_Object *__get_main_list(void *data)
523 {
524         retv_if(data == NULL, NULL);
525
526         SettingProfileUG *ad = (SettingProfileUG *) data;
527
528         __setting_profile_ug_key_grab(ad);
529
530         if(ad->sub_view[SETTING_PROF_VIEW_VOL])
531                 return ad->sub_view[SETTING_PROF_VIEW_VOL];
532
533         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
534         elm_object_style_set(genlist, "dialogue");
535         retvm_if(genlist == NULL, NULL,
536                  "Cannot set genlist object as contento of layout");
537         elm_genlist_clear(genlist);     /* first to clear list */
538
539         int vconf_value = 0;
540         int mm_value = 0;
541
542         Elm_Object_Item *item = elm_genlist_item_append(genlist,
543                                                                 &(ad->itc_seperator), NULL, NULL,
544                                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
545         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
546
547         /* a.use sound */
548         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
549                 vconf_value = TRUE;     /*  default value of sound : on */
550         ad->data_sound =
551             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
552                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
553                                              ad, SWALLOW_Type_1TOGGLE, NULL,
554                                              NULL, vconf_value,
555                                              SETTING_SOUND_TEXT_SOUND, NULL,
556                                              setting_profile_sound_main_Gendial_chk_cb);
557         if (ad->data_sound) {
558                 ad->data_sound->userdata = ad;
559         } else {
560                 SETTING_TRACE_ERROR("ad->data_sound is NULL");
561         }
562         /* b.use vib */
563         if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
564                 vconf_value = TRUE;     /*  default value of vibration : on */
565         ad->data_vibration =
566             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
567                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
568                                              ad, SWALLOW_Type_1TOGGLE, NULL,
569                                              NULL, vconf_value,
570                                              SETTING_SOUND_TEXT_VIBRATION, NULL,
571                                              setting_profile_sound_main_Gendial_chk_cb);
572         if (ad->data_vibration) {
573                 ad->data_vibration->userdata = ad;
574         } else {
575                 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
576         }
577
578         (void)setting_create_Gendial_field_titleItem(genlist,
579                                                      &(ad->itc_group_item),
580                                                      "IDS_ST_BODY_VOLUME", NULL);
581
582         /* d.call volumn. */
583         if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
584                 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
585         ad->data_call_volume =
586             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
587                                              NULL,
588                                              SWALLOW_Type_LAYOUT_SLIDER,
589                                              IMG_SLIDER_BTN_VOLUME01,
590                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
591                                              SETTING_SOUND_TEXT_INCOMING_CALL,
592                                              NULL,
593                                              setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
594         if (ad->data_call_volume) {
595                 ad->data_call_volume->win_main = ad->win_main_layout;
596                 ad->data_call_volume->evas = ad->evas;
597                 ad->data_call_volume->isIndicatorVisible = true;
598                 ad->data_call_volume->slider_min = 0;
599                 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
600                 ad->data_call_volume->userdata = ad;
601                 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
602                 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
603                 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
604         } else {
605                 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
606         }
607
608         /* e.noti volumn */
609         if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
610                 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
611
612         (void)setting_create_Gendial_field_titleItem(genlist,
613                                                      &(itc_group_item),
614                                                      SETTING_SOUND_TEXT_NOTIFICATION, NULL);
615         ad->data_noti_volume =
616             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
617                                              NULL,
618                                              SWALLOW_Type_LAYOUT_SLIDER,
619                                              IMG_SLIDER_BTN_VOLUME01,
620                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
621                                              NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
622                                              NULL,
623                                              setting_profile_sound_main_noti_sound_slider_value_change_cb);
624         if (ad->data_noti_volume) {
625                 ad->data_noti_volume->win_main = ad->win_main_layout;
626                 ad->data_noti_volume->evas = ad->evas;
627                 ad->data_noti_volume->isIndicatorVisible = true;
628                 ad->data_noti_volume->slider_min = 0;
629                 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
630                 ad->data_noti_volume->userdata = ad;
631                 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
632                 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
633                 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
634         } else {
635                 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
636         }
637
638         /* g.media volume */
639         if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
640                 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
641
642         (void)setting_create_Gendial_field_titleItem(genlist,
643                                                      &(itc_group_item),
644                                                      SETTING_SOUND_TEXT_MEDIA, NULL);
645         ad->data_media_volume =
646             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
647                                              NULL,
648                                              SWALLOW_Type_LAYOUT_SLIDER,
649                                              IMG_SLIDER_BTN_VOLUME01,
650                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
651                                              NULL, NULL,
652                                              setting_profile_sound_main_media_sound_slider_value_change_cb);
653         if (ad->data_media_volume) {
654                 ad->data_media_volume->win_main = ad->win_main_layout;
655                 ad->data_media_volume->evas = ad->evas;
656                 ad->data_media_volume->isIndicatorVisible = true;
657                 ad->data_media_volume->slider_min = 0;
658                 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
659                 ad->data_media_volume->userdata = ad;
660                 ad->data_media_volume->start_change_cb = __media_start_change_cb;
661                 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
662                 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
663         } else {
664                 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
665         }
666
667         /* h.system volume */
668         if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
669         {
670                 SETTING_TRACE_DEBUG("Fail to get volume");
671                 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
672         }
673         (void)setting_create_Gendial_field_titleItem(genlist,
674                                                      &(itc_group_item),
675                                                      SETTING_SOUND_TEXT_SYSTEM, NULL);
676         ad->data_touch_volume =
677             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
678                                              NULL,
679                                              SWALLOW_Type_LAYOUT_SLIDER,
680                                              IMG_SLIDER_BTN_VOLUME01,
681                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
682                                              NULL, NULL,
683                                              settings_profile_sound_main_sys_sound_slider_value_change_cb);
684         if (ad->data_touch_volume) {
685                 ad->data_touch_volume->win_main = ad->win_main_layout;
686                 ad->data_touch_volume->evas = ad->evas;
687                 ad->data_touch_volume->isIndicatorVisible = true;
688                 ad->data_touch_volume->slider_min = 0;
689                 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
690                 ad->data_touch_volume->userdata = ad;
691                 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
692                 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
693                 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
694         } else {
695                 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
696         }
697
698         (void)setting_create_Gendial_field_titleItem(genlist,
699                                                      &(ad->itc_group_item),
700                                                      "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
701
702         /* f.noti vib */
703         if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0)
704                 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT;     /*  default value of notification vibration volume : 5 */
705
706         (void)setting_create_Gendial_field_titleItem(genlist,
707                                                      &(itc_group_item),
708                                                      SETTING_SOUND_TEXT_NOTIFICATION, NULL);
709         ad->data_vib_volume =
710             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
711                                              NULL,
712                                              SWALLOW_Type_LAYOUT_SLIDER,
713                                              IMG_VIBRATION_ICON_01,
714                                              IMG_VIBRATION_ICON_02, vconf_value,
715                                              NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
716                                              NULL,
717                                              setting_profile_sound_main_vib_sound_slider_value_change_cb);
718         if (ad->data_vib_volume) {
719                 ad->data_vib_volume->win_main = ad->win_main_layout;
720                 ad->data_vib_volume->evas = ad->evas;
721                 ad->data_vib_volume->isIndicatorVisible = true;
722                 ad->data_vib_volume->slider_min = 0;
723                 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
724                 ad->data_vib_volume->userdata = ad;
725                 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
726                 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
727                 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
728         } else {
729                 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
730         }
731
732         /* i.haptic vib */
733         if (vconf_get_int
734             (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
735                 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT;   /*  default value of haptic vibration volume : 3 */
736
737         (void)setting_create_Gendial_field_titleItem(genlist,
738                                                      &(itc_group_item),
739                                                      "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL);
740         ad->data_touch_vib =
741             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
742                                              NULL,
743                                              SWALLOW_Type_LAYOUT_SLIDER,
744                                              IMG_VIBRATION_ICON_01,
745                                              IMG_VIBRATION_ICON_02, vconf_value,
746                                              NULL, NULL,
747                                              setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
748         if (ad->data_touch_vib) {
749                 ad->data_touch_vib->win_main = ad->win_main_layout;
750                 ad->data_touch_vib->evas = ad->evas;
751                 ad->data_touch_vib->isIndicatorVisible = true;
752                 ad->data_touch_vib->slider_min = 0;
753                 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
754                 ad->data_touch_vib->userdata = ad;
755                 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
756                 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
757                 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
758         } else {
759                 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
760         }
761
762         setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
763                                          NULL, ad,
764                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
765                                          NULL, NULL, 0, SOUND_DESC, NULL, NULL);
766         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
767                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
768
769         /* Touch sounds */
770         if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
771                 vconf_value = TRUE;     /*  default value of touch sounds : on */
772
773         ad->data_touch_sounds =
774             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
775                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
776                                              ad, SWALLOW_Type_1TOGGLE, NULL,
777                                              NULL, vconf_value,
778                                              "IDS_ST_BODY_TOUCH_SOUNDS",
779                                              NULL,
780                                              setting_profile_sound_main_Gendial_chk_cb);
781         if (ad->data_touch_sounds) {
782                 ad->data_touch_sounds->userdata = ad;
783         } else {
784                 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
785         }
786
787         setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
788                                          NULL, ad,
789                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
790                                          NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
791         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
792                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
793
794         __change_state_of_sliderbars(ad);
795
796         //evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
797
798         ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
799
800         return ad->sub_view[SETTING_PROF_VIEW_VOL];
801 }
802
803 static Evas_Object *__get_ringtone_list(void *data)
804 {
805         retv_if(data == NULL, NULL);
806         SettingProfileUG *ad = (SettingProfileUG *) data;
807
808         if(ad->sub_view[SETTING_PROF_VIEW_RTN])
809                 return ad->sub_view[SETTING_PROF_VIEW_RTN];
810
811         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
812         elm_object_style_set(genlist, "dialogue");
813         retvm_if(genlist == NULL, NULL,
814                  "Cannot set genlist object as contento of layout");
815         elm_genlist_clear(genlist);     /* first to clear list */
816         setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
817
818         /*  a. incoming call group */
819         (void)setting_create_Gendial_field_titleItem(genlist,
820                                                      &(ad->itc_group_item),
821                                                      SETTING_SOUND_TEXT_INCOMING_CALL,
822                                                      NULL);
823
824         /*  a-1. ringtone */
825         int vconf_ret = 0;
826         char *sub_desc = NULL;
827         char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
828         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
829         {
830                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
831                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
832                 if(vconf_ret < 0)
833                         SETTING_TRACE_DEBUG("failed to set vconf");
834         }
835         sub_desc = setting_file_basename(pa_ringtone);
836
837         ad->data_call_alert_tone =
838             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
839                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
840                                              ad, SWALLOW_Type_INVALID, NULL,
841                                              NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
842                                              sub_desc, NULL);
843         if (ad->data_call_alert_tone) {
844                 ad->data_call_alert_tone->userdata = ad;
845         } else {
846                 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
847         }
848
849         FREE(pa_ringtone);
850         G_FREE(sub_desc);
851
852         /*  b. notification */
853         (void)setting_create_Gendial_field_titleItem(genlist,
854                                                      &(ad->itc_group_item),
855                                                      SETTING_SOUND_TEXT_NOTIFICATION,
856                                                      NULL);
857
858         int repeat_value = 0;
859
860         /*  b-1. msg ringtone */
861         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
862         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
863         {
864                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
865                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
866                 if(vconf_ret < 0)
867                         SETTING_TRACE_DEBUG("failed to set vconf");
868         }
869         sub_desc = setting_file_basename(pa_ringtone);
870
871         ad->data_msg_alert_tone =
872             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
873                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
874                                              ad, SWALLOW_Type_INVALID, NULL,
875                                              NULL, 0,
876                                              SETTING_SOUND_TEXT_MSG_ALERT,
877                                              sub_desc, NULL);
878         if (ad->data_msg_alert_tone) {
879                 ad->data_msg_alert_tone->userdata = ad;
880         } else {
881                 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
882         }
883         FREE(pa_ringtone);
884         G_FREE(sub_desc);
885
886         /*  b-2. msg alert repetition */
887         if (vconf_get_int
888             (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
889                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
890         ad->data_msg_alert_repeat =
891             setting_create_Gendial_exp_parent_field(genlist,
892                                                     &(ad->itc_2text_3_parent),
893                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
894                                                     ad, SWALLOW_Type_INVALID,
895                                                     SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
896                                                     _(repeat_type[repeat_value]));
897         if (ad->data_msg_alert_repeat) {
898                 ad->data_msg_alert_repeat->int_slp_setting_binded =
899                         INT_SLP_SETTING_MSG_ALERT_REPEAT;
900         } else {
901                 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
902         }
903
904         /*  b-3. email ringtone */
905         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
906         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
907         {
908                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
909                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
910                 if(vconf_ret < 0)
911                         SETTING_TRACE_DEBUG("failed to set vconf");
912         }
913         sub_desc = setting_file_basename(pa_ringtone);
914
915         ad->data_email_alert_tone =
916             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
917                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
918                                              ad, SWALLOW_Type_INVALID, NULL,
919                                              NULL, 0,
920                                              SETTING_SOUND_TEXT_EMAIL_ALERT,
921                                              sub_desc, NULL);
922         if (ad->data_email_alert_tone) {
923                 ad->data_email_alert_tone->userdata = ad;
924         } else {
925                 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
926         }
927         FREE(pa_ringtone);
928         G_FREE(sub_desc);
929
930         /*  b-4. email alert repetition */
931         if (vconf_get_int
932             (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
933              &repeat_value) != 0)
934                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
935         ad->data_email_alert_repeat =
936             setting_create_Gendial_exp_parent_field(genlist,
937                                                     &(ad->itc_2text_3_parent),
938                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
939                                                     ad, SWALLOW_Type_INVALID,
940                                                     SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
941                                                     _(repeat_type[repeat_value]));
942         if (ad->data_email_alert_repeat) {
943                 ad->data_email_alert_repeat->int_slp_setting_binded =
944                         INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
945         } else {
946                 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
947         }
948
949         Elm_Object_Item *item = NULL;
950         item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
951                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
952         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
953
954         ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
955
956         return ad->sub_view[SETTING_PROF_VIEW_RTN];
957 }
958
959 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
960 {
961         //appcore_measure_start();
962         retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
963         retm_if(data == NULL, "Invalid argmuent: data is NULL");
964
965         SettingProfileUG *ad = (SettingProfileUG *) data;
966
967         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
968                 SETTING_TRACE("ERROR haptic_stop_all_effects");
969                 /* return; */
970         }
971         setting_profile_close_all_mm_players(ad);
972
973         Evas_Object *sub_view = NULL;
974         Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
975         const char *tab_lable = elm_object_item_text_get(sel_item);
976         ret_if(!tab_lable);
977         //SETTING_TRACE("tab_lable:%s", tab_lable);
978         if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
979                 if(ad->hnd_hpt)
980                         haptic_stop_all_effects(ad->hnd_hpt);
981                 sub_view = __get_main_list(ad);
982         } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
983                 sub_view = __get_ringtone_list(ad);
984         }
985
986         Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
987         ret_if(old_sub_view == sub_view);
988
989         if (sub_view) {
990                 if (old_sub_view)
991                 {
992                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
993                         evas_object_hide(old_sub_view);
994                 }
995                 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
996                 evas_object_show(sub_view);
997         }
998 }
999
1000 static int setting_profile_sound_main_create(void *cb)
1001 {
1002         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1003
1004         SettingProfileUG *ad = (SettingProfileUG *) cb;
1005
1006         ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1007         ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1008
1009         /*  view layout */
1010         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1011         elm_layout_theme_set(view_layout, "layout", "application", "default");
1012         evas_object_show(view_layout);
1013         ad->view_layout = view_layout;
1014
1015         Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1016         if(tabbar == NULL)
1017                 return SETTING_RETURN_FAIL;
1018
1019         elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1020         ad->ctrl_bar = tabbar;
1021         elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1022         elm_object_style_set(tabbar, "tabbar");
1023         elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
1024
1025         ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1026                                         IMG_CTRL_ICON_VOLUME,
1027                                         VOLUME_STR, __view_change_cb, ad);
1028
1029         ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1030                                         IMG_CTRL_ICON_RINGTONE,
1031                                         RINGTONE_STR, __view_change_cb, ad);
1032
1033         elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1034         elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1035
1036         Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1037         elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1038         evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1039
1040         Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, _(KeyStr_Sounds), ug_back_btn, NULL, ad->view_layout, "tabbar");
1041         elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
1042         //elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1043
1044         setting_view_profile_sound_main.is_create = TRUE;
1045
1046         return SETTING_RETURN_SUCCESS;
1047 }
1048
1049 static int setting_profile_sound_main_destroy(void *cb)
1050 {
1051         /* error check */
1052         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1053
1054         SettingProfileUG *ad = (SettingProfileUG *) cb;
1055
1056         __setting_profile_ug_key_ungrab(ad);
1057
1058         if (ad->ly_main != NULL) {
1059                 //Fix the memory leak,
1060                 //Manage ad->sub_view[] separately, unset first, then delete in together
1061                 if (ad->view_layout)
1062                 {
1063                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1064                 }
1065                 int i = SETTING_PROF_VIEW_VOL;
1066                 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1067                 {
1068                         evas_object_del(ad->sub_view[i]);
1069                 }
1070
1071                 evas_object_del(ad->ly_main);
1072                 setting_view_profile_sound_main.is_create = FALSE;
1073         }
1074         return SETTING_RETURN_SUCCESS;
1075 }
1076
1077 static int setting_profile_sound_main_update(void *cb)
1078 {
1079         SETTING_TRACE_BEGIN;
1080         /* error check */
1081         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1082
1083         SettingProfileUG *ad = (SettingProfileUG *) cb;
1084
1085         if (ad->ly_main != NULL) {
1086                 evas_object_show(ad->ly_main);
1087         }
1088
1089         int volume = 0;
1090
1091         sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
1092         SETTING_TRACE_DEBUG("ringtone volume is %d", volume);
1093         if(ad->data_call_volume && ad->data_call_volume->eo_check)
1094                 elm_slider_value_set(ad->data_call_volume->eo_check, (double)volume);
1095
1096         return SETTING_RETURN_SUCCESS;
1097 }
1098
1099 static int setting_profile_sound_main_cleanup(void *cb)
1100 {
1101         /* error check */
1102         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1103
1104         SettingProfileUG *ad = (SettingProfileUG *) cb;
1105
1106         if (ad->ly_main != NULL) {
1107                 evas_object_hide(ad->ly_main);
1108         }
1109
1110         return SETTING_RETURN_SUCCESS;
1111 }
1112
1113 /* ***************************************************
1114  *
1115  *general func
1116  *
1117  ***************************************************/
1118
1119 /* ***************************************************
1120  *
1121  *call back func
1122  *
1123  ***************************************************/
1124
1125 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1126                                                    Evas_Object *obj,
1127                                                    void *event_info)
1128 {
1129         /* error check */
1130         ret_if(data == NULL);
1131
1132         SettingProfileUG *ad = (SettingProfileUG *) data;
1133
1134         /* close mm plaer */
1135         setting_profile_close_all_mm_players(ad);
1136         /* close vibration */
1137         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1138                 SETTING_TRACE("ERROR haptic_stop_all_effects");
1139                 /* return; */
1140         }
1141
1142         /* Send destroy request */
1143         ug_destroy_me(ad->ug);
1144
1145         return;
1146 }
1147
1148 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1149 {
1150         ret_if(priv == NULL);
1151         SettingProfileUG *ad = (SettingProfileUG *) priv;
1152
1153         __setting_profile_ug_key_grab(ad);
1154
1155         if (ug) {
1156                 ug_destroy(ug);
1157                 ad->ug_loading = NULL;
1158         }
1159 }
1160
1161 static void
1162 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1163                                                service_h result, void *priv)
1164 {
1165         ret_if(priv == NULL);
1166
1167         SettingProfileUG *ad = (SettingProfileUG *) priv;
1168         char *ringtone_file = NULL;
1169         char *ringtone_path = NULL;
1170
1171         service_get_extra_data(result, "result", &ringtone_path);
1172         if(!ringtone_path)
1173                 return;
1174
1175         SETTING_TRACE("ringtone_path:%s", ringtone_path);
1176
1177         if (ringtone_path != NULL) {
1178                 ringtone_file = setting_file_basename(ringtone_path);
1179                 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1180
1181                 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1182                         if (vconf_set_str
1183                             (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1184                                 if (ad->data_call_alert_tone) {
1185                                         ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1186
1187                                         elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1188                                         elm_genlist_item_update(ad->data_call_alert_tone->item);
1189                                 }
1190                         }
1191                 } else if (0 ==
1192                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1193                         if (vconf_set_str
1194                             (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1195                                 if (ad->data_msg_alert_tone) {
1196                                         ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1197
1198                                         elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1199                                         elm_genlist_item_update(ad->data_msg_alert_tone->item);
1200                                 }
1201                         }
1202                 } else if (0 ==
1203                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1204                         if (vconf_set_str
1205                             (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1206                                 if (ad->data_email_alert_tone) {
1207                                         ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1208
1209                                         elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1210                                         elm_genlist_item_update(ad->data_email_alert_tone->item);
1211                                 }
1212                         }
1213                 }
1214         }
1215
1216         G_FREE(ringtone_file);
1217         return;
1218 }
1219
1220 static void
1221 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1222                              void *priv)
1223 {
1224         ret_if(priv == NULL);
1225
1226         SettingProfileUG *ad = (SettingProfileUG *) priv;
1227         Evas_Object *base;
1228
1229         base = (Evas_Object *) ug_get_layout(ug);
1230         if (!base)
1231                 return;
1232
1233         switch (mode) {
1234                 case UG_MODE_FULLVIEW:
1235                         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1236                         //elm_win_resize_object_add(ad->win_get, base);
1237                         evas_object_show(base);
1238                         break;
1239                 default:
1240                         break;
1241         }
1242 }
1243
1244
1245 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1246 {
1247         ret_if(ad == NULL);
1248
1249         if(ad->ug_loading)
1250         {
1251                 SETTING_TRACE("Myfiles ug is already loaded.");
1252                 return;
1253         }
1254
1255         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1256         if (!cbs)
1257                 return;
1258
1259         cbs->layout_cb = setting_profile_layout_ug_cb;
1260         cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1261         cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1262         cbs->priv = (void *)ad;
1263
1264         service_h svc;
1265         if (service_create(&svc)) {
1266                 FREE(cbs);
1267                 return;
1268         }
1269
1270         const char *pa_cur_ringtone = NULL;
1271         const char *dir_path = NULL;
1272         if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1273                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1274                 if (pa_cur_ringtone == NULL)
1275                 {
1276                         pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
1277                 }
1278                 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1279         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1280                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1281                 if (pa_cur_ringtone == NULL)
1282                         pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
1283                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1284         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1285                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1286                 if (pa_cur_ringtone == NULL)
1287                         pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
1288                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1289         }
1290         SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1291         SETTING_TRACE("dir_path:\t%s", dir_path);
1292
1293         service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1294         service_add_extra_data(svc, "path", dir_path);
1295         service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1296         service_add_extra_data(svc, "file_type", "SOUND");
1297         service_add_extra_data(svc, "drm_type", "DRM_ALL");
1298
1299         SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1300         ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1301         if (NULL == ad->ug_loading) {   /* error handling */
1302                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1303         }
1304
1305         service_destroy(svc);
1306         FREE(cbs);
1307
1308         /** @todo verify it's valid */
1309         if(pa_cur_ringtone) {
1310                 free(pa_cur_ringtone);
1311                 pa_cur_ringtone = NULL;
1312         }
1313
1314         __setting_profile_ug_key_ungrab(ad);
1315         return;
1316 }
1317
1318 static void
1319 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1320                                           void *event_info)
1321 {
1322         /* error check */
1323         ret_if(data == NULL);
1324
1325         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1326         SettingProfileUG *ad = list_item->userdata;
1327
1328         int state = list_item->chk_status = elm_check_state_get(obj);   /*  for genlist update status */
1329
1330         /* restore the selected check status */
1331         list_item->chk_status = state;
1332         elm_check_state_set(list_item->eo_check, state);
1333
1334         if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1335                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1336                         list_item->chk_status = !state;
1337                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1338                 }
1339
1340                 if (list_item->chk_status) {
1341                         setting_enable_genlist_item(ad->data_call_volume->item);
1342                         setting_enable_genlist_item(ad->data_noti_volume->item);
1343                         setting_enable_genlist_item(ad->data_media_volume->item);
1344                         setting_enable_genlist_item(ad->data_touch_volume->item);
1345                 } else {
1346                         setting_profile_close_all_mm_players(ad);
1347                         setting_disable_genlist_item(ad->data_call_volume->item);
1348                         setting_disable_genlist_item(ad->data_noti_volume->item);
1349                         setting_disable_genlist_item(ad->data_media_volume->item);
1350                         setting_disable_genlist_item(ad->data_touch_volume->item);
1351                 }
1352         } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1353                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1354                         list_item->chk_status = !state;
1355                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1356                 }
1357                 if (list_item->chk_status) {
1358                         setting_enable_genlist_item(ad->data_vib_volume->item);
1359                         setting_enable_genlist_item(ad->data_touch_vib->item);
1360
1361                         /* Play vib if vib turns on */
1362                         int err = 0;
1363                         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1364                         svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1365                         haptic_stop_all_effects(ad->hnd_hpt);
1366                         err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5) * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1367
1368                         if (err < 0)
1369                                 SETTING_TRACE("Failed to play haptic monotone");
1370                 } else {
1371                         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1372                                 SETTING_TRACE("ERROR haptic_stop_all_effects");
1373                         }
1374                         setting_disable_genlist_item(ad->data_vib_volume->item);
1375                         setting_disable_genlist_item(ad->data_touch_vib->item);
1376                 }
1377         }
1378         /* additional items */
1379         else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1380                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1381                         list_item->chk_status = !state;
1382                         elm_check_state_set(list_item->eo_check, !state);
1383                 }
1384         }
1385         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1386                 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1387                         list_item->chk_status = !state;
1388                         elm_check_state_set(list_item->eo_check, !state);
1389                 }
1390         }
1391
1392         /* end */
1393
1394 }
1395
1396 static void
1397 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1398                                                     Evas_Object *obj,
1399                                                     void *event_info)
1400 {
1401         /* error check */
1402         ret_if(data == NULL);
1403         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1404
1405         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1406         elm_genlist_item_selected_set(item, 0);
1407         Setting_GenGroupItem_Data *list_item =
1408             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1409
1410         SettingProfileUG *ad = data;
1411
1412         if(ad->hnd_hpt)
1413                 haptic_stop_all_effects(ad->hnd_hpt);
1414
1415         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1416         if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1417             || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1418             || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1419                 ad->ringtone_type = list_item->keyStr;
1420                 setting_profile_sound_main_create_myfile_ug(ad);
1421         } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1422                 int old_status = elm_check_state_get(list_item->eo_check);
1423                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1424                         /* new status */
1425                         list_item->chk_status = !old_status;
1426                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1427                         if (list_item->chk_status) {
1428                                 setting_enable_genlist_item(ad->data_call_volume->item);
1429                                 setting_enable_genlist_item(ad->data_noti_volume->item);
1430                                 setting_enable_genlist_item(ad->data_media_volume->item);
1431                                 setting_enable_genlist_item(ad->data_touch_volume->item);
1432                         } else {
1433                                 setting_profile_close_all_mm_players(ad);
1434                                 setting_disable_genlist_item(ad->data_call_volume->item);
1435                                 setting_disable_genlist_item(ad->data_noti_volume->item);
1436                                 setting_disable_genlist_item(ad->data_media_volume->item);
1437                                 setting_disable_genlist_item(ad->data_touch_volume->item);
1438                         }
1439                 }
1440                 return;
1441         } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1442                 int old_status = elm_check_state_get(list_item->eo_check);
1443                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1444                         /* new status */
1445                         list_item->chk_status = !old_status;
1446                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1447                         if (list_item->chk_status) {
1448                                 setting_enable_genlist_item(ad->data_vib_volume->item);
1449                                 setting_enable_genlist_item(ad->data_touch_vib->item);
1450
1451                                 /* Play vib if vib turns on */
1452                                 int err = 0;
1453                                 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1454                                 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1455                                 haptic_stop_all_effects(ad->hnd_hpt);
1456                                 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5) * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1457
1458                                 if (err < 0)
1459                                         SETTING_TRACE("Failed to play haptic monotone");
1460                         } else {
1461                                 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1462                                         SETTING_TRACE("ERROR haptic_stop_all_effects");
1463                                 }
1464                                 setting_disable_genlist_item(ad->data_vib_volume->item);
1465                                 setting_disable_genlist_item(ad->data_touch_vib->item);
1466                         }
1467                 }
1468                 return;
1469         }
1470         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1471                 int old_status = elm_check_state_get(list_item->eo_check);
1472                 /* To do : set vconfkey for touch sounds */
1473                 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1474                         /* new status */
1475                         list_item->chk_status = !old_status;
1476                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1477                 }
1478         }
1479         /* end */
1480         else if (ad->data_msg_alert_repeat == list_item
1481                  || ad->data_email_alert_repeat == list_item) {
1482                 bool status = !elm_genlist_item_expanded_get(item);
1483                 elm_genlist_item_expanded_set(item, status);
1484         }
1485 }
1486
1487 static void
1488 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1489                                                                       Evas_Object *obj,
1490                                                                       void *event_info)
1491 {
1492         /* error check */
1493         ret_if(data == NULL);
1494
1495         double val = elm_slider_value_get(obj);
1496
1497         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1498         SettingProfileUG *ad = list_item->userdata;
1499
1500         if(ad->mp_ringtone == NULL)
1501                 return;
1502
1503         if(list_item->chk_status != (int)(val+0.5))
1504         {
1505                 list_item->chk_status = (int)(val+0.5);
1506                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
1507                 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1508         }
1509 }
1510
1511 static void
1512 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1513                                                              Evas_Object *obj,
1514                                                              void *event_info)
1515 {
1516         /* error check */
1517         ret_if(data == NULL);
1518
1519         double val = elm_slider_value_get(obj);
1520
1521         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1522         SettingProfileUG *ad = list_item->userdata;
1523
1524         if(ad->mp_noti == NULL)
1525                 return;
1526
1527         if(list_item->chk_status != (int)(val+0.5))
1528         {
1529                 list_item->chk_status = val;
1530                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
1531                 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1532         }
1533 }
1534
1535 static void
1536 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1537                                                               Evas_Object *obj,
1538                                                               void *event_info)
1539 {
1540         /* error check */
1541         ret_if(data == NULL);
1542
1543         double val = elm_slider_value_get(obj);
1544
1545         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1546         SettingProfileUG *ad = list_item->userdata;
1547
1548         if(ad->mp_media == NULL)
1549                 return;
1550         if(list_item->chk_status != (int)(val+0.5))
1551         {
1552                 list_item->chk_status = val;
1553                 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
1554                 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1555         }
1556 }
1557
1558 static void
1559 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1560                                                              Evas_Object *obj,
1561                                                              void *event_info)
1562 {
1563         /* error check */
1564         ret_if(data == NULL);
1565
1566         double val = elm_slider_value_get(obj);
1567
1568         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1569         SettingProfileUG *ad = list_item->userdata;
1570
1571         if(ad->mp_sys == NULL)
1572                 return;
1573
1574         if(list_item->chk_status != (int)(val+0.5))
1575         {
1576                 list_item->chk_status = val;
1577                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
1578                 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1579         }
1580 }
1581
1582 static void
1583 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1584                                                             Evas_Object *obj,
1585                                                             void *event_info)
1586 {
1587         SETTING_TRACE_BEGIN;
1588         /* error check */
1589         ret_if(data == NULL);
1590
1591         static double priv_val_db = 5.0;
1592         static int priv_val_int = 0;
1593         double val = elm_slider_value_get(obj);
1594         SETTING_TRACE("val = %f", val);
1595         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1596         SettingProfileUG *ad = list_item->userdata;
1597
1598         int value;
1599         int err;
1600
1601         value = (int)(val + 0.5);       /*  to sync displayed value on slider */
1602         list_item->chk_status = value;
1603         if (value != priv_val_int) {
1604                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, value);
1605                 SETTING_TRACE_DEBUG("current %d", value);
1606                 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1607                 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1608                 haptic_stop_all_effects(ad->hnd_hpt);
1609                 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1610
1611                 if (err < 0)
1612                         SETTING_TRACE("Failed to play haptic monotone");
1613                 priv_val_int = value;
1614         }
1615         priv_val_db = val;
1616
1617 }
1618
1619 static void
1620 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1621                                                                  Evas_Object *
1622                                                                  obj, void
1623                                                                  *event_info)
1624 {
1625         SETTING_TRACE_BEGIN;
1626         /* error check */
1627         ret_if(data == NULL);
1628
1629         static double priv_val_db = 3.0;
1630         static int priv_val_int = 0;
1631         double val = elm_slider_value_get(obj);
1632         SETTING_TRACE("val = %f", val);
1633         Setting_GenGroupItem_Data *list_item =
1634             (Setting_GenGroupItem_Data *) data;
1635         SettingProfileUG *ad = list_item->userdata;
1636
1637         int value;
1638         int err;
1639
1640         value = (int)(val + 0.5);       /*  to sync displayed value on slider */
1641         list_item->chk_status = value;
1642         if (value != priv_val_int) {
1643                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
1644                 SETTING_TRACE_DEBUG("current %d", value);
1645                 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1646                 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1647                 haptic_stop_all_effects(ad->hnd_hpt);
1648                 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1649
1650                 if (err < 0)
1651                         SETTING_TRACE("Failed to play haptic monotone");
1652                 priv_val_int = value;
1653         }
1654         priv_val_db = val;
1655 }
1656