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