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