remove help text of sound ug
[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,
530                                          NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
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         item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
535                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
536         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
537
538         __change_state_of_sliderbars(ad);
539
540         ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
541
542         return ad->sub_view[SETTING_PROF_VIEW_VOL];
543 }
544
545 static Evas_Object *__get_ringtone_list(void *data)
546 {
547         retv_if(data == NULL, NULL);
548         SettingProfileUG *ad = (SettingProfileUG *) data;
549
550         if(ad->sub_view[SETTING_PROF_VIEW_RTN])
551                 return ad->sub_view[SETTING_PROF_VIEW_RTN];
552
553         Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
554         elm_object_style_set(genlist, "dialogue");
555         retvm_if(genlist == NULL, NULL,
556                  "Cannot set genlist object as contento of layout");
557         elm_genlist_clear(genlist);     /* first to clear list */
558         setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
559
560         /*  a. incoming call group */
561         (void)setting_create_Gendial_field_titleItem(genlist,
562                                                      &(ad->itc_group_item),
563                                                      SETTING_SOUND_TEXT_INCOMING_CALL,
564                                                      NULL);
565
566         /*  a-1. ringtone */
567         int vconf_ret = 0;
568         char *sub_desc = NULL;
569         char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
570         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
571         {
572                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
573                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
574                 if(vconf_ret < 0)
575                         SETTING_TRACE_DEBUG("failed to set vconf");
576         }
577         sub_desc = setting_file_basename(pa_ringtone);
578
579         ad->data_call_alert_tone =
580             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
581                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
582                                              ad, SWALLOW_Type_INVALID, NULL,
583                                              NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
584                                              sub_desc, NULL);
585         if (ad->data_call_alert_tone) {
586                 ad->data_call_alert_tone->userdata = ad;
587         } else {
588                 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
589         }
590
591         FREE(pa_ringtone);
592         G_FREE(sub_desc);
593
594         /*  b. notification */
595         (void)setting_create_Gendial_field_titleItem(genlist,
596                                                      &(ad->itc_group_item),
597                                                      SETTING_SOUND_TEXT_NOTIFICATION,
598                                                      NULL);
599
600         char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
601                 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
602                 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
603                 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
604                 _(SETTING_SOUND_TEXT_REPEAT_10MIN)
605         };
606         int repeat_value = 0;
607
608         /*  b-1. msg ringtone */
609         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
610         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
611         {
612                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
613                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
614                 if(vconf_ret < 0)
615                         SETTING_TRACE_DEBUG("failed to set vconf");
616         }
617         sub_desc = setting_file_basename(pa_ringtone);
618
619         ad->data_msg_alert_tone =
620             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
621                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
622                                              ad, SWALLOW_Type_INVALID, NULL,
623                                              NULL, 0,
624                                              SETTING_SOUND_TEXT_MSG_ALERT,
625                                              sub_desc, NULL);
626         if (ad->data_msg_alert_tone) {
627                 ad->data_msg_alert_tone->userdata = ad;
628         } else {
629                 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
630         }
631         FREE(pa_ringtone);
632         G_FREE(sub_desc);
633
634         /*  b-2. msg alert repetition */
635         if (vconf_get_int
636             (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
637                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
638         ad->data_msg_alert_repeat =
639             setting_create_Gendial_exp_parent_field(genlist,
640                                                     &(ad->itc_2text_3_parent),
641                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
642                                                     ad, SWALLOW_Type_INVALID,
643                                                     SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
644                                                     repeat_type[repeat_value]);
645         if (ad->data_msg_alert_repeat) {
646                 ad->data_msg_alert_repeat->int_slp_setting_binded =
647                         INT_SLP_SETTING_MSG_ALERT_REPEAT;
648         } else {
649                 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
650         }
651
652         /*  b-3. email ringtone */
653         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
654         if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
655         {
656                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
657                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
658                 if(vconf_ret < 0)
659                         SETTING_TRACE_DEBUG("failed to set vconf");
660         }
661         sub_desc = setting_file_basename(pa_ringtone);
662
663         ad->data_email_alert_tone =
664             setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
665                                              setting_profile_sound_main_mouse_up_Gendial_list_cb,
666                                              ad, SWALLOW_Type_INVALID, NULL,
667                                              NULL, 0,
668                                              SETTING_SOUND_TEXT_EMAIL_ALERT,
669                                              sub_desc, NULL);
670         if (ad->data_email_alert_tone) {
671                 ad->data_email_alert_tone->userdata = ad;
672         } else {
673                 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
674         }
675         FREE(pa_ringtone);
676         G_FREE(sub_desc);
677
678         /*  b-4. email alert repetition */
679         if (vconf_get_int
680             (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
681              &repeat_value) != 0)
682                 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT;   /*  default 0 : repeat once */
683         ad->data_email_alert_repeat =
684             setting_create_Gendial_exp_parent_field(genlist,
685                                                     &(ad->itc_2text_3_parent),
686                                                     setting_profile_sound_main_mouse_up_Gendial_list_cb,
687                                                     ad, SWALLOW_Type_INVALID,
688                                                     SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
689                                                     repeat_type[repeat_value]);
690         if (ad->data_email_alert_repeat) {
691                 ad->data_email_alert_repeat->int_slp_setting_binded =
692                         INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
693         } else {
694                 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
695         }
696
697         Elm_Object_Item *item = NULL;
698         item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
699                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
700         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
701
702         ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
703
704         return ad->sub_view[SETTING_PROF_VIEW_RTN];
705 }
706
707 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
708 {
709         //appcore_measure_start();
710         retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
711         retm_if(data == NULL, "Invalid argmuent: data is NULL");
712
713         SettingProfileUG *ad = (SettingProfileUG *) data;
714
715         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
716                 SETTING_TRACE("ERROR device_haptic_stop_play");
717                 /* return; */
718         }
719         setting_profile_close_all_mm_players(ad);
720
721         Evas_Object *sub_view = NULL;
722         Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
723         const char *tab_lable = elm_object_item_text_get(sel_item);
724         ret_if(!tab_lable);
725         //SETTING_TRACE("tab_lable:%s", tab_lable);
726         if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
727                 if(ad->hnd_hpt)
728                         device_haptic_stop_play(ad->hnd_hpt);
729                 sub_view = __get_main_list(ad);
730         } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
731                 sub_view = __get_ringtone_list(ad);
732         }
733
734         Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
735         ret_if(old_sub_view == sub_view);
736
737         if (sub_view) {
738                 if (old_sub_view)
739                 {
740                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
741                         evas_object_hide(old_sub_view);
742                 }
743                 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
744                 evas_object_show(sub_view);
745         }
746 }
747
748 static int setting_profile_sound_main_create(void *cb)
749 {
750         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
751
752         SettingProfileUG *ad = (SettingProfileUG *) cb;
753
754         ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
755         ad->navi_bar = setting_create_navi_bar(ad->ly_main);
756
757         /*  view layout */
758         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
759         elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
760         evas_object_show(view_layout);
761         ad->view_layout = view_layout;
762
763         Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
764         if(tabbar == NULL)
765                 return SETTING_RETURN_FAIL;
766
767         elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
768         ad->ctrl_bar = tabbar;
769         elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
770         elm_object_style_set(tabbar, "tabbar");
771
772         ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
773                                         NULL,
774                                         VOLUME_STR, __view_change_cb, ad);
775
776         ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
777                                         NULL,
778                                         RINGTONE_STR, __view_change_cb, ad);
779
780         elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
781         elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
782
783         Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
784         elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
785         evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
786
787         Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
788         elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
789
790         setting_view_profile_sound_main.is_create = TRUE;
791
792         return SETTING_RETURN_SUCCESS;
793 }
794
795 static int setting_profile_sound_main_destroy(void *cb)
796 {
797         /* error check */
798         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
799
800         SettingProfileUG *ad = (SettingProfileUG *) cb;
801
802         if (ad->ly_main != NULL) {
803                 //Fix the memory leak,
804                 //Manage ad->sub_view[] separately, unset first, then delete in together
805                 if (ad->view_layout)
806                 {
807                         elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
808                 }
809                 int i = SETTING_PROF_VIEW_VOL;
810                 for (; i < SETTING_PROF_VIEW_MAX; i++ )
811                 {
812                         evas_object_del(ad->sub_view[i]);
813                 }
814
815                 evas_object_del(ad->ly_main);
816                 setting_view_profile_sound_main.is_create = FALSE;
817         }
818         return SETTING_RETURN_SUCCESS;
819 }
820
821 static int setting_profile_sound_main_update(void *cb)
822 {
823         /* error check */
824         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
825
826         SettingProfileUG *ad = (SettingProfileUG *) cb;
827
828         if (ad->ly_main != NULL) {
829                 evas_object_show(ad->ly_main);
830         }
831
832         return SETTING_RETURN_SUCCESS;
833 }
834
835 static int setting_profile_sound_main_cleanup(void *cb)
836 {
837         /* error check */
838         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
839
840         SettingProfileUG *ad = (SettingProfileUG *) cb;
841
842         if (ad->ly_main != NULL) {
843                 evas_object_hide(ad->ly_main);
844         }
845
846         return SETTING_RETURN_SUCCESS;
847 }
848
849 /* ***************************************************
850  *
851  *general func
852  *
853  ***************************************************/
854
855 /* ***************************************************
856  *
857  *call back func
858  *
859  ***************************************************/
860
861 static void
862 setting_profile_sound_main_click_softkey_cancel_cb(void *data,
863                                                    Evas_Object *obj,
864                                                    void *event_info)
865 {
866         /* error check */
867         ret_if(data == NULL);
868
869         SettingProfileUG *ad = (SettingProfileUG *) data;
870
871         /* close mm plaer */
872         setting_profile_close_all_mm_players(ad);
873         /* close vibration */
874         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
875                 SETTING_TRACE("ERROR device_haptic_stop_play");
876                 /* return; */
877         }
878
879         /* Send destroy request */
880         ug_destroy_me(ad->ug);
881
882         return;
883 }
884
885 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
886 {
887         ret_if(priv == NULL);
888         SettingProfileUG *ad = (SettingProfileUG *) priv;
889
890         if (ug) {
891                 ug_destroy(ug);
892                 ad->ug_loading = NULL;
893         }
894 }
895
896 static void
897 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
898                                                service_h result, void *priv)
899 {
900         ret_if(priv == NULL);
901
902         SettingProfileUG *ad = (SettingProfileUG *) priv;
903         char *ringtone_file = NULL;
904         char *ringtone_path = NULL;
905
906         service_get_extra_data(result, "result", &ringtone_path);
907         if(!ringtone_path)
908                 return;
909
910         SETTING_TRACE("ringtone_path:%s", ringtone_path);
911
912         if (ringtone_path != NULL) {
913                 ringtone_file = setting_file_basename(ringtone_path);
914                 SETTING_TRACE("ringtone_file:%s", ringtone_file);
915
916                 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
917                         if (vconf_set_str
918                             (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
919                                 if (ad->data_call_alert_tone) {
920                                         ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
921
922                                         elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
923                                         elm_genlist_item_update(ad->data_call_alert_tone->item);
924                                 }
925                         }
926                 } else if (0 ==
927                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
928                         if (vconf_set_str
929                             (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
930                                 if (ad->data_msg_alert_tone) {
931                                         ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
932
933                                         elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
934                                         elm_genlist_item_update(ad->data_msg_alert_tone->item);
935                                 }
936                         }
937                 } else if (0 ==
938                            safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
939                         if (vconf_set_str
940                             (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
941                                 if (ad->data_email_alert_tone) {
942                                         ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
943
944                                         elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
945                                         elm_genlist_item_update(ad->data_email_alert_tone->item);
946                                 }
947                         }
948                 }
949         }
950
951         G_FREE(ringtone_file);
952         return;
953 }
954
955 static void
956 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
957                              void *priv)
958 {
959         ret_if(priv == NULL);
960
961         SettingProfileUG *ad = (SettingProfileUG *) priv;
962         Evas_Object *base;
963
964         base = (Evas_Object *) ug_get_layout(ug);
965         if (!base)
966                 return;
967
968         switch (mode) {
969                 case UG_MODE_FULLVIEW:
970                         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
971                         elm_win_resize_object_add(ad->win_get, base);
972                         evas_object_show(base);
973                         break;
974                 default:
975                         break;
976         }
977 }
978
979
980 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
981 {
982         ret_if(ad == NULL);
983
984         if(ad->ug_loading)
985         {
986                 SETTING_TRACE("Myfiles ug is already loaded.");
987                 return;
988         }
989
990         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
991         if (!cbs)
992                 return;
993
994         cbs->layout_cb = setting_profile_layout_ug_cb;
995         cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
996         cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
997         cbs->priv = (void *)ad;
998
999         service_h svc;
1000         if (service_create(&svc)) {
1001                 FREE(cbs);
1002                 return;
1003         }
1004
1005         const char *pa_cur_ringtone = NULL;
1006         const char *dir_path = NULL;
1007         if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1008                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1009                 if (pa_cur_ringtone == NULL)
1010                 {
1011                         pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1012                 }
1013                 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1014         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1015                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1016                 if (pa_cur_ringtone == NULL)
1017                         pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1018                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1019         } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1020                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1021                 if (pa_cur_ringtone == NULL)
1022                         pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1023                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1024         }
1025         SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1026         SETTING_TRACE("dir_path:\t%s", dir_path);
1027
1028         service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1029         service_add_extra_data(svc, "path", dir_path);
1030         service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1031         service_add_extra_data(svc, "file_type", "SOUND");
1032         service_add_extra_data(svc, "drm_type", "DRM_ALL");
1033
1034         SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1035         ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1036         if (NULL == ad->ug_loading) {   /* error handling */
1037                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1038         }
1039
1040         service_destroy(svc);
1041         FREE(cbs);
1042
1043         /** @todo verify it's valid */
1044         if(pa_cur_ringtone)
1045                 FREE(pa_cur_ringtone);
1046
1047         return;
1048 }
1049
1050 static void
1051 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1052                                           void *event_info)
1053 {
1054         /* error check */
1055         ret_if(data == NULL);
1056
1057         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1058         SettingProfileUG *ad = list_item->userdata;
1059
1060         int state = list_item->chk_status = elm_check_state_get(obj);   /*  for genlist update status */
1061
1062         /* restore the selected check status */
1063         list_item->chk_status = state;
1064         elm_check_state_set(list_item->eo_check, state);
1065
1066         if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1067                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1068                         list_item->chk_status = !state;
1069                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1070                 }
1071
1072                 if (list_item->chk_status) {
1073                         setting_enable_genlist_item(ad->data_call_volume->item);
1074                         setting_enable_genlist_item(ad->data_noti_volume->item);
1075                         setting_enable_genlist_item(ad->data_media_volume->item);
1076                         setting_enable_genlist_item(ad->data_touch_volume->item);
1077                 } else {
1078                         setting_profile_close_all_mm_players(ad);
1079                         setting_disable_genlist_item(ad->data_call_volume->item);
1080                         setting_disable_genlist_item(ad->data_noti_volume->item);
1081                         setting_disable_genlist_item(ad->data_media_volume->item);
1082                         setting_disable_genlist_item(ad->data_touch_volume->item);
1083                 }
1084         } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1085                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_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                 if (list_item->chk_status) {
1090                         setting_enable_genlist_item(ad->data_vib_volume->item);
1091                         setting_enable_genlist_item(ad->data_touch_vib->item);
1092
1093                         /* Play vib if vib turns on */
1094                         int err = 0;
1095                         char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1096                         svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1097                         device_haptic_stop_play(ad->hnd_hpt);
1098                         err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5));
1099
1100                         if (err < 0)
1101                                 SETTING_TRACE("Failed to play haptic monotone");
1102                 } else {
1103                         if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1104                                 SETTING_TRACE("ERROR device_haptic_stop_play");
1105                         }
1106                         setting_disable_genlist_item(ad->data_vib_volume->item);
1107                         setting_disable_genlist_item(ad->data_touch_vib->item);
1108                 }
1109         }
1110         /* additional items */
1111         else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1112                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1113                         list_item->chk_status = !state;
1114                         elm_check_state_set(list_item->eo_check, !state);
1115                 }
1116         }
1117
1118         /* end */
1119
1120 }
1121
1122 static void
1123 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1124                                                     Evas_Object *obj,
1125                                                     void *event_info)
1126 {
1127         /* error check */
1128         ret_if(data == NULL);
1129         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1130
1131         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1132         elm_genlist_item_selected_set(item, 0);
1133         Setting_GenGroupItem_Data *list_item =
1134             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1135
1136         SettingProfileUG *ad = data;
1137
1138         if(ad->hnd_hpt)
1139                         device_haptic_stop_play(ad->hnd_hpt);
1140
1141         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1142         if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1143             || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1144             || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1145                 ad->ringtone_type = list_item->keyStr;
1146                 setting_profile_sound_main_create_myfile_ug(ad);
1147         } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1148                 int old_status = elm_check_state_get(list_item->eo_check);
1149                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1150                         /* new status */
1151                         list_item->chk_status = !old_status;
1152                         elm_check_state_set(list_item->eo_check, list_item->chk_status);
1153                         if (list_item->chk_status) {
1154                                 setting_enable_genlist_item(ad->data_call_volume->item);
1155                                 setting_enable_genlist_item(ad->data_noti_volume->item);
1156                                 setting_enable_genlist_item(ad->data_media_volume->item);
1157                                 setting_enable_genlist_item(ad->data_touch_volume->item);
1158                         } else {
1159                                 setting_profile_close_all_mm_players(ad);
1160                                 setting_disable_genlist_item(ad->data_call_volume->item);
1161                                 setting_disable_genlist_item(ad->data_noti_volume->item);
1162                                 setting_disable_genlist_item(ad->data_media_volume->item);
1163                                 setting_disable_genlist_item(ad->data_touch_volume->item);
1164                         }
1165                 }
1166                 return;
1167         }
1168         else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1169                 int old_status = elm_check_state_get(list_item->eo_check);
1170                 /* To do : set vconfkey for touch sounds */
1171
1172                 list_item->chk_status = !old_status;
1173                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1174         }
1175         /* end */
1176         else if (ad->data_msg_alert_repeat == list_item
1177                  || ad->data_email_alert_repeat == list_item) {
1178                 bool status = !elm_genlist_item_expanded_get(item);
1179                 elm_genlist_item_expanded_set(item, status);
1180         }
1181 }
1182
1183 static void
1184 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1185                                                                       Evas_Object *obj,
1186                                                                       void *event_info)
1187 {
1188         /* error check */
1189         ret_if(data == NULL);
1190
1191         double val = elm_slider_value_get(obj);
1192
1193         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1194         SettingProfileUG *ad = list_item->userdata;
1195
1196         if(ad->mp_ringtone == NULL)
1197                 return;
1198
1199         if(list_item->chk_status != (int)(val+0.5))
1200         {
1201                 list_item->chk_status = (int)(val+0.5);
1202                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)list_item->chk_status);
1203                 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1204         }
1205 }
1206
1207 static void
1208 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1209                                                              Evas_Object *obj,
1210                                                              void *event_info)
1211 {
1212         /* error check */
1213         ret_if(data == NULL);
1214
1215         double val = elm_slider_value_get(obj);
1216
1217         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1218         SettingProfileUG *ad = list_item->userdata;
1219
1220         if(ad->mp_noti == NULL)
1221                 return;
1222
1223         if(list_item->chk_status != (int)(val+0.5))
1224         {
1225                 list_item->chk_status = val;
1226                 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)list_item->chk_status);
1227                 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1228         }
1229 }
1230
1231 static void
1232 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1233                                                               Evas_Object *obj,
1234                                                               void *event_info)
1235 {
1236         /* error check */
1237         ret_if(data == NULL);
1238
1239         double val = elm_slider_value_get(obj);
1240
1241         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1242         SettingProfileUG *ad = list_item->userdata;
1243
1244         if(ad->mp_media == NULL)
1245                 return;
1246         if(list_item->chk_status != (int)(val+0.5))
1247         {
1248                 list_item->chk_status = val;
1249                 sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)list_item->chk_status);
1250                 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1251         }
1252 }
1253
1254 static void
1255 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1256                                                              Evas_Object *obj,
1257                                                              void *event_info)
1258 {
1259         /* error check */
1260         ret_if(data == NULL);
1261
1262         double val = elm_slider_value_get(obj);
1263
1264         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1265         SettingProfileUG *ad = list_item->userdata;
1266
1267         if(ad->mp_sys == NULL)
1268                 return;
1269
1270         if(list_item->chk_status != (int)(val+0.5))
1271         {
1272                 list_item->chk_status = val;
1273                 sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)list_item->chk_status);
1274                 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1275         }
1276 }
1277