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