4 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
6 * This file is part of org.tizen.setting
7 * Written by Hyejin Kim <hyejin0906.kim@samsung.com>
9 * PROPRIETARY/CONFIDENTIAL
11 * This software is the confidential and proprietary information of
12 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
13 * disclose such Confidential Information and shall use it only in
14 * accordance with the terms of the license agreement you entered
15 * into with SAMSUNG ELECTRONICS.
17 * SAMSUNG make no representations or warranties about the suitability
18 * of the software, either express or implied, including but not limited
19 * to the implied warranties of merchantability, fitness for a particular
20 * purpose, or non-infringement. SAMSUNG shall not be liable for any
21 * damages suffered by licensee as a result of using, modifying or
22 * distributing this software or its derivatives.
25 #include <setting-profile-sound-main.h>
26 #include <setting-common-resource.h>
29 #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG"
31 static int setting_profile_sound_main_create(void *cb);
32 static int setting_profile_sound_main_destroy(void *cb);
33 static int setting_profile_sound_main_update(void *cb);
34 static int setting_profile_sound_main_cleanup(void *cb);
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);
74 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration_on) == 0) {
75 if (vibration_on == FALSE) {
76 /* disable slider bar of notification and system vibration */
77 if (ad->data_vib_volume) {
78 setting_disable_genlist_item(ad->data_vib_volume->item);
80 if (ad->data_touch_vib) {
81 setting_disable_genlist_item(ad->data_touch_vib->item);
87 void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
90 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
91 retm_if(data == NULL, "Invalid argument: data is NULL");
93 SettingProfileUG *ad = (SettingProfileUG *) data;
94 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
95 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
96 elm_genlist_item_selected_set(subitem, 0);
97 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
98 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
99 if (NULL == data_subItem || NULL == data_parentItem)
102 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
104 setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
105 data_subItem->chk_status, &err);
107 if (data_parentItem) {
108 data_parentItem->sub_desc =
109 (char *)g_strdup(_(data_subItem->keyStr));
110 elm_object_item_data_set(data_parentItem->item, data_parentItem);
111 elm_genlist_item_update(data_parentItem->item);
114 if (data_parentItem->int_slp_setting_binded ==
115 INT_SLP_SETTING_CALL_ALERT_VIB) {
116 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
117 SETTING_TRACE("ERROR device_haptic_stop_play");
119 setting_profile_play_vibration(ad,
120 setting_profile_get_call_playing_vib_by_vconf_value
121 (data_subItem->chk_status));
125 static bool __mm_player_msg_cb(int message, MMMessageParamType *param, void *user_param)
127 retv_if(user_param == NULL, FALSE);
128 SettingProfileUG *ad = (SettingProfileUG *)user_param;
131 case MM_MESSAGE_END_OF_STREAM:
132 SETTING_TRACE_DEBUG("End of Stream");
133 setting_profile_close_all_mm_players(ad);
139 Eina_Bool __volume_timer_cb(void *data)
142 retv_if(data == NULL, EINA_FALSE);
143 SettingProfileUG *ad = (SettingProfileUG *)data;
146 SETTING_TRACE_DEBUG("cur_vol_type : %d", ad->cur_vol_type);
148 switch(ad->cur_vol_type)
150 case SETTING_VOL_TYPE_RINGTONE:
151 if(ad->data_call_volume)
153 value = elm_slider_value_get(ad->data_call_volume->eo_check);
154 mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, (unsigned int)(value+0.5));
157 case SETTING_VOL_TYPE_NOTIFICATION:
158 if(ad->data_noti_volume)
160 value = elm_slider_value_get(ad->data_noti_volume->eo_check);
161 mm_sound_volume_set_value(VOLUME_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
164 case SETTING_VOL_TYPE_MEDIA:
165 if(ad->data_media_volume)
167 value = elm_slider_value_get(ad->data_media_volume->eo_check);
168 mm_sound_volume_set_value(VOLUME_TYPE_MEDIA, (unsigned int)(value+0.5));
171 case SETTING_VOL_TYPE_SYSTEM:
172 if(ad->data_touch_volume)
174 value = elm_slider_value_get(ad->data_touch_volume->eo_check);
175 mm_sound_volume_set_value(VOLUME_TYPE_SYSTEM, (unsigned int)(value+0.5));
178 case SETTING_VOL_TYPE_NOTI_VIB:
179 if(ad->data_vib_volume)
181 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
182 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
185 case SETTING_VOL_TYPE_HAPTIC_VIB:
186 if(ad->data_touch_vib)
188 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
189 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
196 return ECORE_CALLBACK_RENEW;
199 void __create_volume_timer(void *data, setting_volume_types type)
202 ret_if(data == NULL);
204 SettingProfileUG *ad = (SettingProfileUG *)data;
208 ecore_timer_del(ad->volume_timer);
209 ad->volume_timer = NULL;
210 SETTING_TRACE_DEBUG("[AA] volume timer is deleted");
212 ad->volume_timer = ecore_timer_add(SETTING_SOUND_VOLUME_TIMER_INTERVAL, (Ecore_Task_Cb)__volume_timer_cb, ad);
215 void __ringtone_start_change_cb(void *data, Evas_Object *obj, void *event_info)
217 ret_if(data == NULL);
219 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
220 SettingProfileUG *ad = list_item->userdata;
222 ad->cur_vol_type = SETTING_VOL_TYPE_RINGTONE;
223 setting_profile_close_other_mm_players_but_type(ad, VOLUME_TYPE_RINGTONE);
225 void __noti_start_change_cb(void *data, Evas_Object *obj, void *event_info)
227 ret_if(data == NULL);
229 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
230 SettingProfileUG *ad = list_item->userdata;
232 ad->cur_vol_type = SETTING_VOL_TYPE_NOTIFICATION;
233 setting_profile_close_other_mm_players_but_type(ad, VOLUME_TYPE_NOTIFICATION);
235 void __media_start_change_cb(void *data, Evas_Object *obj, void *event_info)
237 ret_if(data == NULL);
239 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
240 SettingProfileUG *ad = list_item->userdata;
242 ad->cur_vol_type = SETTING_VOL_TYPE_MEDIA;
243 setting_profile_close_other_mm_players_but_type(ad, VOLUME_TYPE_MEDIA);
245 void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info)
247 ret_if(data == NULL);
249 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
250 SettingProfileUG *ad = list_item->userdata;
252 ad->cur_vol_type = SETTING_VOL_TYPE_SYSTEM;
253 setting_profile_close_other_mm_players_but_type(ad, VOLUME_TYPE_SYSTEM);
256 void __noti_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
258 ret_if(data == NULL);
260 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
261 SettingProfileUG *ad = list_item->userdata;
263 ad->cur_vol_type = SETTING_VOL_TYPE_NOTI_VIB;
264 setting_profile_close_all_mm_players(ad);
267 void __haptic_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
270 ret_if(data == NULL);
272 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
273 SettingProfileUG *ad = list_item->userdata;
275 ad->cur_vol_type = SETTING_VOL_TYPE_HAPTIC_VIB;
276 setting_profile_close_all_mm_players(ad);
279 void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
282 ret_if(data == NULL);
284 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
285 SettingProfileUG *ad = list_item->userdata;
287 char *pa_tone_path = NULL;
288 MMHandleType **player = NULL;
290 double value = elm_slider_value_get(obj);
292 switch(ad->cur_vol_type)
294 case SETTING_VOL_TYPE_RINGTONE:
295 mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, (unsigned int)(value+0.5));
296 player = &(ad->mp_ringtone);
299 SETTING_TRACE_DEBUG("ringtone player will be created");
300 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
301 if(pa_tone_path == NULL)
303 pa_tone_path = SETTING_DEFAULT_CALL_TONE;
304 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, SETTING_DEFAULT_CALL_TONE) < 0)
307 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
310 MM_SOUND_VOLUME_TYPE_RINGTONE);
312 case SETTING_VOL_TYPE_NOTIFICATION:
313 mm_sound_volume_set_value(VOLUME_TYPE_NOTIFICATION, (unsigned int)(value+0.5));
314 player = &(ad->mp_noti);
317 SETTING_TRACE_DEBUG("noti player will be created");
318 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
319 if(pa_tone_path == NULL)
321 pa_tone_path = SETTING_DEFAULT_MSG_TONE;
322 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0)
325 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
328 MM_SOUND_VOLUME_TYPE_NOTIFICATION);
330 case SETTING_VOL_TYPE_MEDIA:
331 mm_sound_volume_set_value(VOLUME_TYPE_MEDIA, (unsigned int)(value+0.5));
332 player = &(ad->mp_media);
335 SETTING_TRACE_DEBUG("media player will be created");
336 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_MEDIA_TONE_PATH_STR);
337 if(pa_tone_path == NULL)
339 pa_tone_path = SETTING_DEFAULT_CALL_TONE;
340 if(vconf_set_str(VCONFKEY_SETAPPL_MEDIA_TONE_PATH_STR, SETTING_DEFAULT_CALL_TONE) < 0)
343 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
346 MM_SOUND_VOLUME_TYPE_MEDIA);
348 case SETTING_VOL_TYPE_SYSTEM:
349 mm_sound_volume_set_value(VOLUME_TYPE_SYSTEM, (unsigned int)(value+0.5));
350 player = &(ad->mp_sys);
353 SETTING_TRACE_DEBUG("ringtone player will be created");
354 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
355 svi_get_path(SVI_TYPE_SND, SVI_SND_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
357 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
360 MM_SOUND_VOLUME_TYPE_SYSTEM);
366 __create_volume_timer(ad, ad->cur_vol_type);
372 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
374 ret_if(data == NULL);
376 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
377 SettingProfileUG *ad = list_item->userdata;
379 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
380 SETTING_TRACE("ERROR device_haptic_stop_play");
385 switch(ad->cur_vol_type)
387 case SETTING_VOL_TYPE_NOTI_VIB:
388 if(ad->data_vib_volume)
390 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
391 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
394 case SETTING_VOL_TYPE_HAPTIC_VIB:
395 if(ad->data_touch_vib)
397 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
398 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
404 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
408 static Evas_Object *__get_main_list(void *data)
410 retv_if(data == NULL, NULL);
412 SettingProfileUG *ad = (SettingProfileUG *) data;
414 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
415 return ad->sub_view[SETTING_PROF_VIEW_VOL];
417 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
418 retvm_if(genlist == NULL, NULL,
419 "Cannot set genlist object as contento of layout");
420 elm_genlist_clear(genlist); /* first to clear list */
423 unsigned int mm_value = 0;
425 Elm_Object_Item *item = elm_genlist_item_append(genlist,
426 &(ad->itc_seperator), NULL, NULL,
427 ELM_GENLIST_ITEM_NONE, NULL, NULL);
428 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
431 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
432 vconf_value = TRUE; /* default value of sound : on */
434 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
435 setting_profile_sound_main_mouse_up_Gendial_list_cb,
436 ad, SWALLOW_Type_1TOGGLE, NULL,
438 SETTING_SOUND_TEXT_SOUND, NULL,
439 setting_profile_sound_main_Gendial_chk_cb);
440 if (ad->data_sound) {
441 ad->data_sound->userdata = ad;
443 SETTING_TRACE_ERROR("ad->data_sound is NULL");
446 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
447 vconf_value = TRUE; /* default value of vibration : on */
449 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
450 setting_profile_sound_main_mouse_up_Gendial_list_cb,
451 ad, SWALLOW_Type_1TOGGLE, NULL,
453 SETTING_SOUND_TEXT_VIBRATION, NULL,
454 setting_profile_sound_main_Gendial_chk_cb);
455 if (ad->data_vibration) {
456 ad->data_vibration->userdata = ad;
458 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
461 (void)setting_create_Gendial_field_titleItem(genlist,
462 &(ad->itc_group_item),
463 "IDS_ST_BODY_VOLUME", NULL);
466 if(mm_sound_volume_get_value(VOLUME_TYPE_RINGTONE, &mm_value) < 0)
467 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
468 ad->data_call_volume =
469 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
471 SWALLOW_Type_LAYOUT_SLIDER_WITH_TITLE,
472 IMG_SLIDER_BTN_VOLUME01,
473 IMG_SLIDER_BTN_VOLUME02, mm_value,
474 SETTING_SOUND_TEXT_INCOMING_CALL,
476 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
477 if (ad->data_call_volume) {
478 ad->data_call_volume->win_main = ad->win_main_layout;
479 ad->data_call_volume->evas = ad->evas;
480 ad->data_call_volume->slider_min = 0;
481 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
482 ad->data_call_volume->userdata = ad;
483 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
484 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
485 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
487 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
491 if(mm_sound_volume_get_value(VOLUME_TYPE_NOTIFICATION, &mm_value) < 0)
492 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
493 ad->data_noti_volume =
494 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
496 SWALLOW_Type_LAYOUT_SLIDER_WITH_TITLE,
497 IMG_SLIDER_BTN_VOLUME01,
498 IMG_SLIDER_BTN_VOLUME02, mm_value,
499 SETTING_SOUND_TEXT_NOTIFICATION,
501 setting_profile_sound_main_noti_sound_slider_value_change_cb);
502 if (ad->data_noti_volume) {
503 ad->data_noti_volume->win_main = ad->win_main_layout;
504 ad->data_noti_volume->evas = ad->evas;
505 ad->data_noti_volume->slider_min = 0;
506 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
507 ad->data_noti_volume->userdata = ad;
508 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
509 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
510 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
512 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
516 if(mm_sound_volume_get_value(VOLUME_TYPE_MEDIA, &mm_value) < 0)
517 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
518 ad->data_media_volume =
519 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
521 SWALLOW_Type_LAYOUT_SLIDER_WITH_TITLE,
522 IMG_SLIDER_BTN_VOLUME01,
523 IMG_SLIDER_BTN_VOLUME02, mm_value,
524 SETTING_SOUND_TEXT_MEDIA, NULL,
525 setting_profile_sound_main_media_sound_slider_value_change_cb);
526 if (ad->data_media_volume) {
527 ad->data_media_volume->win_main = ad->win_main_layout;
528 ad->data_media_volume->evas = ad->evas;
529 ad->data_media_volume->slider_min = 0;
530 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
531 ad->data_media_volume->userdata = ad;
532 ad->data_media_volume->start_change_cb = __media_start_change_cb;
533 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
534 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
536 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
539 /* h.system volume */
540 if(mm_sound_volume_get_value(VOLUME_TYPE_SYSTEM, &mm_value) < 0)
541 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
542 ad->data_touch_volume =
543 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
545 SWALLOW_Type_LAYOUT_SLIDER_WITH_TITLE,
546 IMG_SLIDER_BTN_VOLUME01,
547 IMG_SLIDER_BTN_VOLUME02, mm_value,
548 SETTING_SOUND_TEXT_SYSTEM, NULL,
549 settings_profile_sound_main_sys_sound_slider_value_change_cb);
550 if (ad->data_touch_volume) {
551 ad->data_touch_volume->win_main = ad->win_main_layout;
552 ad->data_touch_volume->evas = ad->evas;
553 ad->data_touch_volume->slider_min = 0;
554 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
555 ad->data_touch_volume->userdata = ad;
556 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
557 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
558 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
560 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
563 (void)setting_create_Gendial_field_titleItem(genlist,
564 &(ad->itc_group_item),
565 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
568 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) <
570 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
571 ad->data_vib_volume =
572 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
574 SWALLOW_Type_LAYOUT_SLIDER_WITH_TITLE,
575 IMG_VIBRATION_ICON_01,
576 IMG_VIBRATION_ICON_02, vconf_value,
577 SETTING_SOUND_TEXT_NOTIFICATION,
579 setting_profile_sound_main_vib_sound_slider_value_change_cb);
580 if (ad->data_vib_volume) {
581 ad->data_vib_volume->win_main = ad->win_main_layout;
582 ad->data_vib_volume->evas = ad->evas;
583 ad->data_vib_volume->slider_min = 0;
584 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
585 ad->data_vib_volume->userdata = ad;
586 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
587 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
588 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
590 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
595 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
596 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
598 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
600 SWALLOW_Type_LAYOUT_SLIDER_WITH_TITLE,
601 IMG_VIBRATION_ICON_01,
602 IMG_VIBRATION_ICON_02, vconf_value,
603 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL,
604 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
605 if (ad->data_touch_vib) {
606 ad->data_touch_vib->win_main = ad->win_main_layout;
607 ad->data_touch_vib->evas = ad->evas;
608 ad->data_touch_vib->slider_min = 0;
609 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
610 ad->data_touch_vib->userdata = ad;
611 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
612 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
613 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
615 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
618 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
620 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
621 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
623 __change_state_of_sliderbars(ad);
629 static int setting_profile_sound_main_create(void *cb)
631 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
633 SettingProfileUG *ad = (SettingProfileUG *) cb;
635 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
636 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
639 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
641 return SETTING_RETURN_FAIL;
643 ad->ctrl_bar = tabbar;
644 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
645 elm_object_style_set(tabbar, "top");
646 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
648 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
650 VOLUME_STR, __view_change_cb, ad);
652 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
654 RINGTONE_STR, __view_change_cb, ad);
656 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
658 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
659 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
660 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
662 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->ctrl_bar, "tabbar");
663 elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
665 Evas_Object *genlist = __get_main_list(ad);
667 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
668 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
669 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
671 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, _(KeyStr_Sounds), ug_back_btn, NULL, genlist, NULL);
672 elm_naviframe_item_title_visible_set(navi_it, EINA_TRUE);
675 setting_view_profile_sound_main.is_create = TRUE;
677 return SETTING_RETURN_SUCCESS;
680 static int setting_profile_sound_main_destroy(void *cb)
683 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
685 SettingProfileUG *ad = (SettingProfileUG *) cb;
687 if (ad->ly_main != NULL) {
688 evas_object_del(ad->ly_main);
689 setting_view_profile_sound_main.is_create = FALSE;
691 return SETTING_RETURN_SUCCESS;
694 static int setting_profile_sound_main_update(void *cb)
697 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
699 SettingProfileUG *ad = (SettingProfileUG *) cb;
701 if (ad->ly_main != NULL) {
702 evas_object_show(ad->ly_main);
705 return SETTING_RETURN_SUCCESS;
708 static int setting_profile_sound_main_cleanup(void *cb)
711 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
713 SettingProfileUG *ad = (SettingProfileUG *) cb;
715 if (ad->ly_main != NULL) {
716 evas_object_hide(ad->ly_main);
719 return SETTING_RETURN_SUCCESS;
722 /* ***************************************************
726 ***************************************************/
728 /* ***************************************************
732 ***************************************************/
735 setting_profile_sound_main_click_softkey_cancel_cb(void *data,
740 ret_if(data == NULL);
742 SettingProfileUG *ad = (SettingProfileUG *) data;
745 setting_profile_close_all_mm_players(ad);
746 /* close vibration */
747 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
748 SETTING_TRACE("ERROR device_haptic_stop_play");
752 /* Send destroy request */
753 ug_destroy_me(ad->ug);
761 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
765 ret_if(data == NULL);
767 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
768 SettingProfileUG *ad = list_item->userdata;
770 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
772 /* restore the selected check status */
773 list_item->chk_status = state;
774 elm_check_state_set(list_item->eo_check, state);
776 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
777 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
778 list_item->chk_status = !state;
779 elm_check_state_set(list_item->eo_check, list_item->chk_status);
782 if (list_item->chk_status) {
783 setting_enable_genlist_item(ad->data_call_volume->item);
784 setting_enable_genlist_item(ad->data_noti_volume->item);
785 setting_enable_genlist_item(ad->data_media_volume->item);
786 setting_enable_genlist_item(ad->data_touch_volume->item);
788 setting_profile_close_all_mm_players(ad);
789 setting_disable_genlist_item(ad->data_call_volume->item);
790 setting_disable_genlist_item(ad->data_noti_volume->item);
791 setting_disable_genlist_item(ad->data_media_volume->item);
792 setting_disable_genlist_item(ad->data_touch_volume->item);
794 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
795 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
796 list_item->chk_status = !state;
797 elm_check_state_set(list_item->eo_check, list_item->chk_status);
799 if (list_item->chk_status) {
800 setting_enable_genlist_item(ad->data_vib_volume->item);
801 setting_enable_genlist_item(ad->data_touch_vib->item);
803 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
804 SETTING_TRACE("ERROR device_haptic_stop_play");
806 setting_disable_genlist_item(ad->data_vib_volume->item);
807 setting_disable_genlist_item(ad->data_touch_vib->item);
813 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
818 ret_if(data == NULL);
819 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
821 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
822 elm_genlist_item_selected_set(item, 0);
823 Setting_GenGroupItem_Data *list_item =
824 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
826 SettingProfileUG *ad = data;
829 device_haptic_stop_play(ad->hnd_hpt);
831 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
833 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
834 int old_status = elm_check_state_get(list_item->eo_check);
835 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
837 list_item->chk_status = !old_status;
838 elm_check_state_set(list_item->eo_check, list_item->chk_status);
839 if (list_item->chk_status) {
840 setting_enable_genlist_item(ad->data_call_volume->item);
841 setting_enable_genlist_item(ad->data_noti_volume->item);
842 setting_enable_genlist_item(ad->data_media_volume->item);
843 setting_enable_genlist_item(ad->data_touch_volume->item);
845 setting_profile_close_all_mm_players(ad);
846 setting_disable_genlist_item(ad->data_call_volume->item);
847 setting_disable_genlist_item(ad->data_noti_volume->item);
848 setting_disable_genlist_item(ad->data_media_volume->item);
849 setting_disable_genlist_item(ad->data_touch_volume->item);
853 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
854 int old_status = elm_check_state_get(list_item->eo_check);
855 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
857 list_item->chk_status = !old_status;
858 elm_check_state_set(list_item->eo_check, list_item->chk_status);
859 if (list_item->chk_status) {
860 setting_enable_genlist_item(ad->data_vib_volume->item);
861 setting_enable_genlist_item(ad->data_touch_vib->item);
863 if (device_haptic_stop_play(ad->hnd_hpt) != 0) {
864 SETTING_TRACE("ERROR device_haptic_stop_play");
866 setting_disable_genlist_item(ad->data_vib_volume->item);
867 setting_disable_genlist_item(ad->data_touch_vib->item);
875 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
880 ret_if(data == NULL);
882 double val = elm_slider_value_get(obj);
884 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
885 SettingProfileUG *ad = list_item->userdata;
887 if(ad->mp_ringtone == NULL)
890 if(list_item->chk_status != (int)(val+0.5))
892 list_item->chk_status = (int)(val+0.5);
893 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
898 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
903 ret_if(data == NULL);
905 double val = elm_slider_value_get(obj);
907 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
908 SettingProfileUG *ad = list_item->userdata;
910 if(ad->mp_noti == NULL)
913 if(list_item->chk_status != (int)(val+0.5))
915 list_item->chk_status = val;
920 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
925 ret_if(data == NULL);
927 double val = elm_slider_value_get(obj);
929 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
930 SettingProfileUG *ad = list_item->userdata;
932 if(ad->mp_media == NULL)
934 if(list_item->chk_status != (int)(val+0.5))
936 list_item->chk_status = val;
941 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
946 ret_if(data == NULL);
948 double val = elm_slider_value_get(obj);
950 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
951 SettingProfileUG *ad = list_item->userdata;
953 if(ad->mp_sys == NULL)
956 if(list_item->chk_status != (int)(val+0.5))
958 list_item->chk_status = val;
963 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
968 ret_if(data == NULL);
970 static double priv_val_db = 5.0;
971 static int priv_val_int = 0;
972 double val = elm_slider_value_get(obj);
973 SETTING_TRACE("val = %f", val);
974 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
975 SettingProfileUG *ad = list_item->userdata;
976 list_item->chk_status = val;
981 value = (int)(val + 0.5); /* to sync displayed value on slider */
982 if (value != priv_val_int) {
983 int vib_volume = value;
984 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
985 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
986 device_haptic_stop_play(ad->hnd_hpt);
987 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, vib_volume);
990 SETTING_TRACE("Failed to play haptic monotone");
991 priv_val_int = value;
998 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1004 ret_if(data == NULL);
1006 static double priv_val_db = 3.0;
1007 static int priv_val_int = 0;
1008 double val = elm_slider_value_get(obj);
1009 SETTING_TRACE("val = %f", val);
1010 Setting_GenGroupItem_Data *list_item =
1011 (Setting_GenGroupItem_Data *) data;
1012 SettingProfileUG *ad = list_item->userdata;
1013 list_item->chk_status = val;
1018 value = (int)(val + 0.5); /* to sync displayed value on slider */
1019 if (value != priv_val_int) {
1021 int vib_volume = value; /* SETTING_VIB_VOL_MAX; */
1022 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1023 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1024 device_haptic_stop_play(ad->hnd_hpt);
1025 err = device_haptic_play_file(ad->hnd_hpt, pattern_file, 1, vib_volume);
1028 SETTING_TRACE("Failed to play haptic monotone");
1029 priv_val_int = value;