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)
406 pa_tone_path = SETTING_DEFAULT_CALL_TONE_SDK;
408 pa_tone_path = SETTING_DEFAULT_CALL_TONE;
410 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0)
413 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
416 SOUND_TYPE_RINGTONE);
418 case SETTING_VOL_TYPE_NOTIFICATION:
419 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
420 player = &(ad->mp_noti);
423 SETTING_TRACE_DEBUG("noti player will be created");
424 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
425 if(pa_tone_path == NULL)
427 pa_tone_path = SETTING_DEFAULT_MSG_TONE;
428 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0)
431 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
434 SOUND_TYPE_NOTIFICATION);
436 case SETTING_VOL_TYPE_MEDIA:
437 sound_manager_set_volume(SOUND_TYPE_MEDIA, (unsigned int)(value+0.5));
438 player = &(ad->mp_media);
441 SETTING_TRACE_DEBUG("media player will be created");
443 pa_tone_path = (char*)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
445 pa_tone_path = (char*)strdup(SETTING_DEFAULT_MEDIA_TONE);
447 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
452 case SETTING_VOL_TYPE_SYSTEM:
453 sound_manager_set_volume(SOUND_TYPE_SYSTEM, (unsigned int)(value+0.5));
454 player = &(ad->mp_sys);
457 SETTING_TRACE_DEBUG("ringtone player will be created");
458 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
459 svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
461 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
470 __create_volume_timer(ad, ad->cur_vol_type);
477 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
479 ret_if(data == NULL);
481 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
482 SettingProfileUG *ad = list_item->userdata;
484 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
485 SETTING_TRACE("ERROR device_haptic_stop_play");
490 switch(ad->cur_vol_type)
492 case SETTING_VOL_TYPE_NOTI_VIB:
493 if(ad->data_vib_volume)
495 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
496 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
498 elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
500 elm_slider_value_set(ad->data_vib_volume->eo_check, (unsigned int)(value+0.5));
503 case SETTING_VOL_TYPE_HAPTIC_VIB:
504 if(ad->data_touch_vib)
506 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
507 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
508 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, (unsigned int)(value+0.5));
510 elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
512 elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
518 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
522 static Evas_Object *__get_main_list(void *data)
524 retv_if(data == NULL, NULL);
526 SettingProfileUG *ad = (SettingProfileUG *) data;
528 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
529 return ad->sub_view[SETTING_PROF_VIEW_VOL];
531 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
532 elm_object_style_set(genlist, "dialogue");
533 retvm_if(genlist == NULL, NULL,
534 "Cannot set genlist object as contento of layout");
535 elm_genlist_clear(genlist); /* first to clear list */
540 Elm_Object_Item *item = elm_genlist_item_append(genlist,
541 &(ad->itc_seperator), NULL, NULL,
542 ELM_GENLIST_ITEM_NONE, NULL, NULL);
543 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
546 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
547 vconf_value = TRUE; /* default value of sound : on */
549 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
550 setting_profile_sound_main_mouse_up_Gendial_list_cb,
551 ad, SWALLOW_Type_1TOGGLE, NULL,
553 SETTING_SOUND_TEXT_SOUND, NULL,
554 setting_profile_sound_main_Gendial_chk_cb);
555 if (ad->data_sound) {
556 ad->data_sound->userdata = ad;
558 SETTING_TRACE_ERROR("ad->data_sound is NULL");
561 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
562 vconf_value = TRUE; /* default value of vibration : on */
564 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
565 setting_profile_sound_main_mouse_up_Gendial_list_cb,
566 ad, SWALLOW_Type_1TOGGLE, NULL,
568 SETTING_SOUND_TEXT_VIBRATION, NULL,
569 setting_profile_sound_main_Gendial_chk_cb);
570 if (ad->data_vibration) {
571 ad->data_vibration->userdata = ad;
573 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
576 (void)setting_create_Gendial_field_titleItem(genlist,
577 &(ad->itc_group_item),
578 "IDS_ST_BODY_VOLUME", NULL);
581 if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
582 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
583 ad->data_call_volume =
584 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
586 SWALLOW_Type_LAYOUT_SLIDER,
587 IMG_SLIDER_BTN_VOLUME01,
588 IMG_SLIDER_BTN_VOLUME02, mm_value,
589 SETTING_SOUND_TEXT_INCOMING_CALL,
591 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
592 if (ad->data_call_volume) {
593 ad->data_call_volume->win_main = ad->win_main_layout;
594 ad->data_call_volume->evas = ad->evas;
595 ad->data_call_volume->isIndicatorVisible = true;
596 ad->data_call_volume->slider_min = 0;
597 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
598 ad->data_call_volume->userdata = ad;
599 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
600 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
601 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
603 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
607 if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
608 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
609 ad->data_noti_volume =
610 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
612 SWALLOW_Type_LAYOUT_SLIDER,
613 IMG_SLIDER_BTN_VOLUME01,
614 IMG_SLIDER_BTN_VOLUME02, mm_value,
615 SETTING_SOUND_TEXT_NOTIFICATION,
617 setting_profile_sound_main_noti_sound_slider_value_change_cb);
618 if (ad->data_noti_volume) {
619 ad->data_noti_volume->win_main = ad->win_main_layout;
620 ad->data_noti_volume->evas = ad->evas;
621 ad->data_noti_volume->isIndicatorVisible = true;
622 ad->data_noti_volume->slider_min = 0;
623 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
624 ad->data_noti_volume->userdata = ad;
625 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
626 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
627 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
629 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
633 if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
634 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
635 ad->data_media_volume =
636 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
638 SWALLOW_Type_LAYOUT_SLIDER,
639 IMG_SLIDER_BTN_VOLUME01,
640 IMG_SLIDER_BTN_VOLUME02, mm_value,
641 SETTING_SOUND_TEXT_MEDIA, NULL,
642 setting_profile_sound_main_media_sound_slider_value_change_cb);
643 if (ad->data_media_volume) {
644 ad->data_media_volume->win_main = ad->win_main_layout;
645 ad->data_media_volume->evas = ad->evas;
646 ad->data_media_volume->isIndicatorVisible = true;
647 ad->data_media_volume->slider_min = 0;
648 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
649 ad->data_media_volume->userdata = ad;
650 ad->data_media_volume->start_change_cb = __media_start_change_cb;
651 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
652 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
654 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
657 /* h.system volume */
658 if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
659 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
660 ad->data_touch_volume =
661 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
663 SWALLOW_Type_LAYOUT_SLIDER,
664 IMG_SLIDER_BTN_VOLUME01,
665 IMG_SLIDER_BTN_VOLUME02, mm_value,
666 SETTING_SOUND_TEXT_SYSTEM, NULL,
667 settings_profile_sound_main_sys_sound_slider_value_change_cb);
668 if (ad->data_touch_volume) {
669 ad->data_touch_volume->win_main = ad->win_main_layout;
670 ad->data_touch_volume->evas = ad->evas;
671 ad->data_touch_volume->isIndicatorVisible = true;
672 ad->data_touch_volume->slider_min = 0;
673 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
674 ad->data_touch_volume->userdata = ad;
675 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
676 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
677 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
679 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
682 (void)setting_create_Gendial_field_titleItem(genlist,
683 &(ad->itc_group_item),
684 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
687 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) <
689 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
690 ad->data_vib_volume =
691 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
693 SWALLOW_Type_LAYOUT_SLIDER,
694 IMG_VIBRATION_ICON_01,
695 IMG_VIBRATION_ICON_02, vconf_value,
696 SETTING_SOUND_TEXT_NOTIFICATION,
698 setting_profile_sound_main_vib_sound_slider_value_change_cb);
699 if (ad->data_vib_volume) {
700 ad->data_vib_volume->win_main = ad->win_main_layout;
701 ad->data_vib_volume->evas = ad->evas;
702 ad->data_vib_volume->isIndicatorVisible = true;
703 ad->data_vib_volume->slider_min = 0;
704 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
705 ad->data_vib_volume->userdata = ad;
706 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
707 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
708 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
710 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
715 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
716 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
718 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
720 SWALLOW_Type_LAYOUT_SLIDER,
721 IMG_VIBRATION_ICON_01,
722 IMG_VIBRATION_ICON_02, vconf_value,
723 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL,
724 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
725 if (ad->data_touch_vib) {
726 ad->data_touch_vib->win_main = ad->win_main_layout;
727 ad->data_touch_vib->evas = ad->evas;
728 ad->data_touch_vib->isIndicatorVisible = true;
729 ad->data_touch_vib->slider_min = 0;
730 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
731 ad->data_touch_vib->userdata = ad;
732 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
733 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
734 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
736 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
739 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
741 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
742 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
743 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
744 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
747 ad->data_touch_sounds =
748 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
749 setting_profile_sound_main_mouse_up_Gendial_list_cb,
750 ad, SWALLOW_Type_1TOGGLE, NULL,
752 "IDS_ST_BODY_TOUCH_SOUNDS",
754 setting_profile_sound_main_Gendial_chk_cb);
755 if (ad->data_touch_sounds) {
756 ad->data_touch_sounds->userdata = ad;
758 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
761 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
763 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
764 NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
765 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
766 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
768 /* Screen lock sound */
769 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &vconf_value) < 0)
770 vconf_value = 1; /* default value of lock/unlock sound : on */
771 ad->data_lock_sound =
772 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
773 setting_profile_sound_main_mouse_up_Gendial_list_cb,
774 ad, SWALLOW_Type_1TOGGLE, NULL,
776 SETTING_SOUND_TEXT_LOCK_SOUND,
778 setting_profile_sound_main_Gendial_chk_cb);
779 if (ad->data_lock_sound) {
780 ad->data_lock_sound->userdata = ad;
782 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
785 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
786 ELM_GENLIST_ITEM_NONE, NULL, NULL);
787 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
789 __change_state_of_sliderbars(ad);
791 ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
793 return ad->sub_view[SETTING_PROF_VIEW_VOL];
796 static Evas_Object *__get_ringtone_list(void *data)
798 retv_if(data == NULL, NULL);
799 SettingProfileUG *ad = (SettingProfileUG *) data;
801 if(ad->sub_view[SETTING_PROF_VIEW_RTN])
802 return ad->sub_view[SETTING_PROF_VIEW_RTN];
804 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
805 elm_object_style_set(genlist, "dialogue");
806 retvm_if(genlist == NULL, NULL,
807 "Cannot set genlist object as contento of layout");
808 elm_genlist_clear(genlist); /* first to clear list */
809 setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
811 /* a. incoming call group */
812 (void)setting_create_Gendial_field_titleItem(genlist,
813 &(ad->itc_group_item),
814 SETTING_SOUND_TEXT_INCOMING_CALL,
819 char *sub_desc = NULL;
820 char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
821 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
824 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE_SDK);
826 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
827 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
829 SETTING_TRACE_DEBUG("failed to set vconf");
831 sub_desc = setting_file_basename(pa_ringtone);
833 ad->data_call_alert_tone =
834 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
835 setting_profile_sound_main_mouse_up_Gendial_list_cb,
836 ad, SWALLOW_Type_INVALID, NULL,
837 NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
839 if (ad->data_call_alert_tone) {
840 ad->data_call_alert_tone->userdata = ad;
842 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
848 /* a-2. vibration type */
849 char *setting_vib_type[SETTING_SOUND_VIB_TYPE_LEN] = {
850 _("IDS_ST_BODY_VIBRATION_1"),
851 _("IDS_ST_BODY_VIBRATION_2"),
852 _("IDS_ST_BODY_VIBRATION_3"),
853 _("IDS_ST_BODY_VIBRATION_4"),
854 _("IDS_ST_BODY_VIBRATION_5")
857 vconf_get_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, &value);
858 ad->data_call_alert_vib =
859 setting_create_Gendial_exp_parent_field(genlist,
860 &(ad->itc_2text_3_parent),
861 setting_profile_sound_main_mouse_up_Gendial_list_cb,
862 ad, SWALLOW_Type_INVALID,
863 SETTING_SOUND_TEXT_CALL_VIBRATION,
864 setting_vib_type[value]);
865 if (ad->data_call_alert_vib) {
866 ad->data_call_alert_vib->int_slp_setting_binded =
867 INT_SLP_SETTING_CALL_ALERT_VIB;
869 SETTING_TRACE_ERROR("ad->data_call_alert_vib is NULL");
872 /* b. notification */
873 (void)setting_create_Gendial_field_titleItem(genlist,
874 &(ad->itc_group_item),
875 SETTING_SOUND_TEXT_NOTIFICATION,
878 char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
879 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
880 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
881 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
882 _(SETTING_SOUND_TEXT_REPEAT_10MIN)
884 int repeat_value = 0;
886 /* b-1. msg ringtone */
887 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
888 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
890 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
891 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
893 SETTING_TRACE_DEBUG("failed to set vconf");
895 sub_desc = setting_file_basename(pa_ringtone);
897 ad->data_msg_alert_tone =
898 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
899 setting_profile_sound_main_mouse_up_Gendial_list_cb,
900 ad, SWALLOW_Type_INVALID, NULL,
902 SETTING_SOUND_TEXT_MSG_ALERT,
904 if (ad->data_msg_alert_tone) {
905 ad->data_msg_alert_tone->userdata = ad;
907 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
912 /* b-2. msg alert repetition */
914 (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
915 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
916 ad->data_msg_alert_repeat =
917 setting_create_Gendial_exp_parent_field(genlist,
918 &(ad->itc_2text_3_parent),
919 setting_profile_sound_main_mouse_up_Gendial_list_cb,
920 ad, SWALLOW_Type_INVALID,
921 SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
922 repeat_type[repeat_value]);
923 if (ad->data_msg_alert_repeat) {
924 ad->data_msg_alert_repeat->int_slp_setting_binded =
925 INT_SLP_SETTING_MSG_ALERT_REPEAT;
927 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
930 /* b-3. email ringtone */
931 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
932 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
934 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
935 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
937 SETTING_TRACE_DEBUG("failed to set vconf");
939 sub_desc = setting_file_basename(pa_ringtone);
941 ad->data_email_alert_tone =
942 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
943 setting_profile_sound_main_mouse_up_Gendial_list_cb,
944 ad, SWALLOW_Type_INVALID, NULL,
946 SETTING_SOUND_TEXT_EMAIL_ALERT,
948 if (ad->data_email_alert_tone) {
949 ad->data_email_alert_tone->userdata = ad;
951 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
956 /* b-4. email alert repetition */
958 (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
960 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
961 ad->data_email_alert_repeat =
962 setting_create_Gendial_exp_parent_field(genlist,
963 &(ad->itc_2text_3_parent),
964 setting_profile_sound_main_mouse_up_Gendial_list_cb,
965 ad, SWALLOW_Type_INVALID,
966 SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
967 repeat_type[repeat_value]);
968 if (ad->data_email_alert_repeat) {
969 ad->data_email_alert_repeat->int_slp_setting_binded =
970 INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
972 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
975 Elm_Object_Item *item = NULL;
976 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
977 ELM_GENLIST_ITEM_NONE, NULL, NULL);
978 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
980 ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
982 return ad->sub_view[SETTING_PROF_VIEW_RTN];
985 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
987 appcore_measure_start();
988 retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
989 retm_if(data == NULL, "Invalid argmuent: data is NULL");
991 SettingProfileUG *ad = (SettingProfileUG *) data;
993 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
994 SETTING_TRACE("ERROR device_haptic_stop_play");
997 setting_profile_close_all_mm_players(ad);
999 Evas_Object *sub_view = NULL;
1000 Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
1001 const char *tab_lable = elm_object_item_text_get(sel_item);
1003 //SETTING_TRACE("tab_lable:%s", tab_lable);
1004 if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
1006 device_haptic_stop_play(ad->hnd_hpt);
1007 sub_view = __get_main_list(ad);
1008 } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
1009 sub_view = __get_ringtone_list(ad);
1012 Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
1013 ret_if(old_sub_view == sub_view);
1018 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1019 evas_object_hide(old_sub_view);
1021 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
1022 evas_object_show(sub_view);
1026 static int setting_profile_sound_main_create(void *cb)
1028 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1030 SettingProfileUG *ad = (SettingProfileUG *) cb;
1032 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1033 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1036 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1037 elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
1038 evas_object_show(view_layout);
1039 ad->view_layout = view_layout;
1041 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1043 return SETTING_RETURN_FAIL;
1045 elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1046 ad->ctrl_bar = tabbar;
1047 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1048 elm_object_style_set(tabbar, "tabbar");
1050 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1052 VOLUME_STR, __view_change_cb, ad);
1054 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1056 RINGTONE_STR, __view_change_cb, ad);
1058 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1059 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1061 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1062 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1063 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1065 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
1066 elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1068 setting_view_profile_sound_main.is_create = TRUE;
1070 return SETTING_RETURN_SUCCESS;
1073 static int setting_profile_sound_main_destroy(void *cb)
1076 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1078 SettingProfileUG *ad = (SettingProfileUG *) cb;
1080 if (ad->ly_main != NULL) {
1081 //Fix the memory leak,
1082 //Manage ad->sub_view[] separately, unset first, then delete in together
1083 if (ad->view_layout)
1085 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1087 int i = SETTING_PROF_VIEW_VOL;
1088 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1090 evas_object_del(ad->sub_view[i]);
1093 evas_object_del(ad->ly_main);
1094 setting_view_profile_sound_main.is_create = FALSE;
1096 return SETTING_RETURN_SUCCESS;
1099 static int setting_profile_sound_main_update(void *cb)
1102 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1104 SettingProfileUG *ad = (SettingProfileUG *) cb;
1106 if (ad->ly_main != NULL) {
1107 evas_object_show(ad->ly_main);
1110 return SETTING_RETURN_SUCCESS;
1113 static int setting_profile_sound_main_cleanup(void *cb)
1116 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1118 SettingProfileUG *ad = (SettingProfileUG *) cb;
1120 if (ad->ly_main != NULL) {
1121 evas_object_hide(ad->ly_main);
1124 return SETTING_RETURN_SUCCESS;
1127 /* ***************************************************
1131 ***************************************************/
1133 /* ***************************************************
1137 ***************************************************/
1140 setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1145 ret_if(data == NULL);
1147 SettingProfileUG *ad = (SettingProfileUG *) data;
1149 /* close mm plaer */
1150 setting_profile_close_all_mm_players(ad);
1151 /* close vibration */
1152 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1153 SETTING_TRACE("ERROR device_haptic_stop_play");
1157 /* Send destroy request */
1158 ug_destroy_me(ad->ug);
1163 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1165 ret_if(priv == NULL);
1166 SettingProfileUG *ad = (SettingProfileUG *) priv;
1170 ad->ug_loading = NULL;
1175 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1176 service_h result, void *priv)
1178 ret_if(priv == NULL);
1180 SettingProfileUG *ad = (SettingProfileUG *) priv;
1181 char *ringtone_file = NULL;
1182 char *ringtone_path = NULL;
1184 service_get_extra_data(result, "result", &ringtone_path);
1188 SETTING_TRACE("ringtone_path:%s", ringtone_path);
1190 if (ringtone_path != NULL) {
1191 ringtone_file = setting_file_basename(ringtone_path);
1192 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1194 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1196 (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1197 if (ad->data_call_alert_tone) {
1198 ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1200 elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1201 elm_genlist_item_update(ad->data_call_alert_tone->item);
1205 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1207 (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1208 if (ad->data_msg_alert_tone) {
1209 ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1211 elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1212 elm_genlist_item_update(ad->data_msg_alert_tone->item);
1216 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1218 (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1219 if (ad->data_email_alert_tone) {
1220 ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1222 elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1223 elm_genlist_item_update(ad->data_email_alert_tone->item);
1229 G_FREE(ringtone_file);
1234 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1237 ret_if(priv == NULL);
1239 SettingProfileUG *ad = (SettingProfileUG *) priv;
1242 base = (Evas_Object *) ug_get_layout(ug);
1247 case UG_MODE_FULLVIEW:
1248 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1249 elm_win_resize_object_add(ad->win_get, base);
1250 evas_object_show(base);
1258 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1264 SETTING_TRACE("Myfiles ug is already loaded.");
1268 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1272 cbs->layout_cb = setting_profile_layout_ug_cb;
1273 cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1274 cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1275 cbs->priv = (void *)ad;
1278 if (service_create(&svc)) {
1283 const char *pa_cur_ringtone = NULL;
1284 const char *dir_path = NULL;
1285 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1286 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1287 if (pa_cur_ringtone == NULL)
1290 pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE_SDK;
1292 pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1294 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1295 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1296 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1297 if (pa_cur_ringtone == NULL)
1298 pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1299 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1300 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1301 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1302 if (pa_cur_ringtone == NULL)
1303 pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1304 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1306 SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1307 SETTING_TRACE("dir_path:\t%s", dir_path);
1309 service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1310 service_add_extra_data(svc, "path", dir_path);
1311 service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1312 service_add_extra_data(svc, "file_type", "SOUND");
1313 service_add_extra_data(svc, "drm_type", "DRM_ALL");
1315 SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1316 ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1317 if (NULL == ad->ug_loading) { /* error handling */
1318 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1321 service_destroy(svc);
1324 /** @todo verify it's valid */
1326 FREE(pa_cur_ringtone);
1332 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1336 ret_if(data == NULL);
1338 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1339 SettingProfileUG *ad = list_item->userdata;
1341 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1343 /* restore the selected check status */
1344 list_item->chk_status = state;
1345 elm_check_state_set(list_item->eo_check, state);
1347 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1348 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1349 list_item->chk_status = !state;
1350 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1353 if (list_item->chk_status) {
1354 setting_enable_genlist_item(ad->data_call_volume->item);
1355 setting_enable_genlist_item(ad->data_noti_volume->item);
1356 setting_enable_genlist_item(ad->data_media_volume->item);
1357 setting_enable_genlist_item(ad->data_touch_volume->item);
1359 setting_profile_close_all_mm_players(ad);
1360 setting_disable_genlist_item(ad->data_call_volume->item);
1361 setting_disable_genlist_item(ad->data_noti_volume->item);
1362 setting_disable_genlist_item(ad->data_media_volume->item);
1363 setting_disable_genlist_item(ad->data_touch_volume->item);
1365 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1366 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1367 list_item->chk_status = !state;
1368 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1370 if (list_item->chk_status) {
1371 setting_enable_genlist_item(ad->data_vib_volume->item);
1372 setting_enable_genlist_item(ad->data_touch_vib->item);
1374 /* Play vib if vib turns on */
1376 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1377 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1378 device_haptic_stop_play(ad->hnd_hpt);
1379 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5));
1382 SETTING_TRACE("Failed to play haptic monotone");
1384 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1385 SETTING_TRACE("ERROR device_haptic_stop_play");
1387 setting_disable_genlist_item(ad->data_vib_volume->item);
1388 setting_disable_genlist_item(ad->data_touch_vib->item);
1391 /* additional items */
1392 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1393 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1394 list_item->chk_status = !state;
1395 elm_check_state_set(list_item->eo_check, !state);
1404 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1409 ret_if(data == NULL);
1410 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1412 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1413 elm_genlist_item_selected_set(item, 0);
1414 Setting_GenGroupItem_Data *list_item =
1415 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1417 SettingProfileUG *ad = data;
1420 device_haptic_stop_play(ad->hnd_hpt);
1422 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1423 if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1424 || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1425 || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1426 ad->ringtone_type = list_item->keyStr;
1427 setting_profile_sound_main_create_myfile_ug(ad);
1428 } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1429 int old_status = elm_check_state_get(list_item->eo_check);
1430 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1432 list_item->chk_status = !old_status;
1433 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1434 if (list_item->chk_status) {
1435 setting_enable_genlist_item(ad->data_call_volume->item);
1436 setting_enable_genlist_item(ad->data_noti_volume->item);
1437 setting_enable_genlist_item(ad->data_media_volume->item);
1438 setting_enable_genlist_item(ad->data_touch_volume->item);
1440 setting_profile_close_all_mm_players(ad);
1441 setting_disable_genlist_item(ad->data_call_volume->item);
1442 setting_disable_genlist_item(ad->data_noti_volume->item);
1443 setting_disable_genlist_item(ad->data_media_volume->item);
1444 setting_disable_genlist_item(ad->data_touch_volume->item);
1448 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1449 int old_status = elm_check_state_get(list_item->eo_check);
1450 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1452 list_item->chk_status = !old_status;
1453 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1454 if (list_item->chk_status) {
1455 setting_enable_genlist_item(ad->data_vib_volume->item);
1456 setting_enable_genlist_item(ad->data_touch_vib->item);
1458 /* Play vib if vib turns on */
1460 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1461 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1462 device_haptic_stop_play(ad->hnd_hpt);
1463 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5));
1466 SETTING_TRACE("Failed to play haptic monotone");
1468 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
1469 SETTING_TRACE("ERROR device_haptic_stop_play");
1471 setting_disable_genlist_item(ad->data_vib_volume->item);
1472 setting_disable_genlist_item(ad->data_touch_vib->item);
1478 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1479 int old_status = elm_check_state_get(list_item->eo_check);
1480 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, !old_status) == 0) {
1482 list_item->chk_status = !old_status;
1483 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1487 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1488 int old_status = elm_check_state_get(list_item->eo_check);
1489 /* To do : set vconfkey for touch sounds */
1491 list_item->chk_status = !old_status;
1492 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1495 else if (ad->data_call_alert_vib == list_item
1496 || ad->data_msg_alert_repeat == list_item
1497 || ad->data_email_alert_repeat == list_item) {
1498 bool status = !elm_genlist_item_expanded_get(item);
1499 elm_genlist_item_expanded_set(item, status);
1504 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1509 ret_if(data == NULL);
1511 double val = elm_slider_value_get(obj);
1513 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1514 SettingProfileUG *ad = list_item->userdata;
1516 if(ad->mp_ringtone == NULL)
1519 if(list_item->chk_status != (int)(val+0.5))
1521 list_item->chk_status = (int)(val+0.5);
1522 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1527 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1532 ret_if(data == NULL);
1534 double val = elm_slider_value_get(obj);
1536 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1537 SettingProfileUG *ad = list_item->userdata;
1539 if(ad->mp_noti == NULL)
1542 if(list_item->chk_status != (int)(val+0.5))
1544 list_item->chk_status = val;
1549 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1554 ret_if(data == NULL);
1556 double val = elm_slider_value_get(obj);
1558 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1559 SettingProfileUG *ad = list_item->userdata;
1561 if(ad->mp_media == NULL)
1563 if(list_item->chk_status != (int)(val+0.5))
1565 list_item->chk_status = val;
1570 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1575 ret_if(data == NULL);
1577 double val = elm_slider_value_get(obj);
1579 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1580 SettingProfileUG *ad = list_item->userdata;
1582 if(ad->mp_sys == NULL)
1585 if(list_item->chk_status != (int)(val+0.5))
1587 list_item->chk_status = val;
1592 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1597 ret_if(data == NULL);
1599 static double priv_val_db = 5.0;
1600 static int priv_val_int = 0;
1601 double val = elm_slider_value_get(obj);
1602 SETTING_TRACE("val = %f", val);
1603 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1604 SettingProfileUG *ad = list_item->userdata;
1605 list_item->chk_status = val;
1610 value = (int)(val + 0.5); /* to sync displayed value on slider */
1611 if (value != priv_val_int) {
1612 int vib_volume = value;
1613 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1614 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1615 device_haptic_stop_play(ad->hnd_hpt);
1616 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, vib_volume);
1619 SETTING_TRACE("Failed to play haptic monotone");
1620 priv_val_int = value;
1627 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1633 ret_if(data == NULL);
1635 static double priv_val_db = 3.0;
1636 static int priv_val_int = 0;
1637 double val = elm_slider_value_get(obj);
1638 SETTING_TRACE("val = %f", val);
1639 Setting_GenGroupItem_Data *list_item =
1640 (Setting_GenGroupItem_Data *) data;
1641 SettingProfileUG *ad = list_item->userdata;
1642 list_item->chk_status = val;
1647 value = (int)(val + 0.5); /* to sync displayed value on slider */
1648 if (value != priv_val_int) {
1650 int vib_volume = value; /* SETTING_VIB_VOL_MAX; */
1651 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1652 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1653 device_haptic_stop_play(ad->hnd_hpt);
1654 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, vib_volume);
1657 SETTING_TRACE("Failed to play haptic monotone");
1658 priv_val_int = value;