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_BODY_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 char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
29 SETTING_SOUND_TEXT_REPEAT_ONCE,
30 SETTING_SOUND_TEXT_REPEAT_2MIN,
31 SETTING_SOUND_TEXT_REPEAT_5MIN,
32 SETTING_SOUND_TEXT_REPEAT_10MIN
35 static int setting_profile_sound_main_create(void *cb);
36 static int setting_profile_sound_main_destroy(void *cb);
37 static int setting_profile_sound_main_update(void *cb);
38 static int setting_profile_sound_main_cleanup(void *cb);
40 static void setting_profile_layout_ug_cb(ui_gadget_h ug,
41 enum ug_mode mode, void *priv);
43 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
44 Evas_Object *obj, void *event_info);
46 static void setting_profile_sound_main_Gendial_chk_cb(void *data,
47 Evas_Object *obj, void *event_info);
49 static void setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
50 Evas_Object *obj, void *event_info);
52 static void setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
53 Evas_Object *obj, void *event_info);
55 static void setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
56 Evas_Object *obj, void *event_info);
58 static void setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
59 Evas_Object *obj, void *event_info);
61 static void setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
62 Evas_Object *obj, void *event_info);
64 static void setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
65 Evas_Object *obj, void *event_info);
67 static void settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
68 Evas_Object *obj, void *event_info);
71 setting_view setting_view_profile_sound_main = {
72 .create = setting_profile_sound_main_create,
73 .destroy = setting_profile_sound_main_destroy,
74 .update = setting_profile_sound_main_update,
75 .cleanup = setting_profile_sound_main_cleanup,
78 /* ***************************************************
82 ***************************************************/
83 void __change_state_of_sliderbars(void *data)
86 SettingProfileUG *ad = (SettingProfileUG *) data;
89 int vibration_on = TRUE;
91 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_on) == 0) {
92 if (sound_on == FALSE) {
93 /* disable slider bar of call ringtone, notification, media, and system volume */
94 if (ad->data_call_volume) {
95 setting_disable_genlist_item(ad->data_call_volume->item);
97 if (ad->data_noti_volume) {
98 setting_disable_genlist_item(ad->data_noti_volume->item);
100 if (ad->data_media_volume) {
101 setting_disable_genlist_item(ad->data_media_volume->item);
103 if (ad->data_touch_volume) {
104 setting_disable_genlist_item(ad->data_touch_volume->item);
110 (VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration_on) == 0) {
111 if (vibration_on == FALSE) {
112 /* disable slider bar of notification and system vibration */
113 if (ad->data_vib_volume) {
114 setting_disable_genlist_item(ad->data_vib_volume->item);
116 if (ad->data_touch_vib) {
117 setting_disable_genlist_item(ad->data_touch_vib->item);
123 void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
126 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
127 retm_if(data == NULL, "Invalid argument: data is NULL");
129 SettingProfileUG *ad = (SettingProfileUG *) data;
130 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
131 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
132 elm_genlist_item_selected_set(subitem, 0);
133 Setting_GenGroupItem_Data *data_subItem =
134 elm_object_item_data_get(subitem);
135 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
136 if (NULL == data_subItem || NULL == data_parentItem)
139 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
141 setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
142 data_subItem->chk_status, &err);
144 if (data_parentItem && data_parentItem->item) {
145 data_parentItem->sub_desc =
146 (char *)g_strdup(_(data_subItem->keyStr));
147 elm_object_item_data_set(data_parentItem->item, data_parentItem);
148 elm_genlist_item_update(data_parentItem->item);
151 if (data_parentItem->int_slp_setting_binded ==
152 INT_SLP_SETTING_CALL_ALERT_VIB) {
155 SETTING_TRACE_DEBUG("[ERROR] Can't use haptic handle.");
158 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
159 SETTING_TRACE("ERROR haptic_stop_all_effects");
162 setting_profile_play_vibration(ad,
163 setting_profile_get_call_playing_vib_by_vconf_value
164 (data_subItem->chk_status));
168 static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info)
170 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
171 retm_if(data == NULL, "Invalid argument: data is NULL");
173 SettingProfileUG *ad = (SettingProfileUG *) data;
174 Elm_Object_Item *parentItem = event_info; /* parent item */
175 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
176 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
179 if (data_parentItem == ad->data_call_alert_vib) {
180 rgd = elm_radio_add(scroller);
181 elm_radio_value_set(rgd, -1);
182 setting_create_Gendial_exp_sub_field(scroller,
183 &(ad->itc_1icon_1text_sub),
184 __sound_sub_list_sel_cb,
186 SWALLOW_Type_1RADIO, rgd,
188 "IDS_ST_BODY_VIBRATION_1",
191 setting_create_Gendial_exp_sub_field(scroller,
192 &(ad->itc_1icon_1text_sub),
193 __sound_sub_list_sel_cb,
195 SWALLOW_Type_1RADIO, rgd,
197 "IDS_ST_BODY_VIBRATION_2",
200 setting_create_Gendial_exp_sub_field(scroller,
201 &(ad->itc_1icon_1text_sub),
202 __sound_sub_list_sel_cb,
204 SWALLOW_Type_1RADIO, rgd,
206 "IDS_ST_BODY_VIBRATION_3",
209 setting_update_chk_status(rgd,
211 int_slp_setting_binded);
213 } else if (data_parentItem == ad->data_msg_alert_repeat
214 || data_parentItem == ad->data_email_alert_repeat) {
215 rgd = elm_radio_add(scroller);
216 elm_radio_value_set(rgd, -1);
217 setting_create_Gendial_exp_sub_field(scroller,
218 &(ad->itc_1icon_1text_sub),
219 __sound_sub_list_sel_cb,
221 SWALLOW_Type_1RADIO, rgd,
223 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
226 setting_create_Gendial_exp_sub_field(scroller,
227 &(ad->itc_1icon_1text_sub),
228 __sound_sub_list_sel_cb,
230 SWALLOW_Type_1RADIO, rgd,
232 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
235 setting_create_Gendial_exp_sub_field(scroller,
236 &(ad->itc_1icon_1text_sub),
237 __sound_sub_list_sel_cb,
239 SWALLOW_Type_1RADIO, rgd,
241 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
243 setting_create_Gendial_exp_sub_field(scroller,
244 &(ad->itc_1icon_1text_sub),
245 __sound_sub_list_sel_cb,
247 SWALLOW_Type_1RADIO, rgd,
249 _(SETTING_SOUND_TEXT_REPEAT_10MIN),
252 setting_update_chk_status(rgd,
253 data_parentItem->int_slp_setting_binded);
257 static void __mm_player_msg_cb(void *user_param)
259 ret_if(user_param == NULL);
260 SettingProfileUG *ad = (SettingProfileUG *)user_param;
263 case MM_MESSAGE_END_OF_STREAM:
264 SETTING_TRACE_DEBUG("End of Stream");
265 setting_profile_close_all_mm_players(ad);
270 SETTING_TRACE("completed_cb is called.");
271 setting_profile_close_all_mm_players(ad);
274 void __ringtone_start_change_cb(void *data, Evas_Object *obj, void *event_info)
276 ret_if(data == NULL);
278 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
279 SettingProfileUG *ad = list_item->userdata;
281 ad->cur_vol_type = SETTING_VOL_TYPE_RINGTONE;
282 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
284 void __noti_start_change_cb(void *data, Evas_Object *obj, void *event_info)
286 ret_if(data == NULL);
288 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
289 SettingProfileUG *ad = list_item->userdata;
291 ad->cur_vol_type = SETTING_VOL_TYPE_NOTIFICATION;
292 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_NOTIFICATION);
294 void __media_start_change_cb(void *data, Evas_Object *obj, void *event_info)
296 ret_if(data == NULL);
298 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
299 SettingProfileUG *ad = list_item->userdata;
301 ad->cur_vol_type = SETTING_VOL_TYPE_MEDIA;
302 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_MEDIA);
304 void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info)
306 ret_if(data == NULL);
308 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
309 SettingProfileUG *ad = list_item->userdata;
311 ad->cur_vol_type = SETTING_VOL_TYPE_SYSTEM;
312 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_SYSTEM);
315 void __noti_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
317 ret_if(data == NULL);
319 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
320 SettingProfileUG *ad = list_item->userdata;
322 ad->cur_vol_type = SETTING_VOL_TYPE_NOTI_VIB;
323 setting_profile_close_all_mm_players(ad);
326 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
327 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, MAX_COMMON_BUFFER_LEN);
328 haptic_stop_all_effects(ad->hnd_hpt);
329 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
331 SETTING_TRACE("Failed to play haptic monotone");
334 void __haptic_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
337 ret_if(data == NULL);
339 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
340 SettingProfileUG *ad = list_item->userdata;
342 ad->cur_vol_type = SETTING_VOL_TYPE_HAPTIC_VIB;
343 setting_profile_close_all_mm_players(ad);
346 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
347 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, MAX_COMMON_BUFFER_LEN);
348 haptic_stop_all_effects(ad->hnd_hpt);
349 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
352 SETTING_TRACE("Failed to play haptic monotone");
355 void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
358 ret_if(data == NULL);
360 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
361 SettingProfileUG *ad = list_item->userdata;
363 char *pa_tone_path = NULL;
364 player_h **player = NULL;
366 double value = elm_slider_value_get(obj);
367 list_item->chk_status = (unsigned int)(value+0.5);
369 switch(ad->cur_vol_type)
371 case SETTING_VOL_TYPE_RINGTONE:
372 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
373 player = &(ad->mp_ringtone);
376 SETTING_TRACE_DEBUG("ringtone player will be created");
377 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
378 if(pa_tone_path == NULL)
380 pa_tone_path = SETTING_DEFAULT_CALL_TONE;
382 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0)
385 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
388 SOUND_TYPE_RINGTONE);
390 case SETTING_VOL_TYPE_NOTIFICATION:
391 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
392 player = &(ad->mp_noti);
395 SETTING_TRACE_DEBUG("noti player will be created");
396 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
397 if(pa_tone_path == NULL)
399 pa_tone_path = SETTING_DEFAULT_MSG_TONE;
400 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0)
403 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
406 SOUND_TYPE_NOTIFICATION);
408 case SETTING_VOL_TYPE_MEDIA:
409 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
410 player = &(ad->mp_media);
413 SETTING_TRACE_DEBUG("media player will be created");
414 pa_tone_path = (char*)strdup(SETTING_DEFAULT_MEDIA_TONE);
416 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
421 case SETTING_VOL_TYPE_SYSTEM:
422 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
423 player = &(ad->mp_sys);
426 SETTING_TRACE_DEBUG("ringtone player will be created");
427 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
428 svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
430 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
444 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
446 ret_if(data == NULL);
448 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
449 SettingProfileUG *ad = list_item->userdata;
451 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
452 SETTING_TRACE("ERROR haptic_stop_all_effects");
457 switch(ad->cur_vol_type)
459 case SETTING_VOL_TYPE_NOTI_VIB:
460 if(ad->data_vib_volume)
462 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
463 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
465 elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
467 elm_slider_value_set(ad->data_vib_volume->eo_check, (unsigned int)(value+0.5));
470 case SETTING_VOL_TYPE_HAPTIC_VIB:
471 if(ad->data_touch_vib)
473 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
474 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
475 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, (unsigned int)(value+0.5));
477 elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
479 elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
485 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
489 static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
492 ret_if(data == NULL);
494 SettingProfileUG *ad = (SettingProfileUG *) data;
496 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
497 Setting_GenGroupItem_Data *list_item =
498 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
500 /* backup each slider's value */
501 if(list_item == ad->data_call_volume)
502 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
503 else if(list_item == ad->data_noti_volume)
504 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
505 else if(list_item == ad->data_media_volume)
506 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
507 else if(list_item == ad->data_touch_volume)
508 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
509 else if(list_item == ad->data_vib_volume)
510 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status);
511 else if(list_item == ad->data_touch_vib)
512 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status);
515 static Evas_Object *__get_main_list(void *data)
517 retv_if(data == NULL, NULL);
519 SettingProfileUG *ad = (SettingProfileUG *) data;
521 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
522 return ad->sub_view[SETTING_PROF_VIEW_VOL];
524 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
525 elm_object_style_set(genlist, "dialogue");
526 retvm_if(genlist == NULL, NULL,
527 "Cannot set genlist object as contento of layout");
528 elm_genlist_clear(genlist); /* first to clear list */
533 Elm_Object_Item *item = elm_genlist_item_append(genlist,
534 &(ad->itc_seperator), NULL, NULL,
535 ELM_GENLIST_ITEM_NONE, NULL, NULL);
536 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
539 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
540 vconf_value = TRUE; /* default value of sound : on */
542 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
543 setting_profile_sound_main_mouse_up_Gendial_list_cb,
544 ad, SWALLOW_Type_1TOGGLE, NULL,
546 SETTING_SOUND_TEXT_SOUND, NULL,
547 setting_profile_sound_main_Gendial_chk_cb);
548 if (ad->data_sound) {
549 ad->data_sound->userdata = ad;
551 SETTING_TRACE_ERROR("ad->data_sound is NULL");
554 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
555 vconf_value = TRUE; /* default value of vibration : on */
557 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
558 setting_profile_sound_main_mouse_up_Gendial_list_cb,
559 ad, SWALLOW_Type_1TOGGLE, NULL,
561 SETTING_SOUND_TEXT_VIBRATION, NULL,
562 setting_profile_sound_main_Gendial_chk_cb);
563 if (ad->data_vibration) {
564 ad->data_vibration->userdata = ad;
566 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
569 (void)setting_create_Gendial_field_titleItem(genlist,
570 &(ad->itc_group_item),
571 "IDS_ST_BODY_VOLUME", NULL);
574 if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
575 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
576 ad->data_call_volume =
577 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
579 SWALLOW_Type_LAYOUT_SLIDER,
580 IMG_SLIDER_BTN_VOLUME01,
581 IMG_SLIDER_BTN_VOLUME02, mm_value,
582 SETTING_SOUND_TEXT_INCOMING_CALL,
584 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
585 if (ad->data_call_volume) {
586 ad->data_call_volume->win_main = ad->win_main_layout;
587 ad->data_call_volume->evas = ad->evas;
588 ad->data_call_volume->isIndicatorVisible = true;
589 ad->data_call_volume->slider_min = 0;
590 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
591 ad->data_call_volume->userdata = ad;
592 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
593 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
594 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
596 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
600 if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
601 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
603 (void)setting_create_Gendial_field_titleItem(genlist,
605 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
606 ad->data_noti_volume =
607 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
609 SWALLOW_Type_LAYOUT_SLIDER,
610 IMG_SLIDER_BTN_VOLUME01,
611 IMG_SLIDER_BTN_VOLUME02, mm_value,
612 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
614 setting_profile_sound_main_noti_sound_slider_value_change_cb);
615 if (ad->data_noti_volume) {
616 ad->data_noti_volume->win_main = ad->win_main_layout;
617 ad->data_noti_volume->evas = ad->evas;
618 ad->data_noti_volume->isIndicatorVisible = true;
619 ad->data_noti_volume->slider_min = 0;
620 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
621 ad->data_noti_volume->userdata = ad;
622 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
623 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
624 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
626 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
630 if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
631 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
633 (void)setting_create_Gendial_field_titleItem(genlist,
635 SETTING_SOUND_TEXT_MEDIA, NULL);
636 ad->data_media_volume =
637 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
639 SWALLOW_Type_LAYOUT_SLIDER,
640 IMG_SLIDER_BTN_VOLUME01,
641 IMG_SLIDER_BTN_VOLUME02, mm_value,
643 setting_profile_sound_main_media_sound_slider_value_change_cb);
644 if (ad->data_media_volume) {
645 ad->data_media_volume->win_main = ad->win_main_layout;
646 ad->data_media_volume->evas = ad->evas;
647 ad->data_media_volume->isIndicatorVisible = true;
648 ad->data_media_volume->slider_min = 0;
649 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
650 ad->data_media_volume->userdata = ad;
651 ad->data_media_volume->start_change_cb = __media_start_change_cb;
652 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
653 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
655 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
658 /* h.system volume */
659 if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
661 SETTING_TRACE_DEBUG("Fail to get volume");
662 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
664 (void)setting_create_Gendial_field_titleItem(genlist,
666 SETTING_SOUND_TEXT_SYSTEM, NULL);
667 ad->data_touch_volume =
668 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
670 SWALLOW_Type_LAYOUT_SLIDER,
671 IMG_SLIDER_BTN_VOLUME01,
672 IMG_SLIDER_BTN_VOLUME02, mm_value,
674 settings_profile_sound_main_sys_sound_slider_value_change_cb);
675 if (ad->data_touch_volume) {
676 ad->data_touch_volume->win_main = ad->win_main_layout;
677 ad->data_touch_volume->evas = ad->evas;
678 ad->data_touch_volume->isIndicatorVisible = true;
679 ad->data_touch_volume->slider_min = 0;
680 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
681 ad->data_touch_volume->userdata = ad;
682 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
683 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
684 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
686 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
689 (void)setting_create_Gendial_field_titleItem(genlist,
690 &(ad->itc_group_item),
691 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
694 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0)
695 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
697 (void)setting_create_Gendial_field_titleItem(genlist,
699 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
700 ad->data_vib_volume =
701 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
703 SWALLOW_Type_LAYOUT_SLIDER,
704 IMG_VIBRATION_ICON_01,
705 IMG_VIBRATION_ICON_02, vconf_value,
706 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
708 setting_profile_sound_main_vib_sound_slider_value_change_cb);
709 if (ad->data_vib_volume) {
710 ad->data_vib_volume->win_main = ad->win_main_layout;
711 ad->data_vib_volume->evas = ad->evas;
712 ad->data_vib_volume->isIndicatorVisible = true;
713 ad->data_vib_volume->slider_min = 0;
714 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
715 ad->data_vib_volume->userdata = ad;
716 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
717 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
718 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
720 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
725 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
726 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
728 (void)setting_create_Gendial_field_titleItem(genlist,
730 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL);
732 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
734 SWALLOW_Type_LAYOUT_SLIDER,
735 IMG_VIBRATION_ICON_01,
736 IMG_VIBRATION_ICON_02, vconf_value,
738 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
739 if (ad->data_touch_vib) {
740 ad->data_touch_vib->win_main = ad->win_main_layout;
741 ad->data_touch_vib->evas = ad->evas;
742 ad->data_touch_vib->isIndicatorVisible = true;
743 ad->data_touch_vib->slider_min = 0;
744 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
745 ad->data_touch_vib->userdata = ad;
746 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
747 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
748 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
750 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
753 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
755 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
756 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
757 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
758 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
761 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
762 vconf_value = TRUE; /* default value of touch sounds : on */
764 ad->data_touch_sounds =
765 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
766 setting_profile_sound_main_mouse_up_Gendial_list_cb,
767 ad, SWALLOW_Type_1TOGGLE, NULL,
769 "IDS_ST_BODY_TOUCH_SOUNDS",
771 setting_profile_sound_main_Gendial_chk_cb);
772 if (ad->data_touch_sounds) {
773 ad->data_touch_sounds->userdata = ad;
775 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
778 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
780 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
781 NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
782 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
783 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
785 __change_state_of_sliderbars(ad);
787 evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
789 ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
791 return ad->sub_view[SETTING_PROF_VIEW_VOL];
794 static Evas_Object *__get_ringtone_list(void *data)
796 retv_if(data == NULL, NULL);
797 SettingProfileUG *ad = (SettingProfileUG *) data;
799 if(ad->sub_view[SETTING_PROF_VIEW_RTN])
800 return ad->sub_view[SETTING_PROF_VIEW_RTN];
802 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
803 elm_object_style_set(genlist, "dialogue");
804 retvm_if(genlist == NULL, NULL,
805 "Cannot set genlist object as contento of layout");
806 elm_genlist_clear(genlist); /* first to clear list */
807 setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
809 /* a. incoming call group */
810 (void)setting_create_Gendial_field_titleItem(genlist,
811 &(ad->itc_group_item),
812 SETTING_SOUND_TEXT_INCOMING_CALL,
817 char *sub_desc = NULL;
818 char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
819 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
821 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
822 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
824 SETTING_TRACE_DEBUG("failed to set vconf");
826 sub_desc = setting_file_basename(pa_ringtone);
828 ad->data_call_alert_tone =
829 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
830 setting_profile_sound_main_mouse_up_Gendial_list_cb,
831 ad, SWALLOW_Type_INVALID, NULL,
832 NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
834 if (ad->data_call_alert_tone) {
835 ad->data_call_alert_tone->userdata = ad;
837 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
843 /* b. notification */
844 (void)setting_create_Gendial_field_titleItem(genlist,
845 &(ad->itc_group_item),
846 SETTING_SOUND_TEXT_NOTIFICATION,
849 int repeat_value = 0;
851 /* b-1. msg ringtone */
852 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
853 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
855 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
856 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
858 SETTING_TRACE_DEBUG("failed to set vconf");
860 sub_desc = setting_file_basename(pa_ringtone);
862 ad->data_msg_alert_tone =
863 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
864 setting_profile_sound_main_mouse_up_Gendial_list_cb,
865 ad, SWALLOW_Type_INVALID, NULL,
867 SETTING_SOUND_TEXT_MSG_ALERT,
869 if (ad->data_msg_alert_tone) {
870 ad->data_msg_alert_tone->userdata = ad;
872 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
877 /* b-2. msg alert repetition */
879 (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
880 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
881 ad->data_msg_alert_repeat =
882 setting_create_Gendial_exp_parent_field(genlist,
883 &(ad->itc_2text_3_parent),
884 setting_profile_sound_main_mouse_up_Gendial_list_cb,
885 ad, SWALLOW_Type_INVALID,
886 SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
887 _(repeat_type[repeat_value]));
888 if (ad->data_msg_alert_repeat) {
889 ad->data_msg_alert_repeat->int_slp_setting_binded =
890 INT_SLP_SETTING_MSG_ALERT_REPEAT;
892 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
895 /* b-3. email ringtone */
896 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
897 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
899 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
900 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
902 SETTING_TRACE_DEBUG("failed to set vconf");
904 sub_desc = setting_file_basename(pa_ringtone);
906 ad->data_email_alert_tone =
907 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
908 setting_profile_sound_main_mouse_up_Gendial_list_cb,
909 ad, SWALLOW_Type_INVALID, NULL,
911 SETTING_SOUND_TEXT_EMAIL_ALERT,
913 if (ad->data_email_alert_tone) {
914 ad->data_email_alert_tone->userdata = ad;
916 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
921 /* b-4. email alert repetition */
923 (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
925 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
926 ad->data_email_alert_repeat =
927 setting_create_Gendial_exp_parent_field(genlist,
928 &(ad->itc_2text_3_parent),
929 setting_profile_sound_main_mouse_up_Gendial_list_cb,
930 ad, SWALLOW_Type_INVALID,
931 SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
932 _(repeat_type[repeat_value]));
933 if (ad->data_email_alert_repeat) {
934 ad->data_email_alert_repeat->int_slp_setting_binded =
935 INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
937 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
940 Elm_Object_Item *item = NULL;
941 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
942 ELM_GENLIST_ITEM_NONE, NULL, NULL);
943 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
945 ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
947 return ad->sub_view[SETTING_PROF_VIEW_RTN];
950 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
952 //appcore_measure_start();
953 retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
954 retm_if(data == NULL, "Invalid argmuent: data is NULL");
956 SettingProfileUG *ad = (SettingProfileUG *) data;
958 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
959 SETTING_TRACE("ERROR haptic_stop_all_effects");
962 setting_profile_close_all_mm_players(ad);
964 Evas_Object *sub_view = NULL;
965 Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
966 const char *tab_lable = elm_object_item_text_get(sel_item);
968 //SETTING_TRACE("tab_lable:%s", tab_lable);
969 if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
971 haptic_stop_all_effects(ad->hnd_hpt);
972 sub_view = __get_main_list(ad);
973 } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
974 sub_view = __get_ringtone_list(ad);
977 Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
978 ret_if(old_sub_view == sub_view);
983 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
984 evas_object_hide(old_sub_view);
986 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
987 evas_object_show(sub_view);
991 static int setting_profile_sound_main_create(void *cb)
993 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
995 SettingProfileUG *ad = (SettingProfileUG *) cb;
997 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
998 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1001 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1002 elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
1003 evas_object_show(view_layout);
1004 ad->view_layout = view_layout;
1006 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1008 return SETTING_RETURN_FAIL;
1010 elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1011 ad->ctrl_bar = tabbar;
1012 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1013 elm_object_style_set(tabbar, "tabbar");
1014 elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
1016 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1017 IMG_CTRL_ICON_VOLUME,
1018 VOLUME_STR, __view_change_cb, ad);
1020 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1021 IMG_CTRL_ICON_RINGTONE,
1022 RINGTONE_STR, __view_change_cb, ad);
1024 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1025 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1027 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1028 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1029 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1031 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
1032 elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1034 setting_view_profile_sound_main.is_create = TRUE;
1036 return SETTING_RETURN_SUCCESS;
1039 static int setting_profile_sound_main_destroy(void *cb)
1042 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1044 SettingProfileUG *ad = (SettingProfileUG *) cb;
1046 if (ad->ly_main != NULL) {
1047 //Fix the memory leak,
1048 //Manage ad->sub_view[] separately, unset first, then delete in together
1049 if (ad->view_layout)
1051 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1053 int i = SETTING_PROF_VIEW_VOL;
1054 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1056 evas_object_del(ad->sub_view[i]);
1059 evas_object_del(ad->ly_main);
1060 setting_view_profile_sound_main.is_create = FALSE;
1062 return SETTING_RETURN_SUCCESS;
1065 static int setting_profile_sound_main_update(void *cb)
1068 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1070 SettingProfileUG *ad = (SettingProfileUG *) cb;
1072 if (ad->ly_main != NULL) {
1073 evas_object_show(ad->ly_main);
1076 return SETTING_RETURN_SUCCESS;
1079 static int setting_profile_sound_main_cleanup(void *cb)
1082 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1084 SettingProfileUG *ad = (SettingProfileUG *) cb;
1086 if (ad->ly_main != NULL) {
1087 evas_object_hide(ad->ly_main);
1090 return SETTING_RETURN_SUCCESS;
1093 /* ***************************************************
1097 ***************************************************/
1099 /* ***************************************************
1103 ***************************************************/
1105 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1110 ret_if(data == NULL);
1112 SettingProfileUG *ad = (SettingProfileUG *) data;
1114 /* close mm plaer */
1115 setting_profile_close_all_mm_players(ad);
1116 /* close vibration */
1117 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1118 SETTING_TRACE("ERROR haptic_stop_all_effects");
1122 /* Send destroy request */
1123 ug_destroy_me(ad->ug);
1128 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1130 ret_if(priv == NULL);
1131 SettingProfileUG *ad = (SettingProfileUG *) priv;
1135 ad->ug_loading = NULL;
1140 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1141 service_h result, void *priv)
1143 ret_if(priv == NULL);
1145 SettingProfileUG *ad = (SettingProfileUG *) priv;
1146 char *ringtone_file = NULL;
1147 char *ringtone_path = NULL;
1149 service_get_extra_data(result, "result", &ringtone_path);
1153 SETTING_TRACE("ringtone_path:%s", ringtone_path);
1155 if (ringtone_path != NULL) {
1156 ringtone_file = setting_file_basename(ringtone_path);
1157 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1159 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1161 (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1162 if (ad->data_call_alert_tone) {
1163 ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1165 elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1166 elm_genlist_item_update(ad->data_call_alert_tone->item);
1170 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1172 (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1173 if (ad->data_msg_alert_tone) {
1174 ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1176 elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1177 elm_genlist_item_update(ad->data_msg_alert_tone->item);
1181 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1183 (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1184 if (ad->data_email_alert_tone) {
1185 ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1187 elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1188 elm_genlist_item_update(ad->data_email_alert_tone->item);
1194 G_FREE(ringtone_file);
1199 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1202 ret_if(priv == NULL);
1204 SettingProfileUG *ad = (SettingProfileUG *) priv;
1207 base = (Evas_Object *) ug_get_layout(ug);
1212 case UG_MODE_FULLVIEW:
1213 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1214 elm_win_resize_object_add(ad->win_get, base);
1215 evas_object_show(base);
1223 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1229 SETTING_TRACE("Myfiles ug is already loaded.");
1233 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1237 cbs->layout_cb = setting_profile_layout_ug_cb;
1238 cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1239 cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1240 cbs->priv = (void *)ad;
1243 if (service_create(&svc)) {
1248 const char *pa_cur_ringtone = NULL;
1249 const char *dir_path = NULL;
1250 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1251 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1252 if (pa_cur_ringtone == NULL)
1254 pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1256 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1257 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1258 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1259 if (pa_cur_ringtone == NULL)
1260 pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1261 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1262 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1263 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1264 if (pa_cur_ringtone == NULL)
1265 pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1266 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1268 SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1269 SETTING_TRACE("dir_path:\t%s", dir_path);
1271 service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1272 service_add_extra_data(svc, "path", dir_path);
1273 service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1274 service_add_extra_data(svc, "file_type", "SOUND");
1275 service_add_extra_data(svc, "drm_type", "DRM_ALL");
1277 SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1278 ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1279 if (NULL == ad->ug_loading) { /* error handling */
1280 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1283 service_destroy(svc);
1286 /** @todo verify it's valid */
1288 FREE(pa_cur_ringtone);
1294 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1298 ret_if(data == NULL);
1300 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1301 SettingProfileUG *ad = list_item->userdata;
1303 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1305 /* restore the selected check status */
1306 list_item->chk_status = state;
1307 elm_check_state_set(list_item->eo_check, state);
1309 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1310 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1311 list_item->chk_status = !state;
1312 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1315 if (list_item->chk_status) {
1316 setting_enable_genlist_item(ad->data_call_volume->item);
1317 setting_enable_genlist_item(ad->data_noti_volume->item);
1318 setting_enable_genlist_item(ad->data_media_volume->item);
1319 setting_enable_genlist_item(ad->data_touch_volume->item);
1321 setting_profile_close_all_mm_players(ad);
1322 setting_disable_genlist_item(ad->data_call_volume->item);
1323 setting_disable_genlist_item(ad->data_noti_volume->item);
1324 setting_disable_genlist_item(ad->data_media_volume->item);
1325 setting_disable_genlist_item(ad->data_touch_volume->item);
1327 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1328 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1329 list_item->chk_status = !state;
1330 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1332 if (list_item->chk_status) {
1333 setting_enable_genlist_item(ad->data_vib_volume->item);
1334 setting_enable_genlist_item(ad->data_touch_vib->item);
1336 /* Play vib if vib turns on */
1338 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1339 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1340 haptic_stop_all_effects(ad->hnd_hpt);
1341 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5) * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1344 SETTING_TRACE("Failed to play haptic monotone");
1346 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1347 SETTING_TRACE("ERROR haptic_stop_all_effects");
1349 setting_disable_genlist_item(ad->data_vib_volume->item);
1350 setting_disable_genlist_item(ad->data_touch_vib->item);
1353 /* additional items */
1354 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1355 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1356 list_item->chk_status = !state;
1357 elm_check_state_set(list_item->eo_check, !state);
1360 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1361 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1362 list_item->chk_status = !state;
1363 elm_check_state_set(list_item->eo_check, !state);
1372 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1377 ret_if(data == NULL);
1378 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1380 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1381 elm_genlist_item_selected_set(item, 0);
1382 Setting_GenGroupItem_Data *list_item =
1383 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1385 SettingProfileUG *ad = data;
1388 haptic_stop_all_effects(ad->hnd_hpt);
1390 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1391 if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1392 || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1393 || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1394 ad->ringtone_type = list_item->keyStr;
1395 setting_profile_sound_main_create_myfile_ug(ad);
1396 } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1397 int old_status = elm_check_state_get(list_item->eo_check);
1398 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1400 list_item->chk_status = !old_status;
1401 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1402 if (list_item->chk_status) {
1403 setting_enable_genlist_item(ad->data_call_volume->item);
1404 setting_enable_genlist_item(ad->data_noti_volume->item);
1405 setting_enable_genlist_item(ad->data_media_volume->item);
1406 setting_enable_genlist_item(ad->data_touch_volume->item);
1408 setting_profile_close_all_mm_players(ad);
1409 setting_disable_genlist_item(ad->data_call_volume->item);
1410 setting_disable_genlist_item(ad->data_noti_volume->item);
1411 setting_disable_genlist_item(ad->data_media_volume->item);
1412 setting_disable_genlist_item(ad->data_touch_volume->item);
1416 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1417 int old_status = elm_check_state_get(list_item->eo_check);
1418 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_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_vib_volume->item);
1424 setting_enable_genlist_item(ad->data_touch_vib->item);
1426 /* Play vib if vib turns on */
1428 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1429 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1430 haptic_stop_all_effects(ad->hnd_hpt);
1431 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, (int)(elm_slider_value_get(ad->data_vib_volume->eo_check)+0.5) * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1434 SETTING_TRACE("Failed to play haptic monotone");
1436 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1437 SETTING_TRACE("ERROR haptic_stop_all_effects");
1439 setting_disable_genlist_item(ad->data_vib_volume->item);
1440 setting_disable_genlist_item(ad->data_touch_vib->item);
1445 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1446 int old_status = elm_check_state_get(list_item->eo_check);
1447 /* To do : set vconfkey for touch sounds */
1448 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1450 list_item->chk_status = !old_status;
1451 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1455 else if (ad->data_msg_alert_repeat == list_item
1456 || ad->data_email_alert_repeat == list_item) {
1457 bool status = !elm_genlist_item_expanded_get(item);
1458 elm_genlist_item_expanded_set(item, status);
1463 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1468 ret_if(data == NULL);
1470 double val = elm_slider_value_get(obj);
1472 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1473 SettingProfileUG *ad = list_item->userdata;
1475 if(ad->mp_ringtone == NULL)
1478 if(list_item->chk_status != (int)(val+0.5))
1480 list_item->chk_status = (int)(val+0.5);
1481 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
1482 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1487 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1492 ret_if(data == NULL);
1494 double val = elm_slider_value_get(obj);
1496 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1497 SettingProfileUG *ad = list_item->userdata;
1499 if(ad->mp_noti == NULL)
1502 if(list_item->chk_status != (int)(val+0.5))
1504 list_item->chk_status = val;
1505 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
1506 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1511 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1516 ret_if(data == NULL);
1518 double val = elm_slider_value_get(obj);
1520 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1521 SettingProfileUG *ad = list_item->userdata;
1523 if(ad->mp_media == NULL)
1525 if(list_item->chk_status != (int)(val+0.5))
1527 list_item->chk_status = val;
1528 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
1529 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1534 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1539 ret_if(data == NULL);
1541 double val = elm_slider_value_get(obj);
1543 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1544 SettingProfileUG *ad = list_item->userdata;
1546 if(ad->mp_sys == NULL)
1549 if(list_item->chk_status != (int)(val+0.5))
1551 list_item->chk_status = val;
1552 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
1553 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1558 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1563 ret_if(data == NULL);
1565 static double priv_val_db = 5.0;
1566 static int priv_val_int = 0;
1567 double val = elm_slider_value_get(obj);
1568 SETTING_TRACE("val = %f", val);
1569 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1570 SettingProfileUG *ad = list_item->userdata;
1575 value = (int)(val + 0.5); /* to sync displayed value on slider */
1576 list_item->chk_status = value;
1577 if (value != priv_val_int) {
1578 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status);
1579 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1580 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1581 haptic_stop_all_effects(ad->hnd_hpt);
1582 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1585 SETTING_TRACE("Failed to play haptic monotone");
1586 priv_val_int = value;
1593 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1599 ret_if(data == NULL);
1601 static double priv_val_db = 3.0;
1602 static int priv_val_int = 0;
1603 double val = elm_slider_value_get(obj);
1604 SETTING_TRACE("val = %f", val);
1605 Setting_GenGroupItem_Data *list_item =
1606 (Setting_GenGroupItem_Data *) data;
1607 SettingProfileUG *ad = list_item->userdata;
1612 value = (int)(val + 0.5); /* to sync displayed value on slider */
1613 list_item->chk_status = value;
1614 if (value != priv_val_int) {
1615 vconf_set_int (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status);
1616 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1617 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1618 haptic_stop_all_effects(ad->hnd_hpt);
1619 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1622 SETTING_TRACE("Failed to play haptic monotone");
1623 priv_val_int = value;