tizen 2.4 release
[apps/home/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
22 #include <feedback.h>
23 #include <mm_sound_private.h>
24 #include <app_manager.h>
25 #include <setting-profile-sound-main.h>
26 #include <setting-profile.h>
27 #include <setting-common-general-func.h>
28
29 #include <eventsystem.h>
30 #include <bundle_internal.h>
31 #include <notification_setting.h>
32 #include <notification_setting_internal.h>
33
34
35 #define SETTING_SOUND_VOL_MAX 15
36 #define SETTING_DEFAULT_RINGTONE_VOL_INT        11
37 #define SETTING_DEFAULT_NOTI_VOL_INT            11
38 #define SETTING_DEFAULT_MEDIA_VOL_INT           9
39 #define SETTING_DEFAULT_SYSTEM_VOL_INT          9
40
41 static int setting_sound_main_create(void *cb);
42 static int setting_sound_main_destroy(void *cb);
43 static int setting_sound_main_update(void *cb);
44 static int setting_sound_main_cleanup(void *cb);
45
46 setting_view setting_view_sound_main = {
47         .create = setting_sound_main_create,
48         .destroy = setting_sound_main_destroy,
49         .update = setting_sound_main_update,
50         .cleanup = setting_sound_main_cleanup,
51 };
52
53 #define ADD_GENLIST(genlist, parent) \
54         {\
55                 genlist = elm_genlist_add(parent);\
56                 retvm_if(genlist == NULL, NULL, "Cannot set genlist object as contento of layout");\
57                 elm_genlist_realization_mode_set(genlist, EINA_TRUE);\
58                 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);\
59                 elm_object_style_set(genlist, "dialogue");\
60                 elm_genlist_clear(genlist);\
61                 evas_object_smart_callback_add(genlist, "realized", __gl_realized_cb, NULL);\
62                 elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);\
63         }
64
65 /* keystr, toggle */
66 #define ADD_TOGGLE_MENU2(item, genlist, item_style, keystr, value, data) \
67         {\
68                 item = setting_create_Gendial_field_def(genlist, &(item_style), \
69                                                         setting_sound_main_mouse_up_Gendial_list_cb, \
70                                                         data, SWALLOW_Type_1ICON_1RADIO, NULL, \
71                                                         NULL, value, \
72                                                         keystr, NULL, \
73                                                         __sound_chk_cb); \
74                 if (item) { \
75                         item->userdata = data; \
76                 } else { \
77                         SETTING_TRACE_ERROR("%s item is NULL", keystr); \
78                 } \
79         }
80
81 /* keystr, multiline, toggle */
82 #define ADD_TOGGLE_MENU(item, genlist, item_style, keystr, substr, value, data) \
83         {\
84                 item = setting_create_Gendial_field_def(genlist, &(item_style), \
85                                                         setting_sound_main_mouse_up_Gendial_list_cb, \
86                                                         data, SWALLOW_Type_1ICON_1RADIO, NULL, \
87                                                         NULL, value, \
88                                                         keystr, NULL, \
89                                                         __sound_chk_cb); \
90                 if (item) { \
91                         item->userdata = data;\
92                 } else { \
93                         SETTING_TRACE_ERROR("%s item is NULL", keystr);\
94                 } \
95                 ADD_GL_HELP_NO_SEP(genlist, substr);\
96         }
97
98 #define ADD_SOUND_SLIDER(item_data, genlist, item_style, l_img, r_img, value, keystr, data, sld_cb, sld_max, start_cb, stop_cb) \
99         { \
100                 item_data = setting_create_Gendial_field_def(genlist, &(item_style), NULL,\
101                                                              NULL, \
102                                                              SWALLOW_Type_LAYOUT_SLIDER,\
103                                                              l_img, r_img,\
104                                                              value,\
105                                                              keystr,\
106                                                              NULL,\
107                                                              sld_cb);\
108                 if (item_data) {\
109                         item_data->win_main = data->win_main_layout;\
110                         item_data->evas = data->evas;\
111                         item_data->isIndicatorVisible = FALSE;\
112                         item_data->slider_min = 0;\
113                         item_data->slider_max = sld_max;\
114                         item_data->userdata = data;\
115                         item_data->start_change_cb = start_cb;\
116                         item_data->stop_change_cb = stop_cb;\
117                         elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);\
118                 } else {\
119                         SETTING_TRACE_ERROR("%s item is NULL", keystr);\
120                 } \
121         }
122
123 /* ***************************************************
124  *
125  *basic func
126  *
127  ***************************************************/
128 static Eina_Bool __play_ringtone_sound_idle_cb(void *data)
129 {
130         SETTING_TRACE_BEGIN;
131         retv_if(!data, EINA_FALSE);
132
133         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
134         SettingProfileUG *ad = list_item->userdata;
135
136         if (list_item->eo_check) {
137                 double current;
138                 current = elm_slider_value_get(list_item->eo_check);
139                 list_item->chk_status = (int)(current + 0.5);
140         }
141
142         /*
143          * S5 concept:
144          * On the volume popup,
145          *  1) if user controls the slider, don't play any sounds£¬just change volume.
146          *  2) if user controls the HW volume key for ringtone sound, the beep sound is supported
147
148          * On Setting > Sound
149          *  1) if user controls the slider, change volume & play sound
150          *  2) if user controls the HW volume key, do nothing(DO NOT change volume,DO NoT play sound)
151         */
152         if (0 == safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
153                 return EINA_FALSE;
154         }
155
156         if (ad->mp_ringtone == NULL) {
157                 setting_sound_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
158                 char    *pa_tone_path = NULL;
159                 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
160                 if (pa_tone_path == NULL) {
161                         if (isEmulBin())
162                                 pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
163                         else
164                                 pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
165
166                         if (vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) {
167                                 FREE(pa_tone_path);
168                                 return EINA_FALSE;
169                         }
170                 }
171                 if (list_item->chk_status > 0) {
172                         setting_sound_play_sound_origin(&(ad->mp_ringtone), ad, NULL,
173                                                         pa_tone_path,
174                                                         (float)list_item->chk_status,
175                                                         SOUND_TYPE_RINGTONE);
176                 }
177         } else {
178                 player_state_e state;
179                 player_get_state(*(ad->mp_ringtone), &state);
180                 SETTING_TRACE("ringtone player status : %d", state);
181                 if (state == PLAYER_STATE_PAUSED) {
182                         player_start(*(ad->mp_ringtone));
183                 } else if (state == PLAYER_STATE_PLAYING) {
184                         /*bool is_muted = 0; */
185                         /*player_is_muted(*(ad->mp_ringtone), &is_muted); */
186                         /*SETTING_TRACE("ringtone player is muted : %d", is_muted); */
187                         if (/*is_muted &&*/ ad->sound_on)
188                                 player_set_mute(*(ad->mp_ringtone), 0);
189                 }
190         }
191
192         ad->play_ringtone_idler = NULL;
193         return EINA_FALSE;
194 }
195
196
197 void __start_change_cb(void *data, Evas_Object *obj, void *event_info)
198 {
199         SETTING_TRACE_BEGIN;
200         ret_if(data == NULL);
201
202         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
203         SettingProfileUG *ad = list_item->userdata;
204         ret_if(ad == NULL);
205         setting_sound_create_warning_popup_during_call(ad);
206         if (list_item == ad->data_call_volume) {
207                 ad->is_ringtone_slidering = TRUE;
208                 setting_sound_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
209         } else if (list_item == ad->data_noti_volume) {
210                 setting_sound_close_other_mm_players_but_type(ad, SOUND_TYPE_NOTIFICATION);
211         } else if (list_item == ad->data_media_volume) {
212                 setting_sound_close_other_mm_players_but_type(ad, SOUND_TYPE_MEDIA);
213         } else if (list_item == ad->data_touch_volume) {
214                 setting_sound_close_all_mm_players(ad);
215         }
216 }
217
218 static void __call_slider_change_cb(void *data, Evas_Object *obj, void *event_info)
219 {
220         SETTING_TRACE_BEGIN;
221
222         /* error check */
223         ret_if(data == NULL);
224
225         double val = elm_slider_value_get(obj);
226
227         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
228         SettingProfileUG *ad = list_item->userdata;
229
230         ad->is_ringtone_slidering = TRUE;
231
232         if (list_item->chk_status != (int)(val + 0.5)) {
233                 list_item->chk_status = (int)(val + 0.5);
234                 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
235                 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
236
237                 #if FUNCTION_SYSTEM_SETTING
238                 if (list_item->chk_status == 0) {
239                         /* change to Vibration mode */
240                         // call system_setting
241                         system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE, false);
242                         vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
243                         vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
244
245                 } else {
246                         if (!ad->sound_on) {
247                                 /* change to Sound mode */
248                                 // call system_setting
249                                 system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE, false);
250                                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
251                                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
252                         }
253                 }
254                 #else
255                 if (list_item->chk_status == 0) {
256                         /* change to Vibration mode */
257                         vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
258                         vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
259                         setting_set_event_system(SYS_EVENT_SILENT_MODE, EVT_KEY_SILENT_MODE, EVT_VAL_SILENTMODE_OFF);
260                         /*insert log for vibrate mode on state */
261                 } else {
262                         if (!ad->sound_on) {
263                                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
264                                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
265                                 setting_set_event_system(SYS_EVENT_SILENT_MODE, EVT_KEY_SILENT_MODE, EVT_VAL_SILENTMODE_OFF);
266                                 /*insert log for sound mode on state */
267                         }
268                 }
269                 #endif
270
271                 setting_sound_update_slider_icon(list_item, SND_SLIDER_CALL);
272
273                 /*elm_genlist_item_update(list_item->item); */
274                 elm_slider_value_set(obj, list_item->chk_status);
275                 SETTING_TRACE_DEBUG("[TIME] change sound mode : %d msec ", appcore_measure_time());
276         }
277
278         setting_sound_create_warning_popup_during_call(ad);
279         if (ad->calling_popup)
280                 return;
281
282         if (ad->play_ringtone_idler) {
283                 ecore_idler_del(ad->play_ringtone_idler);
284                 ad->play_ringtone_idler = NULL;
285         }
286         ad->play_ringtone_idler = ecore_idler_add(__play_ringtone_sound_idle_cb, list_item);
287
288         /*SWIP_EFFECT_ENABLE(ad->ly_main, ad->ctrl_bar); */
289         SETTING_TRACE("list_item->chk_status:%d", list_item->chk_status);
290 }
291
292 static void __noti_slider_change_cb(void *data, Evas_Object *obj, void *event_info)
293 {
294         SETTING_TRACE_BEGIN;
295
296         /* error check */
297         ret_if(data == NULL);
298
299         double val = elm_slider_value_get(obj);
300
301         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
302         SettingProfileUG *ad = list_item->userdata;
303         sound_type_e sound_type = SOUND_TYPE_NOTIFICATION;
304
305         if (list_item->chk_status != (int)(val + 0.5)) {
306                 list_item->chk_status = (int)(val + 0.5);
307                 setting_sound_update_slider_icon(list_item, SND_SLIDER_NOTI);
308                 sound_manager_set_volume(sound_type, list_item->chk_status);
309                 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
310         }
311
312         setting_sound_create_warning_popup_during_call(ad);
313         if (ad->calling_popup)
314                 return;
315
316         /*
317          * S5 concept:
318          * On the volume popup,
319          *  1) if user controls the slider, don't play any sounds£¬just change volume.
320          *  2) if user controls the HW volume key for ringtone sound, the beep sound is supported
321
322          * On Setting > Sound
323          *  1) if user controls the slider, change volume & play sound
324          *  2) if user controls the HW volume key, do nothing(DO NOT change volume,DO NoT play sound)
325         */
326         if (0 == safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
327                 return;
328         }
329
330         if (ad->mp_noti == NULL) {
331                 setting_sound_close_other_mm_players_but_type(ad, sound_type);
332                 if (list_item->chk_status > 0) {
333                         char *pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
334                         if (pa_tone_path == NULL) {
335                                 pa_tone_path = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
336                                 if (vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, pa_tone_path) < 0) {
337                                         FREE(pa_tone_path);
338                                         return;
339                                 }
340                         }
341                         setting_sound_play_sound_origin(&(ad->mp_noti), ad, NULL,
342                                                         pa_tone_path, (float)list_item->chk_status,
343                                                         sound_type);
344                         FREE(pa_tone_path);
345                 }
346         } else {
347                 player_state_e state;
348                 player_get_state(*(ad->mp_noti), &state);
349                 SETTING_TRACE("noti player status : %d", state);
350                 if (state == PLAYER_STATE_PAUSED) {
351                         player_start(*(ad->mp_noti));
352                 }
353         }
354 }
355
356
357 static void __media_slider_change_cb(void *data, Evas_Object *obj, void *event_info)
358 {
359         SETTING_TRACE_BEGIN;
360
361         /* error check */
362         ret_if(data == NULL);
363         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
364         SettingProfileUG *ad = list_item->userdata;
365         sound_type_e sound_type = SOUND_TYPE_MEDIA;
366
367         double val = elm_slider_value_get(obj);
368         int value = (int)(val + 0.5);
369         if (list_item->chk_status != value) {
370
371                 list_item->chk_status = value;
372                 setting_sound_update_slider_icon(list_item, SND_SLIDER_MEDIA);
373                 int ret = sound_manager_set_volume(sound_type, value);
374                 SETTING_TRACE_DEBUG("ret : 0x%.8x", ret);
375
376                 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
377         }
378
379         setting_sound_create_warning_popup_during_call(ad);
380         if (ad->calling_popup)
381                 return;
382
383         /*
384          * S5 concept:
385          * On the volume popup,
386          *  1) if user controls the slider, don't play any sounds£¬just change volume.
387          *  2) if user controls the HW volume key for ringtone sound, the beep sound is supported
388
389          * On Setting > Sound
390          *  1) if user controls the slider, change volume & play sound
391          *  2) if user controls the HW volume key, do nothing(DO NOT change volume,DO NoT play sound)
392         */
393         if (0 == safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
394                 return;
395         }
396
397         if (ad->mp_media == NULL) {
398                 setting_sound_close_other_mm_players_but_type(ad, sound_type);
399                 if (list_item->chk_status > 0) {
400                         char    *pa_tone_path = NULL;
401                         if (isEmulBin())
402                                 pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
403                         else
404                                 pa_tone_path = (char *)strdup(SETTING_DEFAULT_MEDIA_TONE);
405
406                         sound_type_e type;
407                         sound_manager_get_current_sound_type(&type);
408                         setting_sound_play_sound_origin(&(ad->mp_media), ad, NULL,
409                                                         pa_tone_path,
410                                                         (float)list_item->chk_status,
411                                                         sound_type);
412                         FREE(pa_tone_path);
413                 }
414         } else {
415                 player_state_e state;
416                 player_get_state(*(ad->mp_media), &state);
417                 SETTING_TRACE("ringtone player status : %d", state);
418                 if (state == PLAYER_STATE_PAUSED) {
419                         player_start(*(ad->mp_media));
420                 }
421         }
422 }
423
424 static void __sys_slider_change_cb(void *data, Evas_Object *obj, void *event_info)
425 {
426         /* error check */
427         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
428         SettingProfileUG *ad = list_item->userdata;
429         ret_if(ad == NULL);
430         setting_sound_close_all_mm_players(ad);
431
432         /*Get the current real value of slider */
433         double val = elm_slider_value_get(obj);
434         int value = (int)(val + 0.5);
435         sound_manager_set_volume(SOUND_TYPE_SYSTEM, value);
436         SETTING_TRACE_DEBUG("system volume is %d, %f", value, val);
437
438         setting_sound_create_warning_popup_during_call(ad);
439         if (ad->calling_popup)
440                 return;
441
442         if (list_item->chk_status != value) {
443
444                 /*
445                  * S5 concept:
446                  * On the volume popup,
447                  *  1) if user controls the slider, don't play any sounds£¬just change volume.
448                  *  2) if user controls the HW volume key for ringtone sound, the beep sound is supported
449
450                  * On Setting > Sound
451                  *  1) if user controls the slider, change volume & play sound
452                  *  2) if user controls the HW volume key, do nothing(DO NOT change volume,DO NoT play sound)
453                 */
454                 if (0 != safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
455                         /*Play Tap Sound,then stop at once */
456                         if (feedback_initialize() == FEEDBACK_ERROR_NONE) {
457                                 /*      sound_manager_session_set_state_others(SOUND_STATE_PAUSE); */
458                                 feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TAP);
459                                 feedback_deinitialize();
460                         }
461                 }
462                 list_item->chk_status = value;
463                 setting_sound_update_slider_icon(list_item, SND_SLIDER_SYSTEM);
464         }
465 }
466
467
468 void __stop_change_cb(void *data, Evas_Object *obj, void *event_info)
469 {
470         SETTING_TRACE_BEGIN;
471         ret_if(data == NULL);
472         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
473         SETTING_TRACE("chk_status : %d, slider : %f", list_item->chk_status, elm_slider_value_get(obj));
474         if (list_item->chk_status == 0) {
475                 elm_slider_value_set(obj, 0.0);
476         } else if (list_item->chk_status == 15) {
477                 elm_slider_value_set(obj, 15.0);
478         }
479         SETTING_TRACE_END;
480 }
481
482 char *setting_do_not_disturb_is_enable(void *data)
483 {
484         int err = NOTIFICATION_ERROR_NONE;
485         bool do_not_disturb;
486         char *desc;
487         notification_system_setting_h system_setting = NULL;
488
489         err = notification_system_setting_load_system_setting(&system_setting);
490         setting_retvm_if(NULL == system_setting || NOTIFICATION_ERROR_NONE != err,
491                                                                         SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
492                                                                         "notification_system_setting_load_system_Setting failed");
493         err = notification_system_setting_get_do_not_disturb(system_setting, &do_not_disturb);
494         SETTING_TRACE("do_not_disturb: %d", do_not_disturb);
495
496         if (1 == do_not_disturb){
497                 notification_system_setting_free_system_setting(system_setting);
498                 return "IDS_ST_BODY_ON";
499         } else {
500                 notification_system_setting_free_system_setting(system_setting);
501                 return "IDS_ST_BODY_ALERTTYPE_OFF";
502         }
503 }
504
505 static void
506 __sound_chk_cb(void *data, Evas_Object *obj,
507                void *event_info)
508 {
509         SETTING_TRACE_BEGIN;
510         /* error check */
511         ret_if(data == NULL);
512         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
513         SettingProfileUG *ad = list_item->userdata;
514         ret_if(ad == NULL);
515
516         setting_sound_close_all_mm_players(ad);
517         list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
518         /* rollback */
519         setting_update_gl_item_chk_status(list_item, !list_item->chk_status);
520         setting_sound_main_mouse_up_Gendial_list_cb(ad, NULL, list_item->item);
521 }
522
523 #define INIT_PATH       "/opt/usr/share/settings/Vibrations/"
524 static void __get_lite_main_list(void *data)
525 {
526         SETTING_TRACE_BEGIN;
527         ret_if(!data);
528         SettingProfileUG *ad = (SettingProfileUG *)data;
529
530         int vconf_value = 0;
531         char *sub_desc = NULL;
532         char *left_icon = NULL;
533         int mm_value = 0;
534         int sound_value = 0;
535         int vconf_ret = 0;
536         char *pa_ringtone = NULL;
537
538         Evas_Object *genlist = ad->gl_lite_main;
539         elm_genlist_block_count_set(genlist, 3);
540         elm_genlist_homogeneous_set(genlist, 1);
541
542         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_value) < 0)
543                 sound_value = TRUE;     /*  default value of sound : on */
544
545         Elm_Genlist_Item_Class *itc_slider = NULL;
546
547
548         //----------------------------------------------------------------------------
549         //----------------------------------------------------------------------------
550         //----------------------------------------------------------------------------
551         itc_slider = &(ad->itc_layout_1icon);
552
553         if (0 == safeStrCmp(ad->viewtype, VOLUME_APP_NAME))
554                 itc_slider = &(ad->itc_layout);
555         //----------------------------------------------------------------------------
556         //----------------------------------------------------------------------------
557         //----------------------------------------------------------------------------
558
559         /* 1. Ringtones */
560         SETTING_TRACE(" ???????????? ad->viewtype : %s ", ad->viewtype);
561
562         if (0 != safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
563
564                 int sd_status = VCONFKEY_SYSMAN_MMC_REMOVED;
565                 if (vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &sd_status) != 0) {
566                         SETTING_TRACE_ERROR("fail to get mmc status");
567                 }
568                 char *sdcard_filepath = vconf_get_str(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_STR);
569                 if (0 == safeStrNCmp(sdcard_filepath, INIT_PATH, safeStrLen(INIT_PATH))) {
570                         vconf_set_str(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_STR, "NONE");
571                         sdcard_filepath = vconf_get_str(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_STR);
572                 }
573                 if (safeStrCmp(sdcard_filepath, "NONE") != 0 && sd_status == VCONFKEY_SYSMAN_MMC_MOUNTED) {
574                         /*check sdcard filepath*/
575                         if (sdcard_filepath)
576                                 pa_ringtone = strdup(sdcard_filepath);
577                         FREE(sdcard_filepath);
578                         vconf_set_str(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_STR, "NONE");
579                 } else {
580                         pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
581                 }
582                 if (setting_sound_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL) {
583                         if (isEmulBin()) {
584                                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
585                         } else {
586                                 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
587                         }
588                 }
589                 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
590                 if (vconf_ret < 0) {
591                         SETTING_TRACE_DEBUG("failed to set vconf");
592                 }
593                 sub_desc = setting_media_basename(pa_ringtone);
594                 ad->data_call_alert_tone =
595                     setting_create_Gendial_field_def(genlist, &itc_2text_2,
596                                                      setting_sound_main_mouse_up_Gendial_list_cb,
597                                                      ad, SWALLOW_Type_INVALID, NULL,
598                                                      NULL, 0, "IDS_ST_MBODY_RINGTONE",
599                                                      sub_desc, NULL);
600                 if (ad->data_call_alert_tone) {
601                         __BACK_POINTER_SET(ad->data_call_alert_tone);
602                         ad->data_call_alert_tone->userdata = ad;
603                 }
604
605                 FREE(pa_ringtone);
606                 G_FREE(sub_desc);
607         }
608
609
610         /* 2. call volumn. */
611         if (sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
612                 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
613         if (sound_value == FALSE)
614                 mm_value = 0;
615
616         left_icon = setting_sound_get_slider_icon(SND_SLIDER_CALL, mm_value);
617         ADD_SOUND_SLIDER(ad->data_call_volume, genlist,
618                          (*itc_slider),
619                          left_icon, NULL,
620                          mm_value, "IDS_ST_MBODY_RINGTONE", ad,/*"IDS_ST_HEADER_RINGTONES" is for volume App,in Setting > Sound,it has no title */
621                          __call_slider_change_cb,
622                          SETTING_SOUND_VOL_MAX,
623                          __start_change_cb, __stop_change_cb);
624         __BACK_POINTER_SET(ad->data_call_volume);
625
626         /* 3. Notification alert */
627         if (0 != safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
628                 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
629                 if (setting_sound_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL) {
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_media_basename(pa_ringtone);
636                 ad->data_msg_alert_tone =
637                     setting_create_Gendial_field_def(genlist, &itc_2text_2,
638                                                      setting_sound_main_mouse_up_Gendial_list_cb,
639                                                      ad, SWALLOW_Type_INVALID, NULL,
640                                                      NULL, 0,
641                                                      "IDS_ST_BODY_NOTIFICATION"/*SETTING_SOUND_TEXT_MSG_ALERT*/,
642                                                      sub_desc, NULL);
643                 if (ad->data_msg_alert_tone) {
644                         __BACK_POINTER_SET(ad->data_msg_alert_tone);
645                         ad->data_msg_alert_tone->userdata = ad;
646                 }
647
648                 FREE(pa_ringtone);
649                 G_FREE(sub_desc);
650         }
651         /* 4.noti volumn */
652         if (sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
653                 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
654         if (sound_value == FALSE)
655                 mm_value = 0;
656
657         left_icon = setting_sound_get_slider_icon(SND_SLIDER_NOTI, mm_value);
658         ADD_SOUND_SLIDER(ad->data_noti_volume, genlist,
659                          (*itc_slider),
660                          left_icon, NULL,
661                          mm_value, "IDS_ST_BODY_NOTIFICATION", ad,
662                          __noti_slider_change_cb,
663                          SETTING_SOUND_VOL_MAX,
664                          __start_change_cb, __stop_change_cb);
665         __BACK_POINTER_SET(ad->data_noti_volume);
666
667         /* 5.media volume */
668         if (sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
669                 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
670
671         left_icon = setting_sound_get_slider_icon(SND_SLIDER_MEDIA, mm_value);
672         ADD_SOUND_SLIDER(ad->data_media_volume, genlist, ad->itc_layout,
673                          left_icon, NULL/*IMG_SLIDER_BTN_VOLUME02*/,
674                          mm_value, "IDS_ST_BODY_MEDIA", ad,
675                          __media_slider_change_cb,
676                          SETTING_SOUND_VOL_MAX,
677                          __start_change_cb, __stop_change_cb);
678
679         __BACK_POINTER_SET(ad->data_media_volume);
680
681         /* 6.system volume */
682         if (sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0) {
683                 SETTING_TRACE_DEBUG("Fail to get volume");
684                 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
685         }
686         if (sound_value == FALSE)
687                 mm_value = 0;
688
689         left_icon = setting_sound_get_slider_icon(SND_SLIDER_SYSTEM, mm_value);
690         ADD_SOUND_SLIDER(ad->data_touch_volume, genlist, ad->itc_layout,
691                          left_icon, NULL/*IMG_SLIDER_BTN_SYSTEM_VOLUME*/,
692                          mm_value, "IDS_ST_BODY_SYSTEM", ad,
693                          __sys_slider_change_cb,
694                          SETTING_SOUND_VOL_MAX,
695                          __start_change_cb, __stop_change_cb);
696
697         __BACK_POINTER_SET(ad->data_touch_volume);
698
699         if (0 != safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
700                 /* 7. Vibrate when ringing */
701                 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, &vconf_value) < 0) {
702                         vconf_value = TRUE;     /*  default value of vibrate sound : on */
703                 }
704                 ADD_TOGGLE_MENU2(ad->data_sound_when_ring, genlist, itc_1text_1icon, "IDS_ST_BODY_VIBRATE_WHEN_RINGING", vconf_value, ad);
705                 __BACK_POINTER_SET(ad->data_sound_when_ring);
706                 setting_genlist_item_disabled_set(ad->data_sound_when_ring, !sound_value);
707
708                 /* 8. Feedback */
709                 setting_create_Gendial_field_def(genlist, &itc_1text,
710                                 setting_sound_main_mouse_up_Gendial_list_cb,
711                                 data, SWALLOW_Type_INVALID, NULL,
712                                 NULL, 0,
713                                 "IDS_ST_HEADER_FEEDBACK", NULL, NULL);
714
715                 /* Notifications */
716                 setting_create_Gendial_field_titleItem(genlist, &itc_group_item, _("IDS_ST_BODY_NOTIFICATIONS"), NULL);
717                 /* 9. Notifications - Do not disturb */
718                 char *sub_desc = setting_do_not_disturb_is_enable(data);
719                 ad->data_do_not_disturb = setting_create_Gendial_field_def(genlist, &itc_2text_2,
720                                                                                                                         setting_sound_main_mouse_up_Gendial_list_cb,
721                                                                                                                         data, SWALLOW_Type_INVALID, NULL,
722                                                                                                                         NULL, 0,
723                                                                                                                         "IDS_ST_MBODY_DO_NOT_DISTURB_ABB", sub_desc, NULL);
724                 /* 10. Notifications - App notifications */
725                 setting_create_Gendial_field_def(genlist, &itc_2text_2,
726                                                                                 setting_sound_main_mouse_up_Gendial_list_cb,
727                                                                                 data, SWALLOW_Type_INVALID, NULL,
728                                                                                 NULL, 0,
729                                                                                 "IDS_ST_MBODY_APP_NOTIFICATIONS",
730                                                                                 "IDS_ST_BODY_ALLOW_OR_BLOCK_NOTIFICATIONS_FROM_INDIVIDUAL_APPLICATIONS", NULL);
731
732                 ad->gl_lite_main = genlist;
733
734         }
735         if (!sound_value) {
736                 setting_genlist_item_disabled_set(ad->data_noti_volume, 1);
737                 setting_genlist_item_disabled_set(ad->data_touch_volume, 1);
738         }
739 }
740
741 static void __volume_popup_del_cb(void *data, Evas_Object *obj, void *event_info)
742 {
743         SETTING_TRACE_BEGIN;
744         /*SETTING_TRACE(" REMOVE THE POPUP OBJECT BY THIS FUNCTION "); */
745         elm_exit();
746 }
747
748 void vibration_state_event_handler(const char *event_name, bundle *data, void *user_data)
749 {
750         const char *vibration_state_set = NULL;
751         SETTING_TRACE("vibration state set event (%s) received", event_name);
752
753         vibration_state_set = bundle_get_val(data, EVT_KEY_VIBRATION_STATE);
754         SETTING_TRACE("vibration_state_set(%s)", vibration_state_set);
755 }
756
757 int vibration_state_reg_id;
758
759 static Eina_Bool
760 setting_soudn_main_click_softkey_back_cb(void *data, Evas_Object *obj,
761                                          void *event_info)
762 {
763         SETTING_TRACE_BEGIN;
764         /* error check */
765         setting_retvm_if(data == NULL, EINA_FALSE,
766                          "[Setting > Display] Data parameter is NULL");
767
768         SettingProfileUG *ad = (SettingProfileUG *) data;
769
770         /* Send destroy request */
771         ug_destroy_me(ad->ug);
772         SETTING_TRACE_END;
773         return EINA_FALSE;
774
775 }
776
777
778 static int setting_sound_main_create(void *cb)
779 {
780         SETTING_TRACE_BEGIN;
781         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
782         SettingProfileUG *ad = (SettingProfileUG *) cb;
783
784
785         /* 1.Grab Hard Key */
786         __setting_sound_ug_key_grab(ad);
787         SETTING_TRACE("viewtype: %s", ad->viewtype);
788         if (!safeStrCmp(ad->viewtype, VOLUME_APP_NAME)) {
789                 ad->ly_main = setting_create_popup_with_list(&ad->gl_lite_main, ad, ad->win_get,
790                                                              "IDS_ST_BODY_VOLUME", __volume_popup_del_cb,
791                                                              0 , false, false, 1, "IDS_ST_SK3_DONE");
792                 __get_lite_main_list(ad);
793         } else {
794                 ad->ly_main = setting_create_win_layout(ad->win_get);
795                 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
796
797                 ADD_GENLIST(ad->gl_lite_main, ad->navi_bar);
798
799                 __get_lite_main_list(ad);
800
801                 Evas_Object *lbtn = setting_create_button(ad->navi_bar, _(NULL),
802                                                           NAVI_BACK_ARROW_BUTTON_STYLE,
803                                                           setting_soudn_main_click_softkey_back_cb, ad);
804
805
806                 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, KeyStr_Sounds, lbtn, NULL, ad->gl_lite_main, NULL);
807                 elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)setting_sound_main_click_softkey_cancel_cb, ad);
808                 //elm_object_item_part_content_set(navi_it, "title_left_btn", lbtn);
809                 elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
810         }
811         setting_view_sound_main.is_create = TRUE;
812
813         /* eventsystem */
814         if (ES_R_OK != eventsystem_register_event(SYS_EVENT_VIBRATION_STATE,
815                                                   &vibration_state_reg_id,
816                                                   (eventsystem_handler)vibration_state_event_handler, cb)) {
817                 SETTING_TRACE_ERROR("error");
818         }
819         SETTING_TRACE_END;
820         return SETTING_RETURN_SUCCESS;
821 }
822
823 static int setting_sound_main_destroy(void *cb)
824 {
825         /* error check */
826         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
827         SETTING_TRACE_BEGIN;
828         retv_if(!setting_view_sound_main.is_create, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
829
830         SettingProfileUG *ad = (SettingProfileUG *) cb;
831
832         /* 1.Ungrab Key */
833         __setting_sound_ug_key_ungrab(ad);
834
835         if (ad->play_ringtone_idler) {
836                 ecore_idler_del(ad->play_ringtone_idler);
837                 ad->play_ringtone_idler = NULL;
838         }
839
840         if (ad->ly_main != NULL) {
841                 evas_object_del(ad->ly_main);
842         }
843         setting_view_sound_main.is_create = FALSE;
844
845         if (ES_R_OK != eventsystem_unregister_event(vibration_state_reg_id)) {
846                 SETTING_TRACE_ERROR("error");
847         }
848         return SETTING_RETURN_SUCCESS;
849 }
850
851 static int setting_sound_main_update(void *cb)
852 {
853         /* error check */
854         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
855
856         SettingProfileUG *ad = (SettingProfileUG *) cb;
857
858         if (ad->ly_main != NULL) {
859                 evas_object_show(ad->ly_main);
860         }
861         return SETTING_RETURN_SUCCESS;
862 }
863
864 static int setting_sound_main_cleanup(void *cb)
865 {
866         /* error check */
867         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
868
869         SettingProfileUG *ad = (SettingProfileUG *) cb;
870
871         if (ad->ly_main != NULL) {
872                 evas_object_hide(ad->ly_main);
873         }
874
875         return SETTING_RETURN_SUCCESS;
876 }
877
878 /* ***************************************************
879  *
880  *general func
881  *
882  ***************************************************/
883
884 /* ***************************************************
885  *
886  *call back func
887  *
888  ***************************************************/
889
890 static Eina_Bool setting_sound_main_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
891 {
892         /* error check */
893         retv_if(data == NULL, EINA_FALSE);
894
895         SettingProfileUG *ad = (SettingProfileUG *) data;
896         SETTING_TRACE_BEGIN;
897
898         /* close mm plaer */
899         setting_sound_close_all_mm_players(ad);
900
901         /* Send destroy request */
902         ug_destroy_me(ad->ug);
903
904         return EINA_FALSE;
905 }
906
907 static void setting_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
908 {
909         SETTING_TRACE_BEGIN;
910         ret_if(priv == NULL);
911         SettingProfileUG *ad = (SettingProfileUG *) priv;
912
913         int sound_value = 0, volume = 0;
914
915         __setting_sound_ug_key_grab(ad);
916
917         if (ug) {
918                 setting_ug_destroy(ug);
919                 ad->ug_loading = NULL;
920         }
921
922         if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_value) < 0)
923                 sound_value = TRUE;
924
925         if (sound_value == FALSE)
926                 volume = 0;
927         else
928                 (void)sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
929
930         if (ad->data_call_volume && ad->data_call_volume->eo_check) {
931                 ad->data_call_volume->chk_status = volume;
932                 elm_slider_value_set(ad->data_call_volume->eo_check, volume);
933         }
934
935         if (sound_value == FALSE)
936                 volume = 0;
937         else
938                 (void)sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &volume);
939
940         if (ad->data_noti_volume && ad->data_noti_volume->eo_check) {
941                 ad->data_noti_volume->chk_status = volume;
942                 elm_slider_value_set(ad->data_noti_volume->eo_check, volume);
943         }
944
945         setting_sound_update_slider_icon(ad->data_call_volume, SND_SLIDER_CALL);
946         setting_sound_update_slider_icon(ad->data_noti_volume, SND_SLIDER_NOTI);
947 }
948
949 static void
950 setting_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
951                                        app_control_h result, void *priv)
952 {
953         SETTING_TRACE_BEGIN;
954         ret_if(priv == NULL);
955
956         SettingProfileUG *ad = (SettingProfileUG *) priv;
957         char *ringtone_file = NULL;
958         char *ringtone_path = NULL;
959
960         app_control_get_extra_data(result, "result", &ringtone_path);
961         if (!ringtone_path)
962                 return;
963
964         char *recommend_time = NULL;
965         app_control_get_extra_data(result, "position", &recommend_time);
966
967         SETTING_TRACE("ringtone_path:%s", ringtone_path);
968
969         if (ringtone_path != NULL) {
970                 ringtone_file = setting_media_basename(ringtone_path);
971                 SETTING_TRACE("ringtone_file:%s", ringtone_file);
972
973                 if (0 == safeStrCmp(ad->ringtone_type, "IDS_ST_MBODY_RINGTONE")) {
974                         if (vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
975                                 if (ad->data_call_alert_tone) {
976                                         ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
977
978                                         elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
979                                         elm_genlist_item_update(ad->data_call_alert_tone->item);
980                                 }
981                         }
982                         if (recommend_time) {
983                                 char recommend_info[512] = {0,};
984                                 snprintf(recommend_info, 512, "%s; %smsec", ringtone_path, recommend_time);
985                                 SETTING_TRACE_DEBUG("%s", recommend_info);
986                                 vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_WITH_RECOMMENDATION_TIME_STR, recommend_info);
987                         }
988                 } else if (0 ==
989                            safeStrCmp(ad->ringtone_type, "IDS_ST_BODY_NOTIFICATION")) {
990                         if (vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
991                                 if (ad->data_msg_alert_tone) {
992                                         ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
993
994                                         elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
995                                         elm_genlist_item_update(ad->data_msg_alert_tone->item);
996                                 }
997                         }
998                 }
999         }
1000
1001         FREE(ringtone_path);
1002         FREE(recommend_time);
1003         G_FREE(ringtone_file);
1004         return;
1005 }
1006
1007 static void setting_sound_main_create_myfile_ug(SettingProfileUG *ad, char *titleID)
1008 {
1009         ret_if(ad == NULL);
1010
1011         if (ad->ug_loading) {
1012                 SETTING_TRACE("Myfiles ug is already loaded.");
1013                 return;
1014         }
1015
1016         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1017         if (!cbs)
1018                 return;
1019
1020         cbs->layout_cb = setting_layout_ug_cb;
1021         cbs->result_cb = setting_sound_main_result_myfile_ug_cb;
1022         cbs->destroy_cb = setting_sound_main_destroy_myfile_ug_cb;
1023         cbs->priv = (void *)ad;
1024
1025         app_control_h svc;
1026         if (app_control_create(&svc)) {
1027                 FREE(cbs);
1028                 return;
1029         }
1030
1031         const char *pa_cur_ringtone = NULL;
1032         const char *dir_path = NULL;
1033         if (0 == safeStrCmp(ad->ringtone_type, "IDS_ST_MBODY_RINGTONE")) {
1034                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1035                 if (pa_cur_ringtone == NULL) {
1036                         if (isEmulBin())
1037                                 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
1038                         else
1039                                 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
1040                 }
1041                 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1042         } else if (0 == safeStrCmp(ad->ringtone_type, "IDS_ST_BODY_NOTIFICATION")) {
1043                 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1044                 if (pa_cur_ringtone == NULL)
1045                         pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
1046                 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1047         }
1048         SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1049         SETTING_TRACE("dir_path:\t%s", dir_path);
1050
1051         app_control_add_extra_data(svc, "title", titleID);
1052         app_control_add_extra_data(svc, "domain", SETTING_PACKAGE);
1053         app_control_add_extra_data(svc, "path", dir_path);
1054         app_control_add_extra_data(svc, "select_type", "SINGLE_FILE");
1055         app_control_add_extra_data(svc, "file_type", "SOUND");
1056         app_control_add_extra_data(svc, "drm_type", "DRM_ALL");
1057         app_control_add_extra_data(svc, "silent", "silent show"); /* Show Silent item in the list */
1058         if (safeStrCmp(pa_cur_ringtone, "silent") == 0)
1059                 app_control_add_extra_data(svc, "marked_mode", "silent");       /* Set radio on Silent item */
1060         else
1061                 app_control_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1062
1063         elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1064         SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1065         ad->ug_loading = setting_ug_create(ad->ug, "setting-ringtone-efl", UG_MODE_FULLVIEW, svc, cbs);
1066         if (NULL == ad->ug_loading) {   /* error handling */
1067                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1068         }
1069
1070         app_control_destroy(svc);
1071         FREE(cbs);
1072
1073         /** @todo verify it's valid */
1074         if (pa_cur_ringtone) {
1075                 free((void *)pa_cur_ringtone);
1076                 pa_cur_ringtone = NULL;
1077         }
1078
1079         /*__setting_sound_ug_key_ungrab(ad); */
1080         /*__setting_sound_ug_menu_key_grab(ad); */
1081         return;
1082 }
1083
1084 static Eina_Bool __feedback_back_cb(void *data, Elm_Object_Item *it)
1085 {
1086         SETTING_TRACE_BEGIN;
1087         /* error check */
1088         retv_if(data == NULL, EINA_TRUE);
1089         SettingProfileUG *ad = (SettingProfileUG *) data;
1090         /*setting_view_change(&setting_view_feedback_main, &setting_view_sound_main, ad); */
1091         elm_naviframe_item_pop(ad->navi_bar);
1092         SETTING_TRACE_END;
1093         return EINA_TRUE;
1094 }
1095
1096 void setting_sound_notifications_layout_ug_cb(ui_gadget_h ug,
1097                                                                                         enum ug_mode mode,
1098                                                                                         void *priv)
1099 {
1100         SETTING_TRACE_BEGIN;
1101         Evas_Object *base;
1102
1103         if (!priv)
1104                 return;
1105
1106         base = (Evas_Object *) ug_get_layout(ug);
1107         if (!base)
1108                 return;
1109
1110         switch (mode) {
1111                 case UG_MODE_FULLVIEW:
1112                         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1113                                         EVAS_HINT_EXPAND);
1114                         evas_object_show(base);
1115                         break;
1116                 default:
1117                         break;
1118         }
1119         SETTING_TRACE_END;
1120 }
1121
1122 static void setting_sound_notifications_destroy_ug_cb(ui_gadget_h ug, void *priv)
1123 {
1124         SETTING_TRACE_BEGIN;
1125         ret_if(priv == NULL);
1126         SettingProfileUG *ad = (SettingProfileUG *) priv;
1127         if (ug) {
1128                 setting_ug_destroy(ug);
1129         }
1130         elm_genlist_realized_items_update(ad->gl_lite_main);
1131
1132         /* do not disturb */
1133         if (ad->data_do_not_disturb) {
1134                 char *sub_desc = setting_do_not_disturb_is_enable(priv);
1135                 ad->data_do_not_disturb->sub_desc = (char *)strdup(sub_desc);
1136                 elm_object_item_data_set(ad->data_do_not_disturb->item, ad->data_do_not_disturb);
1137                 elm_genlist_item_update(ad->data_do_not_disturb->item);
1138         }
1139 }
1140
1141 static void
1142 setting_sound_main_mouse_up_Gendial_list_cb(void *data,
1143                                             Evas_Object *obj,
1144                                             void *event_info)
1145 {
1146         /* error check */
1147         ret_if(data == NULL);
1148         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1149
1150         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1151         elm_genlist_item_selected_set(item, 0);
1152         Setting_GenGroupItem_Data *list_item = elm_object_item_data_get(item);
1153
1154         SettingProfileUG *ad = data;
1155
1156         if (SETTING_RETURN_SUCCESS != setting_sound_close_all_mm_players(ad)) {
1157                 SETTING_TRACE_ERROR("close player fail.");
1158         }
1159
1160         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1161         if (!safeStrCmp("IDS_ST_MBODY_RINGTONE", list_item->keyStr)
1162             || !safeStrCmp("IDS_ST_BODY_NOTIFICATION", list_item->keyStr)) {
1163                 ad->ringtone_type = list_item->keyStr;
1164                 setting_sound_main_create_myfile_ug(ad, list_item->keyStr);
1165                 __setting_sound_ug_key_ungrab(ad);
1166         } else if (!safeStrCmp("IDS_ST_MBODY_DO_NOT_DISTURB_ABB", list_item->keyStr)) {
1167                 SettingProfileUG *ad = (SettingProfileUG *) data;
1168                 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1169                 setting_retm_if(!cbs, "calloc failed");
1170                 cbs->layout_cb = setting_sound_notifications_layout_ug_cb;
1171                 cbs->result_cb = NULL;
1172                 cbs->destroy_cb = setting_sound_notifications_destroy_ug_cb;
1173                 cbs->priv = (void *)ad;
1174
1175                 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1176
1177                 SETTING_TRACE("To load ug[%s]", "ug-setting-notification-do-not-disturb-efl");
1178                 ug_create(ad->ug, "ug-setting-notification-do-not-disturb-efl", UG_MODE_FULLVIEW, NULL, cbs);
1179                 FREE(cbs);
1180
1181         } else if (!safeStrCmp("IDS_ST_MBODY_APP_NOTIFICATIONS", list_item->keyStr)) {
1182                 SettingProfileUG *ad = (SettingProfileUG *) data;
1183                 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1184                 setting_retm_if(!cbs, "calloc failed");
1185                 cbs->layout_cb = setting_sound_notifications_layout_ug_cb;
1186                 cbs->result_cb = NULL;
1187                 cbs->destroy_cb = setting_sound_notifications_destroy_ug_cb;
1188                 cbs->priv = (void *)ad;
1189
1190                 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1191
1192                 SETTING_TRACE("To load ug[%s]", "ug-setting-notification-app-notifications-efl");
1193                 ug_create(ad->ug, "ug-setting-notification-app-notifications-efl", UG_MODE_FULLVIEW, NULL, cbs);
1194                 FREE(cbs);
1195
1196         }
1197         /* additional */
1198         else if (!safeStrCmp("IDS_ST_BODY_VIBRATE_WHEN_RINGING", list_item->keyStr)) {
1199                 /* vibrate when ring*/
1200                 int old_status = list_item->chk_status;/*elm_check_state_get(list_item->eo_check); */
1201                 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATE_WHEN_RINGING_BOOL, !old_status) == 0) {
1202                         /* new status */
1203                         setting_update_gl_item_chk_status(list_item, !old_status);
1204                 }
1205         } else if (!safeStrCmp("IDS_ST_BODY_SCREEN_LOCK_SOUND", list_item->keyStr)) {
1206                 int old_status = list_item->chk_status;/*elm_check_state_get(list_item->eo_check); */
1207                 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, !old_status) == 0) {
1208                         /* new status */
1209                         setting_update_gl_item_chk_status(list_item, !old_status);
1210                 }
1211         } else if (!safeStrCmp("IDS_ST_MBODY_DIALLING_KEYPAD_TONE", list_item->keyStr)) {
1212                 int old_status = list_item->chk_status;/*elm_check_state_get(list_item->eo_check); */
1213                 /* To do : set vconfkey for touch sounds */
1214                 if (vconf_set_bool(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL, !old_status) == 0) {
1215                         /* new status */
1216                         setting_update_gl_item_chk_status(list_item, !old_status);
1217                 }
1218         } else if (!safeStrCmp("IDS_ST_MBODY_TOUCH_SOUND", list_item->keyStr)) {
1219                 int old_status = list_item->chk_status;/*elm_check_state_get(list_item->eo_check); */
1220                 /* To do : set vconfkey for touch sounds */
1221                 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1222                         /* new status */
1223                         setting_update_gl_item_chk_status(list_item, !old_status);
1224                 }
1225         } else if (!safeStrCmp("IDS_ST_HEADER_FEEDBACK", list_item->keyStr)) {
1226                 __setting_sound_ug_key_ungrab(ad);
1227
1228                 int vconf_value = 0;
1229                 Evas_Object *genlist = NULL;
1230                 ADD_GENLIST(genlist, ad->navi_bar);
1231                 /* 1. Touch sounds */
1232                 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
1233                         vconf_value = TRUE;     /*  default value of touch sounds : on */
1234                 ADD_TOGGLE_MENU(ad->data_touch_sounds, genlist, itc_1text_1icon, "IDS_ST_MBODY_TOUCH_SOUND", "IDS_ST_BODY_PLAY_A_SOUND_WHEN_BUTTONS_ICONS_AND_MENU_ITEMS_ARE_TAPPED", vconf_value, ad)
1235
1236                 /* 2. Keytones */
1237                 if (vconf_get_bool(VCONFKEY_SETAPPL_BUTTON_SOUNDS_BOOL, &vconf_value) < 0)
1238                         vconf_value = TRUE;     /*  default value of touch sounds : on */
1239                 ADD_TOGGLE_MENU(ad->data_button_sounds, genlist, itc_1text_1icon, "IDS_ST_MBODY_DIALLING_KEYPAD_TONE", "IDS_ST_BODY_PLAY_TONE_WHEN_THE_DIALLING_KEYPAD_IS_TAPPED", vconf_value, ad)
1240
1241                 /*  3. Screen lock sound */
1242                 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &vconf_value) < 0)
1243                         vconf_value = 0;        /*  default value of lock/unlock sound : off */
1244                 ADD_TOGGLE_MENU(ad->data_lock_sound, genlist, itc_1text_1icon, "IDS_ST_BODY_SCREEN_LOCK_SOUND", "IDS_ST_BODY_PLAY_SOUNDS_WHEN_LOCKING_AND_UNLOCKING_SCREEN", vconf_value, ad)
1245
1246                 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, "IDS_ST_HEADER_FEEDBACK", NULL, NULL, genlist, NULL);
1247                 elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
1248
1249                 elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)__feedback_back_cb, ad);
1250         }
1251 }