Initialize Tizen 2.3
[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.1 (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                         sound_type_e type;
418                         int ret = sound_manager_get_current_sound_type(&type);
419                         SETTING_TRACE("sound_manager_get_current_sound_type() : type %d, ret = %d", type, ret);
420                         if(type != SOUND_TYPE_MEDIA)
421                         {
422                                 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
423                                                                 pa_tone_path,
424                                                                 (float)value,
425                                                                 SOUND_TYPE_MEDIA);
426                         }
427                         break;
428                 case SETTING_VOL_TYPE_SYSTEM:
429                         sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
430                         player = &(ad->mp_sys);
431                         if(*player != NULL)
432                                 return;
433                         SETTING_TRACE_DEBUG("ringtone player will be created");
434
435                         feedback_initialize();
436                         feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_SIP);
437                         feedback_deinitialize();
438                         break;
439                 default:
440                 return;
441         }
442
443         if(pa_tone_path) {
444                 free(pa_tone_path);
445                 pa_tone_path = NULL;
446         }
447
448         SETTING_TRACE_END;
449 }
450
451 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
452 {
453         ret_if(data == NULL);
454
455         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
456         SettingProfileUG *ad = list_item->userdata;
457
458         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
459                 SETTING_TRACE("ERROR haptic_stop_all_effects");
460                 /* return; */
461         }
462 #if DISABLED_CODE
463         double value = 0.0;
464         switch(ad->cur_vol_type)
465         {
466                 case SETTING_VOL_TYPE_NOTI_VIB:
467                         if(ad->data_vib_volume)
468                         {
469                                 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
470                                 list_item->chk_status = (int)(value + 0.5);
471                                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status);
472                                 if(value < 0.5)
473                                         elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
474                                 else
475                                         elm_slider_value_set(ad->data_vib_volume->eo_check, list_item->chk_status);
476                         }
477                         break;
478                 case SETTING_VOL_TYPE_HAPTIC_VIB:
479                         if(ad->data_touch_vib)
480                         {
481                                 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
482                                 list_item->chk_status = (int)(value + 0.5);
483                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status);
484                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, list_item->chk_status);
485                                 if(value < 0.5)
486                                         elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
487                                 else
488                                         elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
489                         }
490                         break;
491                 default:
492                         break;
493         }
494 #endif
495         ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
496         SETTING_TRACE_END;
497 }
498
499 static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
500 {
501         SETTING_TRACE_BEGIN;
502         ret_if(data == NULL);
503
504         SettingProfileUG *ad = (SettingProfileUG *) data;
505
506         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
507         Setting_GenGroupItem_Data *list_item =
508             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
509
510         /* backup each slider's value */
511         if(list_item == ad->data_call_volume)
512                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
513         else if(list_item == ad->data_noti_volume)
514                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
515         else if(list_item == ad->data_media_volume)
516                 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
517         else if(list_item == ad->data_touch_volume)
518                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
519         else if(list_item == ad->data_vib_volume)
520                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status);
521         else if(list_item == ad->data_touch_vib)
522                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status);
523 }
524
525 static Evas_Object *__get_main_list(void *data)
526 {
527         retv_if(data == NULL, NULL);
528
529         SettingProfileUG *ad = (SettingProfileUG *) data;
530
531         __setting_profile_ug_key_grab(ad);
532
533         if(ad->sub_view[SETTING_PROF_VIEW_VOL])
534                 return ad->sub_view[SETTING_PROF_VIEW_VOL];
535
536         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
537         elm_object_style_set(genlist, "dialogue");
538         retvm_if(genlist == NULL, NULL,
539                  "Cannot set genlist object as contento of layout");
540         elm_genlist_clear(genlist);     /* first to clear list */
541
542         int vconf_value = 0;
543         int mm_value = 0;
544
545         Elm_Object_Item *item = elm_genlist_item_append(genlist,
546                                                                 &(ad->itc_seperator), NULL, NULL,
547                                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
548         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
549
550         /* a.use sound */
551         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
552                 vconf_value = TRUE;     /*  default value of sound : on */
553         ad->data_sound =
554             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
555                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
556                                              ad, SWALLOW_Type_1TOGGLE, NULL,
557                                              NULL, vconf_value,
558                                              SETTING_SOUND_TEXT_SOUND, NULL,
559                                              setting_profile_sound_main_Gendial_chk_cb);
560         if (ad->data_sound) {
561                 ad->data_sound->userdata = ad;
562         } else {
563                 SETTING_TRACE_ERROR("ad->data_sound is NULL");
564         }
565         /* b.use vib */
566         if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
567                 vconf_value = TRUE;     /*  default value of vibration : on */
568         ad->data_vibration =
569             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
570                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
571                                              ad, SWALLOW_Type_1TOGGLE, NULL,
572                                              NULL, vconf_value,
573                                              SETTING_SOUND_TEXT_VIBRATION, NULL,
574                                              setting_profile_sound_main_Gendial_chk_cb);
575         if (ad->data_vibration) {
576                 ad->data_vibration->userdata = ad;
577         } else {
578                 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
579         }
580
581         (void)setting_create_Gendial_field_titleItem(genlist,
582                                                      &(ad->itc_group_item),
583                                                      "IDS_ST_BODY_VOLUME", NULL);
584
585         /* d.call volumn. */
586         if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
587                 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
588         ad->data_call_volume =
589             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
590                                              NULL,
591                                              SWALLOW_Type_LAYOUT_SLIDER,
592                                              IMG_SLIDER_BTN_VOLUME01,
593                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
594                                              SETTING_SOUND_TEXT_INCOMING_CALL,
595                                              NULL,
596                                              setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
597         if (ad->data_call_volume) {
598                 ad->data_call_volume->win_main = ad->win_main_layout;
599                 ad->data_call_volume->evas = ad->evas;
600                 ad->data_call_volume->isIndicatorVisible = true;
601                 ad->data_call_volume->slider_min = 0;
602                 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
603                 ad->data_call_volume->userdata = ad;
604                 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
605                 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
606                 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
607         } else {
608                 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
609         }
610
611         /* e.noti volumn */
612         if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
613                 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
614
615         (void)setting_create_Gendial_field_titleItem(genlist,
616                                                      &(itc_group_item),
617                                                      SETTING_SOUND_TEXT_NOTIFICATION, NULL);
618         ad->data_noti_volume =
619             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
620                                              NULL,
621                                              SWALLOW_Type_LAYOUT_SLIDER,
622                                              IMG_SLIDER_BTN_VOLUME01,
623                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
624                                              NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
625                                              NULL,
626                                              setting_profile_sound_main_noti_sound_slider_value_change_cb);
627         if (ad->data_noti_volume) {
628                 ad->data_noti_volume->win_main = ad->win_main_layout;
629                 ad->data_noti_volume->evas = ad->evas;
630                 ad->data_noti_volume->isIndicatorVisible = true;
631                 ad->data_noti_volume->slider_min = 0;
632                 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
633                 ad->data_noti_volume->userdata = ad;
634                 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
635                 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
636                 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
637         } else {
638                 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
639         }
640
641         /* g.media volume */
642         if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
643                 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
644
645         (void)setting_create_Gendial_field_titleItem(genlist,
646                                                      &(itc_group_item),
647                                                      SETTING_SOUND_TEXT_MEDIA, NULL);
648         ad->data_media_volume =
649             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
650                                              NULL,
651                                              SWALLOW_Type_LAYOUT_SLIDER,
652                                              IMG_SLIDER_BTN_VOLUME01,
653                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
654                                              NULL, NULL,
655                                              setting_profile_sound_main_media_sound_slider_value_change_cb);
656         if (ad->data_media_volume) {
657                 ad->data_media_volume->win_main = ad->win_main_layout;
658                 ad->data_media_volume->evas = ad->evas;
659                 ad->data_media_volume->isIndicatorVisible = true;
660                 ad->data_media_volume->slider_min = 0;
661                 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
662                 ad->data_media_volume->userdata = ad;
663                 ad->data_media_volume->start_change_cb = __media_start_change_cb;
664                 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
665                 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
666         } else {
667                 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
668         }
669
670         /* h.system volume */
671         if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
672         {
673                 SETTING_TRACE_DEBUG("Fail to get volume");
674                 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
675         }
676         (void)setting_create_Gendial_field_titleItem(genlist,
677                                                      &(itc_group_item),
678                                                      SETTING_SOUND_TEXT_SYSTEM, NULL);
679         ad->data_touch_volume =
680             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
681                                              NULL,
682                                              SWALLOW_Type_LAYOUT_SLIDER,
683                                              IMG_SLIDER_BTN_VOLUME01,
684                                              IMG_SLIDER_BTN_VOLUME02, mm_value,
685                                              NULL, NULL,
686                                              settings_profile_sound_main_sys_sound_slider_value_change_cb);
687         if (ad->data_touch_volume) {
688                 ad->data_touch_volume->win_main = ad->win_main_layout;
689                 ad->data_touch_volume->evas = ad->evas;
690                 ad->data_touch_volume->isIndicatorVisible = true;
691                 ad->data_touch_volume->slider_min = 0;
692                 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
693                 ad->data_touch_volume->userdata = ad;
694                 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
695                 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
696                 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
697         } else {
698                 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
699         }
700
701         (void)setting_create_Gendial_field_titleItem(genlist,
702                                                      &(ad->itc_group_item),
703                                                      "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
704
705         /* f.noti vib */
706         if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0)
707                 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT;     /*  default value of notification vibration volume : 5 */
708
709         (void)setting_create_Gendial_field_titleItem(genlist,
710                                                      &(itc_group_item),
711                                                      SETTING_SOUND_TEXT_NOTIFICATION, NULL);
712         ad->data_vib_volume =
713             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
714                                              NULL,
715                                              SWALLOW_Type_LAYOUT_SLIDER,
716                                              IMG_VIBRATION_ICON_01,
717                                              IMG_VIBRATION_ICON_02, vconf_value,
718                                              NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
719                                              NULL,
720                                              setting_profile_sound_main_vib_sound_slider_value_change_cb);
721         if (ad->data_vib_volume) {
722                 ad->data_vib_volume->win_main = ad->win_main_layout;
723                 ad->data_vib_volume->evas = ad->evas;
724                 ad->data_vib_volume->isIndicatorVisible = true;
725                 ad->data_vib_volume->slider_min = 0;
726                 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
727                 ad->data_vib_volume->userdata = ad;
728                 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
729                 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
730                 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
731         } else {
732                 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
733         }
734
735         /* i.haptic vib */
736         if (vconf_get_int
737             (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
738                 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT;   /*  default value of haptic vibration volume : 3 */
739
740         (void)setting_create_Gendial_field_titleItem(genlist,
741                                                      &(itc_group_item),
742                                                      "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL);
743         ad->data_touch_vib =
744             setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
745                                              NULL,
746                                              SWALLOW_Type_LAYOUT_SLIDER,
747                                              IMG_VIBRATION_ICON_01,
748                                              IMG_VIBRATION_ICON_02, vconf_value,
749                                              NULL, NULL,
750                                              setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
751         if (ad->data_touch_vib) {
752                 ad->data_touch_vib->win_main = ad->win_main_layout;
753                 ad->data_touch_vib->evas = ad->evas;
754                 ad->data_touch_vib->isIndicatorVisible = true;
755                 ad->data_touch_vib->slider_min = 0;
756                 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
757                 ad->data_touch_vib->userdata = ad;
758                 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
759                 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
760                 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
761         } else {
762                 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
763         }
764
765         setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
766                                          NULL, ad,
767                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
768                                          NULL, NULL, 0, SOUND_DESC, NULL, NULL);
769         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
770                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
771
772         /* Touch sounds */
773         if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
774                 vconf_value = TRUE;     /*  default value of touch sounds : on */
775
776         ad->data_touch_sounds =
777             setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
778                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
779                                              ad, SWALLOW_Type_1TOGGLE, NULL,
780                                              NULL, vconf_value,
781                                              "IDS_ST_BODY_TOUCH_SOUNDS",
782                                              NULL,
783                                              setting_profile_sound_main_Gendial_chk_cb);
784         if (ad->data_touch_sounds) {
785                 ad->data_touch_sounds->userdata = ad;
786         } else {
787                 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
788         }
789
790         setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
791                                          NULL, ad,
792                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
793                                          NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
794         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
795                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
796
797         __change_state_of_sliderbars(ad);
798
799         //evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
800
801         ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
802
803         return ad->sub_view[SETTING_PROF_VIEW_VOL];
804 }
805
806 static Evas_Object *__get_ringtone_list(void *data)
807 {
808         retv_if(data == NULL, NULL);
809         SettingProfileUG *ad = (SettingProfileUG *) data;
810
811         if(ad->sub_view[SETTING_PROF_VIEW_RTN])
812                 return ad->sub_view[SETTING_PROF_VIEW_RTN];
813
814         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
815         elm_object_style_set(genlist, "dialogue");
816         retvm_if(genlist == NULL, NULL,
817                  "Cannot set genlist object as contento of layout");
818         elm_genlist_clear(genlist);     /* first to clear list */
819         setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
820
821         /*  a. incoming call group */
822         (void)setting_create_Gendial_field_titleItem(genlist,
823                                                      &(ad->itc_group_item),
824                                                      SETTING_SOUND_TEXT_INCOMING_CALL,
825                                                      NULL);
826
827         /*  a-1. ringtone */
828         int vconf_ret = 0;
829         char *sub_desc = NULL;
830         char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
831         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
832         {
833                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
834                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
835                 if(vconf_ret < 0)
836                         SETTING_TRACE_DEBUG("failed to set vconf");
837         }
838         sub_desc = setting_file_basename(pa_ringtone);
839
840         ad->data_call_alert_tone =
841             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
842                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
843                                              ad, SWALLOW_Type_INVALID, NULL,
844                                              NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
845                                              sub_desc, NULL);
846         if (ad->data_call_alert_tone) {
847                 ad->data_call_alert_tone->userdata = ad;
848         } else {
849                 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
850         }
851
852         FREE(pa_ringtone);
853         G_FREE(sub_desc);
854
855         /*  b. notification */
856         (void)setting_create_Gendial_field_titleItem(genlist,
857                                                      &(ad->itc_group_item),
858                                                      SETTING_SOUND_TEXT_NOTIFICATION,
859                                                      NULL);
860
861         int repeat_value = 0;
862
863         /*  b-1. msg ringtone */
864         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
865         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
866         {
867                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
868                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
869                 if(vconf_ret < 0)
870                         SETTING_TRACE_DEBUG("failed to set vconf");
871         }
872         sub_desc = setting_file_basename(pa_ringtone);
873
874         ad->data_msg_alert_tone =
875             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
876                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
877                                              ad, SWALLOW_Type_INVALID, NULL,
878                                              NULL, 0,
879                                              SETTING_SOUND_TEXT_MSG_ALERT,
880                                              sub_desc, NULL);
881         if (ad->data_msg_alert_tone) {
882                 ad->data_msg_alert_tone->userdata = ad;
883         } else {
884                 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
885         }
886         FREE(pa_ringtone);
887         G_FREE(sub_desc);
888
889         /*  b-2. msg alert repetition */
890         if (vconf_get_int
891             (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
892                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
893         ad->data_msg_alert_repeat =
894             setting_create_Gendial_exp_parent_field(genlist,
895                                                     &(ad->itc_2text_3_parent),
896                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
897                                                     ad, SWALLOW_Type_INVALID,
898                                                     SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
899                                                     _(repeat_type[repeat_value]));
900         if (ad->data_msg_alert_repeat) {
901                 ad->data_msg_alert_repeat->int_slp_setting_binded =
902                         INT_SLP_SETTING_MSG_ALERT_REPEAT;
903         } else {
904                 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
905         }
906
907         /*  b-3. email ringtone */
908         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
909         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
910         {
911                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
912                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
913                 if(vconf_ret < 0)
914                         SETTING_TRACE_DEBUG("failed to set vconf");
915         }
916         sub_desc = setting_file_basename(pa_ringtone);
917
918         ad->data_email_alert_tone =
919             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
920                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
921                                              ad, SWALLOW_Type_INVALID, NULL,
922                                              NULL, 0,
923                                              SETTING_SOUND_TEXT_EMAIL_ALERT,
924                                              sub_desc, NULL);
925         if (ad->data_email_alert_tone) {
926                 ad->data_email_alert_tone->userdata = ad;
927         } else {
928                 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
929         }
930         FREE(pa_ringtone);
931         G_FREE(sub_desc);
932
933         /*  b-4. email alert repetition */
934         if (vconf_get_int
935             (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
936              &repeat_value) != 0)
937                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
938         ad->data_email_alert_repeat =
939             setting_create_Gendial_exp_parent_field(genlist,
940                                                     &(ad->itc_2text_3_parent),
941                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
942                                                     ad, SWALLOW_Type_INVALID,
943                                                     SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
944                                                     _(repeat_type[repeat_value]));
945         if (ad->data_email_alert_repeat) {
946                 ad->data_email_alert_repeat->int_slp_setting_binded =
947                         INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
948         } else {
949                 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
950         }
951
952         Elm_Object_Item *item = NULL;
953         item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
954                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
955         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
956
957         ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
958
959         return ad->sub_view[SETTING_PROF_VIEW_RTN];
960 }
961
962 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
963 {
964         //appcore_measure_start();
965         retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
966         retm_if(data == NULL, "Invalid argmuent: data is NULL");
967
968         SettingProfileUG *ad = (SettingProfileUG *) data;
969
970         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
971                 SETTING_TRACE("ERROR haptic_stop_all_effects");
972                 /* return; */
973         }
974         setting_profile_close_all_mm_players(ad);
975
976         Evas_Object *sub_view = NULL;
977         Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
978         const char *tab_lable = elm_object_item_text_get(sel_item);
979         ret_if(!tab_lable);
980         //SETTING_TRACE("tab_lable:%s", tab_lable);
981         if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
982                 if(ad->hnd_hpt)
983                         haptic_stop_all_effects(ad->hnd_hpt);
984                 sub_view = __get_main_list(ad);
985         } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
986                 sub_view = __get_ringtone_list(ad);
987         }
988
989         Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
990         ret_if(old_sub_view == sub_view);
991
992         if (sub_view) {
993                 if (old_sub_view)
994                 {
995                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
996                         evas_object_hide(old_sub_view);
997                 }
998                 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
999                 evas_object_show(sub_view);
1000         }
1001 }
1002
1003 static int setting_profile_sound_main_create(void *cb)
1004 {
1005         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1006
1007         SettingProfileUG *ad = (SettingProfileUG *) cb;
1008
1009         ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1010         ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1011
1012         /*  view layout */
1013         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1014         elm_layout_theme_set(view_layout, "layout", "application", "default");
1015         evas_object_show(view_layout);
1016         ad->view_layout = view_layout;
1017
1018         Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1019         if(tabbar == NULL)
1020                 return SETTING_RETURN_FAIL;
1021
1022         elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1023         ad->ctrl_bar = tabbar;
1024         elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1025         elm_object_style_set(tabbar, "tabbar");
1026         elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
1027
1028         ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1029                                         IMG_CTRL_ICON_VOLUME,
1030                                         VOLUME_STR, __view_change_cb, ad);
1031
1032         ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1033                                         IMG_CTRL_ICON_RINGTONE,
1034                                         RINGTONE_STR, __view_change_cb, ad);
1035
1036         elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1037         elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1038
1039         Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1040         elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1041         evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1042
1043         Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, _(KeyStr_Sounds), ug_back_btn, NULL, ad->view_layout, "tabbar");
1044         elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
1045         //elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1046
1047         setting_view_profile_sound_main.is_create = TRUE;
1048
1049         return SETTING_RETURN_SUCCESS;
1050 }
1051
1052 static int setting_profile_sound_main_destroy(void *cb)
1053 {
1054         /* error check */
1055         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1056
1057         SettingProfileUG *ad = (SettingProfileUG *) cb;
1058
1059         __setting_profile_ug_key_ungrab(ad);
1060
1061         if (ad->ly_main != NULL) {
1062                 //Fix the memory leak,
1063                 //Manage ad->sub_view[] separately, unset first, then delete in together
1064                 if (ad->view_layout)
1065                 {
1066                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1067                 }
1068                 int i = SETTING_PROF_VIEW_VOL;
1069                 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1070                 {
1071                         evas_object_del(ad->sub_view[i]);
1072                 }
1073
1074                 evas_object_del(ad->ly_main);
1075                 setting_view_profile_sound_main.is_create = FALSE;
1076         }
1077         return SETTING_RETURN_SUCCESS;
1078 }
1079
1080 static int setting_profile_sound_main_update(void *cb)
1081 {
1082         SETTING_TRACE_BEGIN;
1083         /* error check */
1084         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1085
1086         SettingProfileUG *ad = (SettingProfileUG *) cb;
1087
1088         if (ad->ly_main != NULL) {
1089                 evas_object_show(ad->ly_main);
1090         }
1091
1092         int volume = 0;
1093
1094         sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
1095         SETTING_TRACE_DEBUG("ringtone volume is %d", volume);
1096         if(ad->data_call_volume && ad->data_call_volume->eo_check)
1097                 elm_slider_value_set(ad->data_call_volume->eo_check, (double)volume);
1098
1099         return SETTING_RETURN_SUCCESS;
1100 }
1101
1102 static int setting_profile_sound_main_cleanup(void *cb)
1103 {
1104         /* error check */
1105         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1106
1107         SettingProfileUG *ad = (SettingProfileUG *) cb;
1108
1109         if (ad->ly_main != NULL) {
1110                 evas_object_hide(ad->ly_main);
1111         }
1112
1113         return SETTING_RETURN_SUCCESS;
1114 }
1115
1116 /* ***************************************************
1117  *
1118  *general func
1119  *
1120  ***************************************************/
1121
1122 /* ***************************************************
1123  *
1124  *call back func
1125  *
1126  ***************************************************/
1127
1128 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1129                                                    Evas_Object *obj,
1130                                                    void *event_info)
1131 {
1132         /* error check */
1133         ret_if(data == NULL);
1134
1135         SettingProfileUG *ad = (SettingProfileUG *) data;
1136
1137         /* close mm plaer */
1138         setting_profile_close_all_mm_players(ad);
1139         /* close vibration */
1140         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1141                 SETTING_TRACE("ERROR haptic_stop_all_effects");
1142                 /* return; */
1143         }
1144
1145         /* Send destroy request */
1146         ug_destroy_me(ad->ug);
1147
1148         return;
1149 }
1150
1151 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1152 {
1153         ret_if(priv == NULL);
1154         SettingProfileUG *ad = (SettingProfileUG *) priv;
1155
1156         __setting_profile_ug_key_grab(ad);
1157
1158         if (ug) {
1159                 ug_destroy(ug);
1160                 ad->ug_loading = NULL;
1161         }
1162 }
1163
1164 static void
1165 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1166                                                service_h result, void *priv)
1167 {
1168         ret_if(priv == NULL);
1169
1170         SettingProfileUG *ad = (SettingProfileUG *) priv;
1171         char *ringtone_file = NULL;
1172         char *ringtone_path = NULL;
1173
1174         service_get_extra_data(result, "result", &ringtone_path);
1175         if(!ringtone_path)
1176                 return;
1177
1178         SETTING_TRACE("ringtone_path:%s", ringtone_path);
1179
1180         if (ringtone_path != NULL) {
1181                 ringtone_file = setting_file_basename(ringtone_path);
1182                 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1183
1184                 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1185                         if (vconf_set_str
1186                             (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1187                                 if (ad->data_call_alert_tone) {
1188                                         ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1189
1190                                         elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1191                                         elm_genlist_item_update(ad->data_call_alert_tone->item);
1192                                 }
1193                         }
1194                 } else if (0 ==
1195                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1196                         if (vconf_set_str
1197                             (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1198                                 if (ad->data_msg_alert_tone) {
1199                                         ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1200
1201                                         elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1202                                         elm_genlist_item_update(ad->data_msg_alert_tone->item);
1203                                 }
1204                         }
1205                 } else if (0 ==
1206                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1207                         if (vconf_set_str
1208                             (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1209                                 if (ad->data_email_alert_tone) {
1210                                         ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1211
1212                                         elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1213                                         elm_genlist_item_update(ad->data_email_alert_tone->item);
1214                                 }
1215                         }
1216                 }
1217         }
1218
1219         G_FREE(ringtone_file);
1220         return;
1221 }
1222
1223 static void
1224 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1225                              void *priv)
1226 {
1227         ret_if(priv == NULL);
1228
1229         SettingProfileUG *ad = (SettingProfileUG *) priv;
1230         Evas_Object *base;
1231
1232         base = (Evas_Object *) ug_get_layout(ug);
1233         if (!base)
1234                 return;
1235
1236         switch (mode) {
1237                 case UG_MODE_FULLVIEW:
1238                         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1239                         //elm_win_resize_object_add(ad->win_get, base);
1240                         evas_object_show(base);
1241                         break;
1242                 default:
1243                         break;
1244         }
1245 }
1246
1247
1248 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1249 {
1250         ret_if(ad == NULL);
1251
1252         if(ad->ug_loading)
1253         {
1254                 SETTING_TRACE("Myfiles ug is already loaded.");
1255                 return;
1256         }
1257
1258         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1259         if (!cbs)
1260                 return;
1261
1262         cbs->layout_cb = setting_profile_layout_ug_cb;
1263         cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1264         cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1265         cbs->priv = (void *)ad;
1266
1267         service_h svc;
1268         if (service_create(&svc)) {
1269                 FREE(cbs);
1270                 return;
1271         }
1272
1273         const char *pa_cur_ringtone = NULL;
1274         const char *dir_path = NULL;
1275         if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1276                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1277                 if (pa_cur_ringtone == NULL)
1278                 {
1279                         pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
1280                 }
1281                 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1282         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1283                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1284                 if (pa_cur_ringtone == NULL)
1285                         pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
1286                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1287         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1288                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1289                 if (pa_cur_ringtone == NULL)
1290                         pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
1291                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1292         }
1293         SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1294         SETTING_TRACE("dir_path:\t%s", dir_path);
1295
1296         service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1297         service_add_extra_data(svc, "path", dir_path);
1298         service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1299         service_add_extra_data(svc, "file_type", "SOUND");
1300         service_add_extra_data(svc, "drm_type", "DRM_ALL");
1301
1302         SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1303         ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1304         if (NULL == ad->ug_loading) {   /* error handling */
1305                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1306         }
1307
1308         service_destroy(svc);
1309         FREE(cbs);
1310
1311         /** @todo verify it's valid */
1312         if(pa_cur_ringtone) {
1313                 free(pa_cur_ringtone);
1314                 pa_cur_ringtone = NULL;
1315         }
1316
1317         __setting_profile_ug_key_ungrab(ad);
1318         return;
1319 }
1320
1321 static void
1322 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1323                                           void *event_info)
1324 {
1325         /* error check */
1326         ret_if(data == NULL);
1327
1328         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1329         SettingProfileUG *ad = list_item->userdata;
1330
1331         int state = list_item->chk_status = elm_check_state_get(obj);   /*  for genlist update status */
1332
1333         /* restore the selected check status */
1334         list_item->chk_status = state;
1335         elm_check_state_set(list_item->eo_check, state);
1336
1337         if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1338                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1339                         list_item->chk_status = !state;
1340                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1341                 }
1342
1343                 if (list_item->chk_status) {
1344                         setting_enable_genlist_item(ad->data_call_volume->item);
1345                         setting_enable_genlist_item(ad->data_noti_volume->item);
1346                         setting_enable_genlist_item(ad->data_media_volume->item);
1347                         setting_enable_genlist_item(ad->data_touch_volume->item);
1348                 } else {
1349                         setting_profile_close_all_mm_players(ad);
1350                         setting_disable_genlist_item(ad->data_call_volume->item);
1351                         setting_disable_genlist_item(ad->data_noti_volume->item);
1352                         setting_disable_genlist_item(ad->data_media_volume->item);
1353                         setting_disable_genlist_item(ad->data_touch_volume->item);
1354                 }
1355         } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1356                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1357                         list_item->chk_status = !state;
1358                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1359                 }
1360                 if (list_item->chk_status) {
1361                         setting_enable_genlist_item(ad->data_vib_volume->item);
1362                         setting_enable_genlist_item(ad->data_touch_vib->item);
1363
1364                         /* Play vib if vib turns on */
1365                         int err = 0;
1366                         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1367                         svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1368                         haptic_stop_all_effects(ad->hnd_hpt);
1369                         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);
1370
1371                         if (err < 0)
1372                                 SETTING_TRACE("Failed to play haptic monotone");
1373                 } else {
1374                         if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1375                                 SETTING_TRACE("ERROR haptic_stop_all_effects");
1376                         }
1377                         setting_disable_genlist_item(ad->data_vib_volume->item);
1378                         setting_disable_genlist_item(ad->data_touch_vib->item);
1379                 }
1380         }
1381         /* additional items */
1382         else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1383                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1384                         list_item->chk_status = !state;
1385                         elm_check_state_set(list_item->eo_check, !state);
1386                 }
1387         }
1388         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1389                 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1390                         list_item->chk_status = !state;
1391                         elm_check_state_set(list_item->eo_check, !state);
1392                 }
1393         }
1394
1395         /* end */
1396
1397 }
1398
1399 static void
1400 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1401                                                     Evas_Object *obj,
1402                                                     void *event_info)
1403 {
1404         /* error check */
1405         ret_if(data == NULL);
1406         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1407
1408         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1409         elm_genlist_item_selected_set(item, 0);
1410         Setting_GenGroupItem_Data *list_item =
1411             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1412
1413         SettingProfileUG *ad = data;
1414
1415         if(ad->hnd_hpt)
1416                 haptic_stop_all_effects(ad->hnd_hpt);
1417
1418         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1419         if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1420             || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1421             || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1422                 ad->ringtone_type = list_item->keyStr;
1423                 setting_profile_sound_main_create_myfile_ug(ad);
1424         } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1425                 int old_status = elm_check_state_get(list_item->eo_check);
1426                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1427                         /* new status */
1428                         list_item->chk_status = !old_status;
1429                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1430                         if (list_item->chk_status) {
1431                                 setting_enable_genlist_item(ad->data_call_volume->item);
1432                                 setting_enable_genlist_item(ad->data_noti_volume->item);
1433                                 setting_enable_genlist_item(ad->data_media_volume->item);
1434                                 setting_enable_genlist_item(ad->data_touch_volume->item);
1435                         } else {
1436                                 setting_profile_close_all_mm_players(ad);
1437                                 setting_disable_genlist_item(ad->data_call_volume->item);
1438                                 setting_disable_genlist_item(ad->data_noti_volume->item);
1439                                 setting_disable_genlist_item(ad->data_media_volume->item);
1440                                 setting_disable_genlist_item(ad->data_touch_volume->item);
1441                         }
1442                 }
1443                 return;
1444         } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1445                 int old_status = elm_check_state_get(list_item->eo_check);
1446                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1447                         /* new status */
1448                         list_item->chk_status = !old_status;
1449                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1450                         if (list_item->chk_status) {
1451                                 setting_enable_genlist_item(ad->data_vib_volume->item);
1452                                 setting_enable_genlist_item(ad->data_touch_vib->item);
1453
1454                                 /* Play vib if vib turns on */
1455                                 int err = 0;
1456                                 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1457                                 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1458                                 haptic_stop_all_effects(ad->hnd_hpt);
1459                                 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);
1460
1461                                 if (err < 0)
1462                                         SETTING_TRACE("Failed to play haptic monotone");
1463                         } else {
1464                                 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1465                                         SETTING_TRACE("ERROR haptic_stop_all_effects");
1466                                 }
1467                                 setting_disable_genlist_item(ad->data_vib_volume->item);
1468                                 setting_disable_genlist_item(ad->data_touch_vib->item);
1469                         }
1470                 }
1471                 return;
1472         }
1473         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1474                 int old_status = elm_check_state_get(list_item->eo_check);
1475                 /* To do : set vconfkey for touch sounds */
1476                 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1477                         /* new status */
1478                         list_item->chk_status = !old_status;
1479                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1480                 }
1481         }
1482         /* end */
1483         else if (ad->data_msg_alert_repeat == list_item
1484                  || ad->data_email_alert_repeat == list_item) {
1485                 bool status = !elm_genlist_item_expanded_get(item);
1486                 elm_genlist_item_expanded_set(item, status);
1487         }
1488 }
1489
1490 static void
1491 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1492                                                                       Evas_Object *obj,
1493                                                                       void *event_info)
1494 {
1495         /* error check */
1496         ret_if(data == NULL);
1497
1498         double val = elm_slider_value_get(obj);
1499
1500         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1501         SettingProfileUG *ad = list_item->userdata;
1502
1503         if(ad->mp_ringtone == NULL)
1504                 return;
1505
1506         if(list_item->chk_status != (int)(val+0.5))
1507         {
1508                 list_item->chk_status = (int)(val+0.5);
1509                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
1510                 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1511         }
1512 }
1513
1514 static void
1515 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1516                                                              Evas_Object *obj,
1517                                                              void *event_info)
1518 {
1519         /* error check */
1520         ret_if(data == NULL);
1521
1522         double val = elm_slider_value_get(obj);
1523
1524         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1525         SettingProfileUG *ad = list_item->userdata;
1526
1527         if(ad->mp_noti == NULL)
1528                 return;
1529
1530         if(list_item->chk_status != (int)(val+0.5))
1531         {
1532                 list_item->chk_status = val;
1533                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
1534                 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1535         }
1536 }
1537
1538 static void
1539 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1540                                                               Evas_Object *obj,
1541                                                               void *event_info)
1542 {
1543         /* error check */
1544         ret_if(data == NULL);
1545
1546         double val = elm_slider_value_get(obj);
1547
1548         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1549         SettingProfileUG *ad = list_item->userdata;
1550
1551         if(ad->mp_media == NULL)
1552                 return;
1553         if(list_item->chk_status != (int)(val+0.5))
1554         {
1555                 list_item->chk_status = val;
1556                 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
1557                 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1558         }
1559 }
1560
1561 static void
1562 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1563                                                              Evas_Object *obj,
1564                                                              void *event_info)
1565 {
1566         /* error check */
1567         ret_if(data == NULL);
1568
1569         double val = elm_slider_value_get(obj);
1570
1571         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1572         SettingProfileUG *ad = list_item->userdata;
1573
1574         if(ad->mp_sys == NULL)
1575                 return;
1576
1577         if(list_item->chk_status != (int)(val+0.5))
1578         {
1579                 list_item->chk_status = val;
1580                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
1581                 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1582         }
1583         feedback_initialize();
1584         feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_SIP);
1585         feedback_deinitialize();
1586 }
1587
1588 static void
1589 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1590                                                             Evas_Object *obj,
1591                                                             void *event_info)
1592 {
1593         SETTING_TRACE_BEGIN;
1594         /* error check */
1595         ret_if(data == NULL);
1596
1597         static double priv_val_db = 5.0;
1598         static int priv_val_int = 0;
1599         double val = elm_slider_value_get(obj);
1600         SETTING_TRACE("val = %f", val);
1601         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1602         SettingProfileUG *ad = list_item->userdata;
1603
1604         int value;
1605         int err;
1606
1607         value = (int)(val + 0.5);       /*  to sync displayed value on slider */
1608         list_item->chk_status = value;
1609         if (value != priv_val_int) {
1610                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, value);
1611                 SETTING_TRACE_DEBUG("current %d", value);
1612                 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1613                 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1614                 haptic_stop_all_effects(ad->hnd_hpt);
1615                 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1616
1617                 if (err < 0)
1618                         SETTING_TRACE("Failed to play haptic monotone");
1619                 priv_val_int = value;
1620         }
1621         priv_val_db = val;
1622
1623 }
1624
1625 static void
1626 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1627                                                                  Evas_Object *
1628                                                                  obj, void
1629                                                                  *event_info)
1630 {
1631         SETTING_TRACE_BEGIN;
1632         /* error check */
1633         ret_if(data == NULL);
1634
1635         static double priv_val_db = 3.0;
1636         static int priv_val_int = 0;
1637         double val = elm_slider_value_get(obj);
1638         SETTING_TRACE("val = %f", val);
1639         Setting_GenGroupItem_Data *list_item =
1640             (Setting_GenGroupItem_Data *) data;
1641         SettingProfileUG *ad = list_item->userdata;
1642
1643         int value;
1644         int err;
1645
1646         value = (int)(val + 0.5);       /*  to sync displayed value on slider */
1647         list_item->chk_status = value;
1648         if (value != priv_val_int) {
1649                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
1650                 SETTING_TRACE_DEBUG("current %d", value);
1651                 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1652                 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1653                 haptic_stop_all_effects(ad->hnd_hpt);
1654                 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1655
1656                 if (err < 0)
1657                         SETTING_TRACE("Failed to play haptic monotone");
1658                 priv_val_int = value;
1659         }
1660         priv_val_db = val;
1661 }
1662