4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <setting-profile-sound-main.h>
23 #define VOLUME_STR _("IDS_ST_SK_VOLUME")
24 #define RINGTONE_STR _("IDS_COM_BODY_RINGTONES")
26 #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG"
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);
33 static void setting_profile_layout_ug_cb(ui_gadget_h ug,
34 enum ug_mode mode, void *priv);
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,
43 /* ***************************************************
47 ***************************************************/
48 void __change_state_of_sliderbars(void *data)
51 SettingProfileUG *ad = (SettingProfileUG *) data;
54 int vibration_on = TRUE;
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);
62 if (ad->data_noti_volume) {
63 setting_disable_genlist_item(ad->data_noti_volume->item);
65 if (ad->data_media_volume) {
66 setting_disable_genlist_item(ad->data_media_volume->item);
68 if (ad->data_touch_volume) {
69 setting_disable_genlist_item(ad->data_touch_volume->item);
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);
81 if (ad->data_touch_vib) {
82 setting_disable_genlist_item(ad->data_touch_vib->item);
88 void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
91 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
92 retm_if(data == NULL, "Invalid argument: data is NULL");
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)
104 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
106 setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
107 data_subItem->chk_status, &err);
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);
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");
122 setting_profile_play_vibration(ad,
123 setting_profile_get_call_playing_vib_by_vconf_value
124 (data_subItem->chk_status));
128 static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info)
130 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
131 retm_if(data == NULL, "Invalid argument: data is NULL");
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);
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,
146 SWALLOW_Type_1RADIO, rgd,
148 "IDS_ST_BODY_VIBRATION_1",
151 setting_create_Gendial_exp_sub_field(scroller,
152 &(ad->itc_1icon_1text_sub),
153 __sound_sub_list_sel_cb,
155 SWALLOW_Type_1RADIO, rgd,
157 "IDS_ST_BODY_VIBRATION_2",
160 setting_create_Gendial_exp_sub_field(scroller,
161 &(ad->itc_1icon_1text_sub),
162 __sound_sub_list_sel_cb,
164 SWALLOW_Type_1RADIO, rgd,
166 "IDS_ST_BODY_VIBRATION_3",
169 setting_update_chk_status(rgd,
171 int_slp_setting_binded);
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,
181 SWALLOW_Type_1RADIO, rgd,
183 SETTING_SOUND_TEXT_REPEAT_ONCE,
186 setting_create_Gendial_exp_sub_field(scroller,
187 &(ad->itc_1icon_1text_sub),
188 __sound_sub_list_sel_cb,
190 SWALLOW_Type_1RADIO, rgd,
192 SETTING_SOUND_TEXT_REPEAT_2MIN,
195 setting_create_Gendial_exp_sub_field(scroller,
196 &(ad->itc_1icon_1text_sub),
197 __sound_sub_list_sel_cb,
199 SWALLOW_Type_1RADIO, rgd,
201 SETTING_SOUND_TEXT_REPEAT_5MIN,
203 setting_create_Gendial_exp_sub_field(scroller,
204 &(ad->itc_1icon_1text_sub),
205 __sound_sub_list_sel_cb,
207 SWALLOW_Type_1RADIO, rgd,
209 SETTING_SOUND_TEXT_REPEAT_10MIN,
212 setting_update_chk_status(rgd,
214 int_slp_setting_binded);
218 static void __mm_player_msg_cb(void *user_param)
220 ret_if(user_param == NULL);
221 SettingProfileUG *ad = (SettingProfileUG *)user_param;
224 case MM_MESSAGE_END_OF_STREAM:
225 SETTING_TRACE_DEBUG("End of Stream");
226 setting_profile_close_all_mm_players(ad);
231 SETTING_TRACE("completed_cb is called.");
232 setting_profile_close_all_mm_players(ad);
235 Eina_Bool __volume_timer_cb(void *data)
238 retv_if(data == NULL, EINA_FALSE);
239 SettingProfileUG *ad = (SettingProfileUG *)data;
242 SETTING_TRACE_DEBUG("cur_vol_type : %d", ad->cur_vol_type);
244 switch(ad->cur_vol_type)
246 case SETTING_VOL_TYPE_RINGTONE:
247 if(ad->data_call_volume)
249 value = elm_slider_value_get(ad->data_call_volume->eo_check);
250 sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)(value+0.5));
251 setting_profile_change_player_volume(&ad->mp_ringtone, value);
254 case SETTING_VOL_TYPE_NOTIFICATION:
255 if(ad->data_noti_volume)
257 value = elm_slider_value_get(ad->data_noti_volume->eo_check);
258 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
259 setting_profile_change_player_volume(&ad->mp_noti, value);
262 case SETTING_VOL_TYPE_MEDIA:
263 if(ad->data_media_volume)
265 value = elm_slider_value_get(ad->data_media_volume->eo_check);
266 sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)(value+0.5));
267 setting_profile_change_player_volume(&ad->mp_media, value);
270 case SETTING_VOL_TYPE_SYSTEM:
271 if(ad->data_touch_volume)
273 value = elm_slider_value_get(ad->data_touch_volume->eo_check);
274 sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)(value+0.5));
275 setting_profile_change_player_volume(&ad->mp_sys, value);
278 case SETTING_VOL_TYPE_NOTI_VIB:
279 if(ad->data_vib_volume)
281 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
282 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
285 case SETTING_VOL_TYPE_HAPTIC_VIB:
286 if(ad->data_touch_vib)
288 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
289 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
290 //It must change synchronizly to avoid the unexpected terminate issue
291 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, (unsigned int)(value+0.5));
298 return ECORE_CALLBACK_RENEW;
301 void __create_volume_timer(void *data, setting_volume_types type)
304 ret_if(data == NULL);
306 SettingProfileUG *ad = (SettingProfileUG *)data;
310 ecore_timer_del(ad->volume_timer);
311 ad->volume_timer = NULL;
312 SETTING_TRACE_DEBUG("[AA] volume timer is deleted");
314 ad->volume_timer = ecore_timer_add(SETTING_SOUND_VOLUME_TIMER_INTERVAL, (Ecore_Task_Cb)__volume_timer_cb, ad);
317 void __ringtone_start_change_cb(void *data, Evas_Object *obj, void *event_info)
319 ret_if(data == NULL);
321 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
322 SettingProfileUG *ad = list_item->userdata;
324 ad->cur_vol_type = SETTING_VOL_TYPE_RINGTONE;
325 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
327 void __noti_start_change_cb(void *data, Evas_Object *obj, void *event_info)
329 ret_if(data == NULL);
331 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
332 SettingProfileUG *ad = list_item->userdata;
334 ad->cur_vol_type = SETTING_VOL_TYPE_NOTIFICATION;
335 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_NOTIFICATION);
337 void __media_start_change_cb(void *data, Evas_Object *obj, void *event_info)
339 ret_if(data == NULL);
341 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
342 SettingProfileUG *ad = list_item->userdata;
344 ad->cur_vol_type = SETTING_VOL_TYPE_MEDIA;
345 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_MEDIA);
347 void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info)
349 ret_if(data == NULL);
351 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
352 SettingProfileUG *ad = list_item->userdata;
354 ad->cur_vol_type = SETTING_VOL_TYPE_SYSTEM;
355 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_SYSTEM);
358 void __noti_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
360 ret_if(data == NULL);
362 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
363 SettingProfileUG *ad = list_item->userdata;
365 ad->cur_vol_type = SETTING_VOL_TYPE_NOTI_VIB;
366 setting_profile_close_all_mm_players(ad);
369 void __haptic_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
372 ret_if(data == NULL);
374 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
375 SettingProfileUG *ad = list_item->userdata;
377 ad->cur_vol_type = SETTING_VOL_TYPE_HAPTIC_VIB;
378 setting_profile_close_all_mm_players(ad);
381 void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
384 ret_if(data == NULL);
386 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
387 SettingProfileUG *ad = list_item->userdata;
389 char *pa_tone_path = NULL;
390 player_h **player = NULL;
392 double value = elm_slider_value_get(obj);
394 switch(ad->cur_vol_type)
396 case SETTING_VOL_TYPE_RINGTONE:
397 sound_manager_set_volume(SOUND_TYPE_RINGTONE, (unsigned int)(value+0.5));
398 player = &(ad->mp_ringtone);
401 SETTING_TRACE_DEBUG("ringtone player will be created");
402 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
403 if(pa_tone_path == NULL)
405 pa_tone_path = SETTING_DEFAULT_CALL_TONE;
407 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0)
410 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
413 SOUND_TYPE_RINGTONE);
415 case SETTING_VOL_TYPE_NOTIFICATION:
416 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
417 player = &(ad->mp_noti);
420 SETTING_TRACE_DEBUG("noti player will be created");
421 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
422 if(pa_tone_path == NULL)
424 pa_tone_path = SETTING_DEFAULT_MSG_TONE;
425 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0)
428 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
431 SOUND_TYPE_NOTIFICATION);
433 case SETTING_VOL_TYPE_MEDIA:
434 sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)(value+0.5));
435 player = &(ad->mp_media);
438 SETTING_TRACE_DEBUG("media player will be created");
439 pa_tone_path = (char*)strdup(SETTING_DEFAULT_MEDIA_TONE);
441 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
446 case SETTING_VOL_TYPE_SYSTEM:
447 sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)(value+0.5));
448 player = &(ad->mp_sys);
451 SETTING_TRACE_DEBUG("ringtone player will be created");
452 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
453 svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
455 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
464 __create_volume_timer(ad, ad->cur_vol_type);
471 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
473 ret_if(data == NULL);
475 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
476 SettingProfileUG *ad = list_item->userdata;
478 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
479 SETTING_TRACE("ERROR device_haptic_stop_play");
484 switch(ad->cur_vol_type)
486 case SETTING_VOL_TYPE_NOTI_VIB:
487 if(ad->data_vib_volume)
489 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
490 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
492 elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
494 elm_slider_value_set(ad->data_vib_volume->eo_check, (unsigned int)(value+0.5));
497 case SETTING_VOL_TYPE_HAPTIC_VIB:
498 if(ad->data_touch_vib)
500 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
501 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
502 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, (unsigned int)(value+0.5));
504 elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
506 elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
512 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
516 static Evas_Object *__get_main_list(void *data)
518 retv_if(data == NULL, NULL);
520 SettingProfileUG *ad = (SettingProfileUG *) data;
522 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
523 return ad->sub_view[SETTING_PROF_VIEW_VOL];
525 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
526 elm_object_style_set(genlist, "dialogue");
527 retvm_if(genlist == NULL, NULL,
528 "Cannot set genlist object as contento of layout");
529 elm_genlist_clear(genlist); /* first to clear list */
534 Elm_Object_Item *item = elm_genlist_item_append(genlist,
535 &(ad->itc_seperator), NULL, NULL,
536 ELM_GENLIST_ITEM_NONE, NULL, NULL);
537 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
540 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
541 vconf_value = TRUE; /* default value of sound : on */
543 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
544 setting_profile_sound_main_mouse_up_Gendial_list_cb,
545 ad, SWALLOW_Type_1TOGGLE, NULL,
547 SETTING_SOUND_TEXT_SOUND, NULL,
548 setting_profile_sound_main_Gendial_chk_cb);
549 if (ad->data_sound) {
550 ad->data_sound->userdata = ad;
552 SETTING_TRACE_ERROR("ad->data_sound is NULL");
555 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
556 vconf_value = TRUE; /* default value of vibration : on */
558 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
559 setting_profile_sound_main_mouse_up_Gendial_list_cb,
560 ad, SWALLOW_Type_1TOGGLE, NULL,
562 SETTING_SOUND_TEXT_VIBRATION, NULL,
563 setting_profile_sound_main_Gendial_chk_cb);
564 if (ad->data_vibration) {
565 ad->data_vibration->userdata = ad;
567 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
570 (void)setting_create_Gendial_field_titleItem(genlist,
571 &(ad->itc_group_item),
572 "IDS_ST_BODY_VOLUME", NULL);
575 if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
576 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
577 ad->data_call_volume =
578 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
580 SWALLOW_Type_LAYOUT_SLIDER,
581 IMG_SLIDER_BTN_VOLUME01,
582 IMG_SLIDER_BTN_VOLUME02, mm_value,
583 SETTING_SOUND_TEXT_INCOMING_CALL,
585 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
586 if (ad->data_call_volume) {
587 ad->data_call_volume->win_main = ad->win_main_layout;
588 ad->data_call_volume->evas = ad->evas;
589 ad->data_call_volume->isIndicatorVisible = true;
590 ad->data_call_volume->slider_min = 0;
591 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
592 ad->data_call_volume->userdata = ad;
593 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
594 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
595 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
597 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
601 if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
602 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
603 ad->data_noti_volume =
604 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
606 SWALLOW_Type_LAYOUT_SLIDER,
607 IMG_SLIDER_BTN_VOLUME01,
608 IMG_SLIDER_BTN_VOLUME02, mm_value,
609 SETTING_SOUND_TEXT_NOTIFICATION,
611 setting_profile_sound_main_noti_sound_slider_value_change_cb);
612 if (ad->data_noti_volume) {
613 ad->data_noti_volume->win_main = ad->win_main_layout;
614 ad->data_noti_volume->evas = ad->evas;
615 ad->data_noti_volume->isIndicatorVisible = true;
616 ad->data_noti_volume->slider_min = 0;
617 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
618 ad->data_noti_volume->userdata = ad;
619 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
620 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
621 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
623 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
627 if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
628 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
629 ad->data_media_volume =
630 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
632 SWALLOW_Type_LAYOUT_SLIDER,
633 IMG_SLIDER_BTN_VOLUME01,
634 IMG_SLIDER_BTN_VOLUME02, mm_value,
635 SETTING_SOUND_TEXT_MEDIA, NULL,
636 setting_profile_sound_main_media_sound_slider_value_change_cb);
637 if (ad->data_media_volume) {
638 ad->data_media_volume->win_main = ad->win_main_layout;
639 ad->data_media_volume->evas = ad->evas;
640 ad->data_media_volume->isIndicatorVisible = true;
641 ad->data_media_volume->slider_min = 0;
642 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
643 ad->data_media_volume->userdata = ad;
644 ad->data_media_volume->start_change_cb = __media_start_change_cb;
645 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
646 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
648 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
651 /* h.system volume */
652 if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
653 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
654 ad->data_touch_volume =
655 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
657 SWALLOW_Type_LAYOUT_SLIDER,
658 IMG_SLIDER_BTN_VOLUME01,
659 IMG_SLIDER_BTN_VOLUME02, mm_value,
660 SETTING_SOUND_TEXT_SYSTEM, NULL,
661 settings_profile_sound_main_sys_sound_slider_value_change_cb);
662 if (ad->data_touch_volume) {
663 ad->data_touch_volume->win_main = ad->win_main_layout;
664 ad->data_touch_volume->evas = ad->evas;
665 ad->data_touch_volume->isIndicatorVisible = true;
666 ad->data_touch_volume->slider_min = 0;
667 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
668 ad->data_touch_volume->userdata = ad;
669 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
670 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
671 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
673 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
676 (void)setting_create_Gendial_field_titleItem(genlist,
677 &(ad->itc_group_item),
678 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
681 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) <
683 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
684 ad->data_vib_volume =
685 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
687 SWALLOW_Type_LAYOUT_SLIDER,
688 IMG_VIBRATION_ICON_01,
689 IMG_VIBRATION_ICON_02, vconf_value,
690 SETTING_SOUND_TEXT_NOTIFICATION,
692 setting_profile_sound_main_vib_sound_slider_value_change_cb);
693 if (ad->data_vib_volume) {
694 ad->data_vib_volume->win_main = ad->win_main_layout;
695 ad->data_vib_volume->evas = ad->evas;
696 ad->data_vib_volume->isIndicatorVisible = true;
697 ad->data_vib_volume->slider_min = 0;
698 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
699 ad->data_vib_volume->userdata = ad;
700 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
701 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
702 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
704 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
709 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
710 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
712 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
714 SWALLOW_Type_LAYOUT_SLIDER,
715 IMG_VIBRATION_ICON_01,
716 IMG_VIBRATION_ICON_02, vconf_value,
717 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL,
718 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
719 if (ad->data_touch_vib) {
720 ad->data_touch_vib->win_main = ad->win_main_layout;
721 ad->data_touch_vib->evas = ad->evas;
722 ad->data_touch_vib->isIndicatorVisible = true;
723 ad->data_touch_vib->slider_min = 0;
724 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
725 ad->data_touch_vib->userdata = ad;
726 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
727 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
728 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
730 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
733 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
735 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
736 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
737 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
738 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
741 ad->data_touch_sounds =
742 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
743 setting_profile_sound_main_mouse_up_Gendial_list_cb,
744 ad, SWALLOW_Type_1TOGGLE, NULL,
746 "IDS_ST_BODY_TOUCH_SOUNDS",
748 setting_profile_sound_main_Gendial_chk_cb);
749 if (ad->data_touch_sounds) {
750 ad->data_touch_sounds->userdata = ad;
752 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
755 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
757 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
758 NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
759 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
760 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
762 /* Screen lock sound */
763 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &vconf_value) < 0)
764 vconf_value = 1; /* default value of lock/unlock sound : on */
765 ad->data_lock_sound =
766 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
767 setting_profile_sound_main_mouse_up_Gendial_list_cb,
768 ad, SWALLOW_Type_1TOGGLE, NULL,
770 SETTING_SOUND_TEXT_LOCK_SOUND,
772 setting_profile_sound_main_Gendial_chk_cb);
773 if (ad->data_lock_sound) {
774 ad->data_lock_sound->userdata = ad;
776 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
779 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
780 ELM_GENLIST_ITEM_NONE, NULL, NULL);
781 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
783 __change_state_of_sliderbars(ad);
785 ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
787 return ad->sub_view[SETTING_PROF_VIEW_VOL];
790 static Evas_Object *__get_ringtone_list(void *data)
792 retv_if(data == NULL, NULL);
793 SettingProfileUG *ad = (SettingProfileUG *) data;
795 if(ad->sub_view[SETTING_PROF_VIEW_RTN])
796 return ad->sub_view[SETTING_PROF_VIEW_RTN];
798 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
799 elm_object_style_set(genlist, "dialogue");
800 retvm_if(genlist == NULL, NULL,
801 "Cannot set genlist object as contento of layout");
802 elm_genlist_clear(genlist); /* first to clear list */
803 setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
805 /* a. incoming call group */
806 (void)setting_create_Gendial_field_titleItem(genlist,
807 &(ad->itc_group_item),
808 SETTING_SOUND_TEXT_INCOMING_CALL,
813 char *sub_desc = NULL;
814 char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
815 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
817 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
818 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
820 SETTING_TRACE_DEBUG("failed to set vconf");
822 sub_desc = setting_file_basename(pa_ringtone);
824 ad->data_call_alert_tone =
825 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
826 setting_profile_sound_main_mouse_up_Gendial_list_cb,
827 ad, SWALLOW_Type_INVALID, NULL,
828 NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
830 if (ad->data_call_alert_tone) {
831 ad->data_call_alert_tone->userdata = ad;
833 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
839 /* a-2. vibration type */
840 char *setting_vib_type[SETTING_SOUND_VIB_TYPE_LEN] = {
841 _("IDS_ST_BODY_VIBRATION_1"),
842 _("IDS_ST_BODY_VIBRATION_2"),
843 _("IDS_ST_BODY_VIBRATION_3"),
844 _("IDS_ST_BODY_VIBRATION_4"),
845 _("IDS_ST_BODY_VIBRATION_5")
848 vconf_get_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, &value);
849 ad->data_call_alert_vib =
850 setting_create_Gendial_exp_parent_field(genlist,
851 &(ad->itc_2text_3_parent),
852 setting_profile_sound_main_mouse_up_Gendial_list_cb,
853 ad, SWALLOW_Type_INVALID,
854 SETTING_SOUND_TEXT_CALL_VIBRATION,
855 setting_vib_type[value]);
856 if (ad->data_call_alert_vib) {
857 ad->data_call_alert_vib->int_slp_setting_binded =
858 INT_SLP_SETTING_CALL_ALERT_VIB;
860 SETTING_TRACE_ERROR("ad->data_call_alert_vib is NULL");
863 /* b. notification */
864 (void)setting_create_Gendial_field_titleItem(genlist,
865 &(ad->itc_group_item),
866 SETTING_SOUND_TEXT_NOTIFICATION,
869 char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
870 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
871 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
872 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
873 _(SETTING_SOUND_TEXT_REPEAT_10MIN)
875 int repeat_value = 0;
877 /* b-1. msg ringtone */
878 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
879 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
881 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
882 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
884 SETTING_TRACE_DEBUG("failed to set vconf");
886 sub_desc = setting_file_basename(pa_ringtone);
888 ad->data_msg_alert_tone =
889 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
890 setting_profile_sound_main_mouse_up_Gendial_list_cb,
891 ad, SWALLOW_Type_INVALID, NULL,
893 SETTING_SOUND_TEXT_MSG_ALERT,
895 if (ad->data_msg_alert_tone) {
896 ad->data_msg_alert_tone->userdata = ad;
898 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
903 /* b-2. msg alert repetition */
905 (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
906 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
907 ad->data_msg_alert_repeat =
908 setting_create_Gendial_exp_parent_field(genlist,
909 &(ad->itc_2text_3_parent),
910 setting_profile_sound_main_mouse_up_Gendial_list_cb,
911 ad, SWALLOW_Type_INVALID,
912 SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
913 repeat_type[repeat_value]);
914 if (ad->data_msg_alert_repeat) {
915 ad->data_msg_alert_repeat->int_slp_setting_binded =
916 INT_SLP_SETTING_MSG_ALERT_REPEAT;
918 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
921 /* b-3. email ringtone */
922 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
923 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
925 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
926 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
928 SETTING_TRACE_DEBUG("failed to set vconf");
930 sub_desc = setting_file_basename(pa_ringtone);
932 ad->data_email_alert_tone =
933 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
934 setting_profile_sound_main_mouse_up_Gendial_list_cb,
935 ad, SWALLOW_Type_INVALID, NULL,
937 SETTING_SOUND_TEXT_EMAIL_ALERT,
939 if (ad->data_email_alert_tone) {
940 ad->data_email_alert_tone->userdata = ad;
942 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
947 /* b-4. email alert repetition */
949 (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
951 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
952 ad->data_email_alert_repeat =
953 setting_create_Gendial_exp_parent_field(genlist,
954 &(ad->itc_2text_3_parent),
955 setting_profile_sound_main_mouse_up_Gendial_list_cb,
956 ad, SWALLOW_Type_INVALID,
957 SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
958 repeat_type[repeat_value]);
959 if (ad->data_email_alert_repeat) {
960 ad->data_email_alert_repeat->int_slp_setting_binded =
961 INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
963 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
966 Elm_Object_Item *item = NULL;
967 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
968 ELM_GENLIST_ITEM_NONE, NULL, NULL);
969 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
971 ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
973 return ad->sub_view[SETTING_PROF_VIEW_RTN];
976 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
978 appcore_measure_start();
979 retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
980 retm_if(data == NULL, "Invalid argmuent: data is NULL");
982 SettingProfileUG *ad = (SettingProfileUG *) data;
984 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
985 SETTING_TRACE("ERROR device_haptic_stop_play");
988 setting_profile_close_all_mm_players(ad);
990 Evas_Object *sub_view = NULL;
991 Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
992 const char *tab_lable = elm_object_item_text_get(sel_item);
994 //SETTING_TRACE("tab_lable:%s", tab_lable);
995 if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
997 device_haptic_stop_play(ad->hnd_hpt);
998 sub_view = __get_main_list(ad);
999 } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
1000 sub_view = __get_ringtone_list(ad);
1003 Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
1004 ret_if(old_sub_view == sub_view);
1009 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1010 evas_object_hide(old_sub_view);
1012 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
1013 evas_object_show(sub_view);
1017 static int setting_profile_sound_main_create(void *cb)
1019 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1021 SettingProfileUG *ad = (SettingProfileUG *) cb;
1023 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1024 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1027 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1028 elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
1029 evas_object_show(view_layout);
1030 ad->view_layout = view_layout;
1032 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1034 return SETTING_RETURN_FAIL;
1036 elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1037 ad->ctrl_bar = tabbar;
1038 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1039 elm_object_style_set(tabbar, "tabbar");
1041 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1043 VOLUME_STR, __view_change_cb, ad);
1045 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1047 RINGTONE_STR, __view_change_cb, ad);
1049 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1050 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1052 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1053 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1054 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1056 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
1057 elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1059 setting_view_profile_sound_main.is_create = TRUE;
1061 return SETTING_RETURN_SUCCESS;
1064 static int setting_profile_sound_main_destroy(void *cb)
1067 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1069 SettingProfileUG *ad = (SettingProfileUG *) cb;
1071 if (ad->ly_main != NULL) {
1072 //Fix the memory leak,
1073 //Manage ad->sub_view[] separately, unset first, then delete in together
1074 if (ad->view_layout)
1076 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1078 int i = SETTING_PROF_VIEW_VOL;
1079 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1081 evas_object_del(ad->sub_view[i]);
1084 evas_object_del(ad->ly_main);
1085 setting_view_profile_sound_main.is_create = FALSE;
1087 return SETTING_RETURN_SUCCESS;
1090 static int setting_profile_sound_main_update(void *cb)
1093 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1095 SettingProfileUG *ad = (SettingProfileUG *) cb;
1097 if (ad->ly_main != NULL) {
1098 evas_object_show(ad->ly_main);
1101 return SETTING_RETURN_SUCCESS;
1104 static int setting_profile_sound_main_cleanup(void *cb)
1107 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1109 SettingProfileUG *ad = (SettingProfileUG *) cb;
1111 if (ad->ly_main != NULL) {
1112 evas_object_hide(ad->ly_main);
1115 return SETTING_RETURN_SUCCESS;
1118 /* ***************************************************
1122 ***************************************************/
1124 /* ***************************************************
1128 ***************************************************/
1131 setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1136 ret_if(data == NULL);
1138 SettingProfileUG *ad = (SettingProfileUG *) data;
1140 /* close mm plaer */
1141 setting_profile_close_all_mm_players(ad);
1142 /* close vibration */
1143 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1144 SETTING_TRACE("ERROR device_haptic_stop_play");
1148 /* Send destroy request */
1149 ug_destroy_me(ad->ug);
1154 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1156 ret_if(priv == NULL);
1157 SettingProfileUG *ad = (SettingProfileUG *) priv;
1161 ad->ug_loading = NULL;
1166 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1167 service_h result, void *priv)
1169 ret_if(priv == NULL);
1171 SettingProfileUG *ad = (SettingProfileUG *) priv;
1172 char *ringtone_file = NULL;
1173 char *ringtone_path = NULL;
1175 service_get_extra_data(result, "result", &ringtone_path);
1179 SETTING_TRACE("ringtone_path:%s", ringtone_path);
1181 if (ringtone_path != NULL) {
1182 ringtone_file = setting_file_basename(ringtone_path);
1183 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1185 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1187 (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1188 if (ad->data_call_alert_tone) {
1189 ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1191 elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1192 elm_genlist_item_update(ad->data_call_alert_tone->item);
1196 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1198 (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1199 if (ad->data_msg_alert_tone) {
1200 ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1202 elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1203 elm_genlist_item_update(ad->data_msg_alert_tone->item);
1207 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1209 (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1210 if (ad->data_email_alert_tone) {
1211 ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1213 elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1214 elm_genlist_item_update(ad->data_email_alert_tone->item);
1220 G_FREE(ringtone_file);
1225 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1228 ret_if(priv == NULL);
1230 SettingProfileUG *ad = (SettingProfileUG *) priv;
1233 base = (Evas_Object *) ug_get_layout(ug);
1238 case UG_MODE_FULLVIEW:
1239 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1240 elm_win_resize_object_add(ad->win_get, base);
1241 evas_object_show(base);
1249 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1255 SETTING_TRACE("Myfiles ug is already loaded.");
1259 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1263 cbs->layout_cb = setting_profile_layout_ug_cb;
1264 cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1265 cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1266 cbs->priv = (void *)ad;
1269 if (service_create(&svc)) {
1274 const char *pa_cur_ringtone = NULL;
1275 const char *dir_path = NULL;
1276 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1277 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1278 if (pa_cur_ringtone == NULL)
1280 pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1282 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1283 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1284 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1285 if (pa_cur_ringtone == NULL)
1286 pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1287 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1288 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1289 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1290 if (pa_cur_ringtone == NULL)
1291 pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1292 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1294 SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1295 SETTING_TRACE("dir_path:\t%s", dir_path);
1297 service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1298 service_add_extra_data(svc, "path", dir_path);
1299 service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1300 service_add_extra_data(svc, "file_type", "SOUND");
1301 service_add_extra_data(svc, "drm_type", "DRM_ALL");
1303 SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1304 ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1305 if (NULL == ad->ug_loading) { /* error handling */
1306 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1309 service_destroy(svc);
1312 /** @todo verify it's valid */
1314 FREE(pa_cur_ringtone);
1320 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1324 ret_if(data == NULL);
1326 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1327 SettingProfileUG *ad = list_item->userdata;
1329 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1331 /* restore the selected check status */
1332 list_item->chk_status = state;
1333 elm_check_state_set(list_item->eo_check, state);
1335 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1336 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1337 list_item->chk_status = !state;
1338 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1341 if (list_item->chk_status) {
1342 setting_enable_genlist_item(ad->data_call_volume->item);
1343 setting_enable_genlist_item(ad->data_noti_volume->item);
1344 setting_enable_genlist_item(ad->data_media_volume->item);
1345 setting_enable_genlist_item(ad->data_touch_volume->item);
1347 setting_profile_close_all_mm_players(ad);
1348 setting_disable_genlist_item(ad->data_call_volume->item);
1349 setting_disable_genlist_item(ad->data_noti_volume->item);
1350 setting_disable_genlist_item(ad->data_media_volume->item);
1351 setting_disable_genlist_item(ad->data_touch_volume->item);
1353 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1354 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1355 list_item->chk_status = !state;
1356 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1358 if (list_item->chk_status) {
1359 setting_enable_genlist_item(ad->data_vib_volume->item);
1360 setting_enable_genlist_item(ad->data_touch_vib->item);
1362 /* Play vib if vib turns on */
1364 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1365 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1366 device_haptic_stop_play(ad->hnd_hpt);
1367 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5));
1370 SETTING_TRACE("Failed to play haptic monotone");
1372 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1373 SETTING_TRACE("ERROR device_haptic_stop_play");
1375 setting_disable_genlist_item(ad->data_vib_volume->item);
1376 setting_disable_genlist_item(ad->data_touch_vib->item);
1379 /* additional items */
1380 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1381 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1382 list_item->chk_status = !state;
1383 elm_check_state_set(list_item->eo_check, !state);
1392 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1397 ret_if(data == NULL);
1398 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1400 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1401 elm_genlist_item_selected_set(item, 0);
1402 Setting_GenGroupItem_Data *list_item =
1403 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1405 SettingProfileUG *ad = data;
1408 device_haptic_stop_play(ad->hnd_hpt);
1410 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1411 if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1412 || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1413 || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1414 ad->ringtone_type = list_item->keyStr;
1415 setting_profile_sound_main_create_myfile_ug(ad);
1416 } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1417 int old_status = elm_check_state_get(list_item->eo_check);
1418 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1420 list_item->chk_status = !old_status;
1421 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1422 if (list_item->chk_status) {
1423 setting_enable_genlist_item(ad->data_call_volume->item);
1424 setting_enable_genlist_item(ad->data_noti_volume->item);
1425 setting_enable_genlist_item(ad->data_media_volume->item);
1426 setting_enable_genlist_item(ad->data_touch_volume->item);
1428 setting_profile_close_all_mm_players(ad);
1429 setting_disable_genlist_item(ad->data_call_volume->item);
1430 setting_disable_genlist_item(ad->data_noti_volume->item);
1431 setting_disable_genlist_item(ad->data_media_volume->item);
1432 setting_disable_genlist_item(ad->data_touch_volume->item);
1436 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1437 int old_status = elm_check_state_get(list_item->eo_check);
1438 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1440 list_item->chk_status = !old_status;
1441 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1442 if (list_item->chk_status) {
1443 setting_enable_genlist_item(ad->data_vib_volume->item);
1444 setting_enable_genlist_item(ad->data_touch_vib->item);
1446 /* Play vib if vib turns on */
1448 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1449 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1450 device_haptic_stop_play(ad->hnd_hpt);
1451 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5));
1454 SETTING_TRACE("Failed to play haptic monotone");
1456 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1457 SETTING_TRACE("ERROR device_haptic_stop_play");
1459 setting_disable_genlist_item(ad->data_vib_volume->item);
1460 setting_disable_genlist_item(ad->data_touch_vib->item);
1466 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1467 int old_status = elm_check_state_get(list_item->eo_check);
1468 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, !old_status) == 0) {
1470 list_item->chk_status = !old_status;
1471 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1475 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1476 int old_status = elm_check_state_get(list_item->eo_check);
1477 /* To do : set vconfkey for touch sounds */
1479 list_item->chk_status = !old_status;
1480 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1483 else if (ad->data_call_alert_vib == list_item
1484 || ad->data_msg_alert_repeat == list_item
1485 || ad->data_email_alert_repeat == list_item) {
1486 bool status = !elm_genlist_item_expanded_get(item);
1487 elm_genlist_item_expanded_set(item, status);
1492 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1497 ret_if(data == NULL);
1499 double val = elm_slider_value_get(obj);
1501 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1502 SettingProfileUG *ad = list_item->userdata;
1504 if(ad->mp_ringtone == NULL)
1507 if(list_item->chk_status != (int)(val+0.5))
1509 list_item->chk_status = (int)(val+0.5);
1510 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1515 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1520 ret_if(data == NULL);
1522 double val = elm_slider_value_get(obj);
1524 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1525 SettingProfileUG *ad = list_item->userdata;
1527 if(ad->mp_noti == NULL)
1530 if(list_item->chk_status != (int)(val+0.5))
1532 list_item->chk_status = val;
1537 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1542 ret_if(data == NULL);
1544 double val = elm_slider_value_get(obj);
1546 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1547 SettingProfileUG *ad = list_item->userdata;
1549 if(ad->mp_media == NULL)
1551 if(list_item->chk_status != (int)(val+0.5))
1553 list_item->chk_status = val;
1558 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1563 ret_if(data == NULL);
1565 double val = elm_slider_value_get(obj);
1567 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1568 SettingProfileUG *ad = list_item->userdata;
1570 if(ad->mp_sys == NULL)
1573 if(list_item->chk_status != (int)(val+0.5))
1575 list_item->chk_status = val;
1580 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1585 ret_if(data == NULL);
1587 static double priv_val_db = 5.0;
1588 static int priv_val_int = 0;
1589 double val = elm_slider_value_get(obj);
1590 SETTING_TRACE("val = %f", val);
1591 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1592 SettingProfileUG *ad = list_item->userdata;
1593 list_item->chk_status = val;
1598 value = (int)(val + 0.5); /* to sync displayed value on slider */
1599 if (value != priv_val_int) {
1600 int vib_volume = value;
1601 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1602 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1603 device_haptic_stop_play(ad->hnd_hpt);
1604 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, vib_volume);
1607 SETTING_TRACE("Failed to play haptic monotone");
1608 priv_val_int = value;
1615 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1621 ret_if(data == NULL);
1623 static double priv_val_db = 3.0;
1624 static int priv_val_int = 0;
1625 double val = elm_slider_value_get(obj);
1626 SETTING_TRACE("val = %f", val);
1627 Setting_GenGroupItem_Data *list_item =
1628 (Setting_GenGroupItem_Data *) data;
1629 SettingProfileUG *ad = list_item->userdata;
1630 list_item->chk_status = val;
1635 value = (int)(val + 0.5); /* to sync displayed value on slider */
1636 if (value != priv_val_int) {
1638 int vib_volume = value; /* SETTING_VIB_VOL_MAX; */
1639 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1640 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1641 device_haptic_stop_play(ad->hnd_hpt);
1642 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, vib_volume);
1645 SETTING_TRACE("Failed to play haptic monotone");
1646 priv_val_int = value;