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>
22 #include <setting-profile.h>
24 #define VOLUME_STR _("IDS_ST_BODY_VOLUME")
25 #define RINGTONE_STR _("IDS_COM_BODY_RINGTONES")
27 #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG"
29 char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
30 SETTING_SOUND_TEXT_REPEAT_ONCE,
31 SETTING_SOUND_TEXT_REPEAT_2MIN,
32 SETTING_SOUND_TEXT_REPEAT_5MIN,
33 SETTING_SOUND_TEXT_REPEAT_10MIN
36 static int setting_profile_sound_main_create(void *cb);
37 static int setting_profile_sound_main_destroy(void *cb);
38 static int setting_profile_sound_main_update(void *cb);
39 static int setting_profile_sound_main_cleanup(void *cb);
41 static void setting_profile_layout_ug_cb(ui_gadget_h ug,
42 enum ug_mode mode, void *priv);
44 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
45 Evas_Object *obj, void *event_info);
47 static void setting_profile_sound_main_Gendial_chk_cb(void *data,
48 Evas_Object *obj, void *event_info);
50 static void setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
51 Evas_Object *obj, void *event_info);
53 static void setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
54 Evas_Object *obj, void *event_info);
56 static void setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
57 Evas_Object *obj, void *event_info);
59 static void setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
60 Evas_Object *obj, void *event_info);
62 static void setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
63 Evas_Object *obj, void *event_info);
65 static void setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
66 Evas_Object *obj, void *event_info);
68 static void settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
69 Evas_Object *obj, void *event_info);
72 setting_view setting_view_profile_sound_main = {
73 .create = setting_profile_sound_main_create,
74 .destroy = setting_profile_sound_main_destroy,
75 .update = setting_profile_sound_main_update,
76 .cleanup = setting_profile_sound_main_cleanup,
79 /* ***************************************************
83 ***************************************************/
84 void __change_state_of_sliderbars(void *data)
87 SettingProfileUG *ad = (SettingProfileUG *) data;
90 int vibration_on = TRUE;
92 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_on) == 0) {
93 if (sound_on == FALSE) {
94 /* disable slider bar of call ringtone, notification, media, and system volume */
95 if (ad->data_call_volume) {
96 setting_disable_genlist_item(ad->data_call_volume->item);
98 if (ad->data_noti_volume) {
99 setting_disable_genlist_item(ad->data_noti_volume->item);
101 if (ad->data_media_volume) {
102 setting_disable_genlist_item(ad->data_media_volume->item);
104 if (ad->data_touch_volume) {
105 setting_disable_genlist_item(ad->data_touch_volume->item);
111 (VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration_on) == 0) {
112 if (vibration_on == FALSE) {
113 /* disable slider bar of notification and system vibration */
114 if (ad->data_vib_volume) {
115 setting_disable_genlist_item(ad->data_vib_volume->item);
117 if (ad->data_touch_vib) {
118 setting_disable_genlist_item(ad->data_touch_vib->item);
124 void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
127 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
128 retm_if(data == NULL, "Invalid argument: data is NULL");
130 SettingProfileUG *ad = (SettingProfileUG *) data;
131 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
132 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
133 elm_genlist_item_selected_set(subitem, 0);
134 Setting_GenGroupItem_Data *data_subItem =
135 elm_object_item_data_get(subitem);
136 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
137 if (NULL == data_subItem || NULL == data_parentItem)
140 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
142 setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
143 data_subItem->chk_status, &err);
145 if (data_parentItem && data_parentItem->item) {
146 data_parentItem->sub_desc =
147 (char *)g_strdup(_(data_subItem->keyStr));
148 elm_object_item_data_set(data_parentItem->item, data_parentItem);
149 elm_genlist_item_update(data_parentItem->item);
152 if (data_parentItem->int_slp_setting_binded ==
153 INT_SLP_SETTING_CALL_ALERT_VIB) {
156 SETTING_TRACE_DEBUG("[ERROR] Can't use haptic handle.");
159 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
160 SETTING_TRACE("ERROR haptic_stop_all_effects");
163 setting_profile_play_vibration(ad,
164 setting_profile_get_call_playing_vib_by_vconf_value
165 (data_subItem->chk_status));
169 static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info)
171 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
172 retm_if(data == NULL, "Invalid argument: data is NULL");
174 SettingProfileUG *ad = (SettingProfileUG *) data;
175 Elm_Object_Item *parentItem = event_info; /* parent item */
176 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
177 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
180 if (data_parentItem == ad->data_call_alert_vib) {
181 rgd = elm_radio_add(scroller);
182 elm_radio_value_set(rgd, -1);
183 setting_create_Gendial_exp_sub_field(scroller,
184 &(ad->itc_1icon_1text_sub),
185 __sound_sub_list_sel_cb,
187 SWALLOW_Type_1RADIO, rgd,
189 "IDS_ST_BODY_VIBRATION_1",
192 setting_create_Gendial_exp_sub_field(scroller,
193 &(ad->itc_1icon_1text_sub),
194 __sound_sub_list_sel_cb,
196 SWALLOW_Type_1RADIO, rgd,
198 "IDS_ST_BODY_VIBRATION_2",
201 setting_create_Gendial_exp_sub_field(scroller,
202 &(ad->itc_1icon_1text_sub),
203 __sound_sub_list_sel_cb,
205 SWALLOW_Type_1RADIO, rgd,
207 "IDS_ST_BODY_VIBRATION_3",
210 setting_update_chk_status(rgd,
212 int_slp_setting_binded);
214 } else if (data_parentItem == ad->data_msg_alert_repeat
215 || data_parentItem == ad->data_email_alert_repeat) {
216 rgd = elm_radio_add(scroller);
217 elm_radio_value_set(rgd, -1);
218 setting_create_Gendial_exp_sub_field(scroller,
219 &(ad->itc_1icon_1text_sub),
220 __sound_sub_list_sel_cb,
222 SWALLOW_Type_1RADIO, rgd,
224 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
227 setting_create_Gendial_exp_sub_field(scroller,
228 &(ad->itc_1icon_1text_sub),
229 __sound_sub_list_sel_cb,
231 SWALLOW_Type_1RADIO, rgd,
233 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
236 setting_create_Gendial_exp_sub_field(scroller,
237 &(ad->itc_1icon_1text_sub),
238 __sound_sub_list_sel_cb,
240 SWALLOW_Type_1RADIO, rgd,
242 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
244 setting_create_Gendial_exp_sub_field(scroller,
245 &(ad->itc_1icon_1text_sub),
246 __sound_sub_list_sel_cb,
248 SWALLOW_Type_1RADIO, rgd,
250 _(SETTING_SOUND_TEXT_REPEAT_10MIN),
253 setting_update_chk_status(rgd,
254 data_parentItem->int_slp_setting_binded);
258 static void __mm_player_msg_cb(void *user_param)
260 ret_if(user_param == NULL);
261 SettingProfileUG *ad = (SettingProfileUG *)user_param;
264 case MM_MESSAGE_END_OF_STREAM:
265 SETTING_TRACE_DEBUG("End of Stream");
266 setting_profile_close_all_mm_players(ad);
271 SETTING_TRACE("completed_cb is called.");
272 setting_profile_close_all_mm_players(ad);
275 void __ringtone_start_change_cb(void *data, Evas_Object *obj, void *event_info)
277 ret_if(data == NULL);
279 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
280 SettingProfileUG *ad = list_item->userdata;
282 ad->cur_vol_type = SETTING_VOL_TYPE_RINGTONE;
283 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
285 void __noti_start_change_cb(void *data, Evas_Object *obj, void *event_info)
287 ret_if(data == NULL);
289 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
290 SettingProfileUG *ad = list_item->userdata;
292 ad->cur_vol_type = SETTING_VOL_TYPE_NOTIFICATION;
293 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_NOTIFICATION);
295 void __media_start_change_cb(void *data, Evas_Object *obj, void *event_info)
297 ret_if(data == NULL);
299 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
300 SettingProfileUG *ad = list_item->userdata;
302 ad->cur_vol_type = SETTING_VOL_TYPE_MEDIA;
303 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_MEDIA);
305 void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info)
307 ret_if(data == NULL);
309 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
310 SettingProfileUG *ad = list_item->userdata;
312 ad->cur_vol_type = SETTING_VOL_TYPE_SYSTEM;
313 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_SYSTEM);
316 void __noti_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
318 ret_if(data == NULL);
320 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
321 SettingProfileUG *ad = list_item->userdata;
323 ad->cur_vol_type = SETTING_VOL_TYPE_NOTI_VIB;
324 setting_profile_close_all_mm_players(ad);
327 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
328 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, MAX_COMMON_BUFFER_LEN);
329 haptic_stop_all_effects(ad->hnd_hpt);
330 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
332 SETTING_TRACE("Failed to play haptic monotone");
335 void __haptic_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
338 ret_if(data == NULL);
340 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
341 SettingProfileUG *ad = list_item->userdata;
343 ad->cur_vol_type = SETTING_VOL_TYPE_HAPTIC_VIB;
344 setting_profile_close_all_mm_players(ad);
347 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
348 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, MAX_COMMON_BUFFER_LEN);
349 haptic_stop_all_effects(ad->hnd_hpt);
350 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
353 SETTING_TRACE("Failed to play haptic monotone");
356 void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
359 ret_if(data == NULL);
361 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
362 SettingProfileUG *ad = list_item->userdata;
364 char *pa_tone_path = NULL;
365 player_h **player = NULL;
367 double value = elm_slider_value_get(obj);
368 list_item->chk_status = (unsigned int)(value+0.5);
370 switch(ad->cur_vol_type)
372 case SETTING_VOL_TYPE_RINGTONE:
373 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
374 player = &(ad->mp_ringtone);
377 SETTING_TRACE_DEBUG("ringtone player will be created");
378 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
379 if(pa_tone_path == NULL)
381 pa_tone_path = SETTING_DEFAULT_CALL_TONE;
383 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0)
386 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
389 SOUND_TYPE_RINGTONE);
391 case SETTING_VOL_TYPE_NOTIFICATION:
392 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
393 player = &(ad->mp_noti);
396 SETTING_TRACE_DEBUG("noti player will be created");
397 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
398 if(pa_tone_path == NULL)
400 pa_tone_path = SETTING_DEFAULT_MSG_TONE;
401 if(vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE) < 0)
404 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
407 SOUND_TYPE_NOTIFICATION);
409 case SETTING_VOL_TYPE_MEDIA:
410 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
411 player = &(ad->mp_media);
414 SETTING_TRACE_DEBUG("media player will be created");
415 pa_tone_path = (char*)strdup(SETTING_DEFAULT_MEDIA_TONE);
417 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
422 case SETTING_VOL_TYPE_SYSTEM:
423 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
424 player = &(ad->mp_sys);
427 SETTING_TRACE_DEBUG("ringtone player will be created");
428 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
429 svi_get_path(SVI_TYPE_SND, SVI_SND_TOUCH_TOUCH1, pattern_file, sizeof(pattern_file));
431 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
445 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
447 ret_if(data == NULL);
449 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
450 SettingProfileUG *ad = list_item->userdata;
452 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
453 SETTING_TRACE("ERROR haptic_stop_all_effects");
458 switch(ad->cur_vol_type)
460 case SETTING_VOL_TYPE_NOTI_VIB:
461 if(ad->data_vib_volume)
463 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
464 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
466 elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
468 elm_slider_value_set(ad->data_vib_volume->eo_check, (unsigned int)(value+0.5));
471 case SETTING_VOL_TYPE_HAPTIC_VIB:
472 if(ad->data_touch_vib)
474 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
475 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
476 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, (unsigned int)(value+0.5));
478 elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
480 elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
486 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
490 static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
493 ret_if(data == NULL);
495 SettingProfileUG *ad = (SettingProfileUG *) data;
497 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
498 Setting_GenGroupItem_Data *list_item =
499 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
501 /* backup each slider's value */
502 if(list_item == ad->data_call_volume)
503 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
504 else if(list_item == ad->data_noti_volume)
505 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
506 else if(list_item == ad->data_media_volume)
507 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
508 else if(list_item == ad->data_touch_volume)
509 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
510 else if(list_item == ad->data_vib_volume)
511 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status);
512 else if(list_item == ad->data_touch_vib)
513 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status);
516 static Evas_Object *__get_main_list(void *data)
518 retv_if(data == NULL, NULL);
520 SettingProfileUG *ad = (SettingProfileUG *) data;
522 __setting_profile_ug_key_grab(ad);
524 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
525 return ad->sub_view[SETTING_PROF_VIEW_VOL];
527 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
528 elm_object_style_set(genlist, "dialogue");
529 retvm_if(genlist == NULL, NULL,
530 "Cannot set genlist object as contento of layout");
531 elm_genlist_clear(genlist); /* first to clear list */
536 Elm_Object_Item *item = elm_genlist_item_append(genlist,
537 &(ad->itc_seperator), NULL, NULL,
538 ELM_GENLIST_ITEM_NONE, NULL, NULL);
539 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
542 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
543 vconf_value = TRUE; /* default value of sound : on */
545 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
546 setting_profile_sound_main_mouse_up_Gendial_list_cb,
547 ad, SWALLOW_Type_1TOGGLE, NULL,
549 SETTING_SOUND_TEXT_SOUND, NULL,
550 setting_profile_sound_main_Gendial_chk_cb);
551 if (ad->data_sound) {
552 ad->data_sound->userdata = ad;
554 SETTING_TRACE_ERROR("ad->data_sound is NULL");
557 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
558 vconf_value = TRUE; /* default value of vibration : on */
560 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
561 setting_profile_sound_main_mouse_up_Gendial_list_cb,
562 ad, SWALLOW_Type_1TOGGLE, NULL,
564 SETTING_SOUND_TEXT_VIBRATION, NULL,
565 setting_profile_sound_main_Gendial_chk_cb);
566 if (ad->data_vibration) {
567 ad->data_vibration->userdata = ad;
569 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
572 (void)setting_create_Gendial_field_titleItem(genlist,
573 &(ad->itc_group_item),
574 "IDS_ST_BODY_VOLUME", NULL);
577 if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
578 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
579 ad->data_call_volume =
580 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
582 SWALLOW_Type_LAYOUT_SLIDER,
583 IMG_SLIDER_BTN_VOLUME01,
584 IMG_SLIDER_BTN_VOLUME02, mm_value,
585 SETTING_SOUND_TEXT_INCOMING_CALL,
587 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
588 if (ad->data_call_volume) {
589 ad->data_call_volume->win_main = ad->win_main_layout;
590 ad->data_call_volume->evas = ad->evas;
591 ad->data_call_volume->isIndicatorVisible = true;
592 ad->data_call_volume->slider_min = 0;
593 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
594 ad->data_call_volume->userdata = ad;
595 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
596 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
597 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
599 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
603 if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
604 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
606 (void)setting_create_Gendial_field_titleItem(genlist,
608 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
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 NULL,//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;
636 (void)setting_create_Gendial_field_titleItem(genlist,
638 SETTING_SOUND_TEXT_MEDIA, NULL);
639 ad->data_media_volume =
640 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
642 SWALLOW_Type_LAYOUT_SLIDER,
643 IMG_SLIDER_BTN_VOLUME01,
644 IMG_SLIDER_BTN_VOLUME02, mm_value,
646 setting_profile_sound_main_media_sound_slider_value_change_cb);
647 if (ad->data_media_volume) {
648 ad->data_media_volume->win_main = ad->win_main_layout;
649 ad->data_media_volume->evas = ad->evas;
650 ad->data_media_volume->isIndicatorVisible = true;
651 ad->data_media_volume->slider_min = 0;
652 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
653 ad->data_media_volume->userdata = ad;
654 ad->data_media_volume->start_change_cb = __media_start_change_cb;
655 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
656 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
658 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
661 /* h.system volume */
662 if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
664 SETTING_TRACE_DEBUG("Fail to get volume");
665 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
667 (void)setting_create_Gendial_field_titleItem(genlist,
669 SETTING_SOUND_TEXT_SYSTEM, NULL);
670 ad->data_touch_volume =
671 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
673 SWALLOW_Type_LAYOUT_SLIDER,
674 IMG_SLIDER_BTN_VOLUME01,
675 IMG_SLIDER_BTN_VOLUME02, mm_value,
677 settings_profile_sound_main_sys_sound_slider_value_change_cb);
678 if (ad->data_touch_volume) {
679 ad->data_touch_volume->win_main = ad->win_main_layout;
680 ad->data_touch_volume->evas = ad->evas;
681 ad->data_touch_volume->isIndicatorVisible = true;
682 ad->data_touch_volume->slider_min = 0;
683 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
684 ad->data_touch_volume->userdata = ad;
685 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
686 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
687 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
689 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
692 (void)setting_create_Gendial_field_titleItem(genlist,
693 &(ad->itc_group_item),
694 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
697 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0)
698 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
700 (void)setting_create_Gendial_field_titleItem(genlist,
702 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
703 ad->data_vib_volume =
704 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
706 SWALLOW_Type_LAYOUT_SLIDER,
707 IMG_VIBRATION_ICON_01,
708 IMG_VIBRATION_ICON_02, vconf_value,
709 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
711 setting_profile_sound_main_vib_sound_slider_value_change_cb);
712 if (ad->data_vib_volume) {
713 ad->data_vib_volume->win_main = ad->win_main_layout;
714 ad->data_vib_volume->evas = ad->evas;
715 ad->data_vib_volume->isIndicatorVisible = true;
716 ad->data_vib_volume->slider_min = 0;
717 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
718 ad->data_vib_volume->userdata = ad;
719 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
720 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
721 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
723 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
728 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
729 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
731 (void)setting_create_Gendial_field_titleItem(genlist,
733 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL);
735 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
737 SWALLOW_Type_LAYOUT_SLIDER,
738 IMG_VIBRATION_ICON_01,
739 IMG_VIBRATION_ICON_02, vconf_value,
741 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
742 if (ad->data_touch_vib) {
743 ad->data_touch_vib->win_main = ad->win_main_layout;
744 ad->data_touch_vib->evas = ad->evas;
745 ad->data_touch_vib->isIndicatorVisible = true;
746 ad->data_touch_vib->slider_min = 0;
747 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
748 ad->data_touch_vib->userdata = ad;
749 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
750 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
751 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
753 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
756 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
758 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
759 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
760 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
761 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
764 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
765 vconf_value = TRUE; /* default value of touch sounds : on */
767 ad->data_touch_sounds =
768 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
769 setting_profile_sound_main_mouse_up_Gendial_list_cb,
770 ad, SWALLOW_Type_1TOGGLE, NULL,
772 "IDS_ST_BODY_TOUCH_SOUNDS",
774 setting_profile_sound_main_Gendial_chk_cb);
775 if (ad->data_touch_sounds) {
776 ad->data_touch_sounds->userdata = ad;
778 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
781 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
783 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
784 NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
785 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
786 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
788 __change_state_of_sliderbars(ad);
790 evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
792 ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
794 return ad->sub_view[SETTING_PROF_VIEW_VOL];
797 static Evas_Object *__get_ringtone_list(void *data)
799 retv_if(data == NULL, NULL);
800 SettingProfileUG *ad = (SettingProfileUG *) data;
802 if(ad->sub_view[SETTING_PROF_VIEW_RTN])
803 return ad->sub_view[SETTING_PROF_VIEW_RTN];
805 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
806 elm_object_style_set(genlist, "dialogue");
807 retvm_if(genlist == NULL, NULL,
808 "Cannot set genlist object as contento of layout");
809 elm_genlist_clear(genlist); /* first to clear list */
810 setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
812 /* a. incoming call group */
813 (void)setting_create_Gendial_field_titleItem(genlist,
814 &(ad->itc_group_item),
815 SETTING_SOUND_TEXT_INCOMING_CALL,
820 char *sub_desc = NULL;
821 char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
822 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
824 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
825 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
827 SETTING_TRACE_DEBUG("failed to set vconf");
829 sub_desc = setting_file_basename(pa_ringtone);
831 ad->data_call_alert_tone =
832 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
833 setting_profile_sound_main_mouse_up_Gendial_list_cb,
834 ad, SWALLOW_Type_INVALID, NULL,
835 NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
837 if (ad->data_call_alert_tone) {
838 ad->data_call_alert_tone->userdata = ad;
840 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
846 /* b. notification */
847 (void)setting_create_Gendial_field_titleItem(genlist,
848 &(ad->itc_group_item),
849 SETTING_SOUND_TEXT_NOTIFICATION,
852 int repeat_value = 0;
854 /* b-1. msg ringtone */
855 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
856 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
858 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
859 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
861 SETTING_TRACE_DEBUG("failed to set vconf");
863 sub_desc = setting_file_basename(pa_ringtone);
865 ad->data_msg_alert_tone =
866 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
867 setting_profile_sound_main_mouse_up_Gendial_list_cb,
868 ad, SWALLOW_Type_INVALID, NULL,
870 SETTING_SOUND_TEXT_MSG_ALERT,
872 if (ad->data_msg_alert_tone) {
873 ad->data_msg_alert_tone->userdata = ad;
875 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
880 /* b-2. msg alert repetition */
882 (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
883 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
884 ad->data_msg_alert_repeat =
885 setting_create_Gendial_exp_parent_field(genlist,
886 &(ad->itc_2text_3_parent),
887 setting_profile_sound_main_mouse_up_Gendial_list_cb,
888 ad, SWALLOW_Type_INVALID,
889 SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
890 _(repeat_type[repeat_value]));
891 if (ad->data_msg_alert_repeat) {
892 ad->data_msg_alert_repeat->int_slp_setting_binded =
893 INT_SLP_SETTING_MSG_ALERT_REPEAT;
895 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
898 /* b-3. email ringtone */
899 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
900 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
902 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
903 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
905 SETTING_TRACE_DEBUG("failed to set vconf");
907 sub_desc = setting_file_basename(pa_ringtone);
909 ad->data_email_alert_tone =
910 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
911 setting_profile_sound_main_mouse_up_Gendial_list_cb,
912 ad, SWALLOW_Type_INVALID, NULL,
914 SETTING_SOUND_TEXT_EMAIL_ALERT,
916 if (ad->data_email_alert_tone) {
917 ad->data_email_alert_tone->userdata = ad;
919 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
924 /* b-4. email alert repetition */
926 (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
928 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
929 ad->data_email_alert_repeat =
930 setting_create_Gendial_exp_parent_field(genlist,
931 &(ad->itc_2text_3_parent),
932 setting_profile_sound_main_mouse_up_Gendial_list_cb,
933 ad, SWALLOW_Type_INVALID,
934 SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
935 _(repeat_type[repeat_value]));
936 if (ad->data_email_alert_repeat) {
937 ad->data_email_alert_repeat->int_slp_setting_binded =
938 INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
940 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
943 Elm_Object_Item *item = NULL;
944 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
945 ELM_GENLIST_ITEM_NONE, NULL, NULL);
946 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
948 ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
950 return ad->sub_view[SETTING_PROF_VIEW_RTN];
953 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
955 //appcore_measure_start();
956 retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
957 retm_if(data == NULL, "Invalid argmuent: data is NULL");
959 SettingProfileUG *ad = (SettingProfileUG *) data;
961 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
962 SETTING_TRACE("ERROR haptic_stop_all_effects");
965 setting_profile_close_all_mm_players(ad);
967 Evas_Object *sub_view = NULL;
968 Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
969 const char *tab_lable = elm_object_item_text_get(sel_item);
971 //SETTING_TRACE("tab_lable:%s", tab_lable);
972 if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
974 haptic_stop_all_effects(ad->hnd_hpt);
975 sub_view = __get_main_list(ad);
976 } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
977 sub_view = __get_ringtone_list(ad);
980 Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
981 ret_if(old_sub_view == sub_view);
986 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
987 evas_object_hide(old_sub_view);
989 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
990 evas_object_show(sub_view);
994 static int setting_profile_sound_main_create(void *cb)
996 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
998 SettingProfileUG *ad = (SettingProfileUG *) cb;
1000 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1001 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1004 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1005 elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
1006 evas_object_show(view_layout);
1007 ad->view_layout = view_layout;
1009 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1011 return SETTING_RETURN_FAIL;
1013 elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1014 ad->ctrl_bar = tabbar;
1015 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1016 elm_object_style_set(tabbar, "tabbar");
1017 elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
1019 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1020 IMG_CTRL_ICON_VOLUME,
1021 VOLUME_STR, __view_change_cb, ad);
1023 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1024 IMG_CTRL_ICON_RINGTONE,
1025 RINGTONE_STR, __view_change_cb, ad);
1027 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1028 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1030 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1031 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1032 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1034 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
1035 elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1037 setting_view_profile_sound_main.is_create = TRUE;
1039 return SETTING_RETURN_SUCCESS;
1042 static int setting_profile_sound_main_destroy(void *cb)
1045 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1047 SettingProfileUG *ad = (SettingProfileUG *) cb;
1049 __setting_profile_ug_key_ungrab(ad);
1051 if (ad->ly_main != NULL) {
1052 //Fix the memory leak,
1053 //Manage ad->sub_view[] separately, unset first, then delete in together
1054 if (ad->view_layout)
1056 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1058 int i = SETTING_PROF_VIEW_VOL;
1059 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1061 evas_object_del(ad->sub_view[i]);
1064 evas_object_del(ad->ly_main);
1065 setting_view_profile_sound_main.is_create = FALSE;
1067 return SETTING_RETURN_SUCCESS;
1070 static int setting_profile_sound_main_update(void *cb)
1073 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1075 SettingProfileUG *ad = (SettingProfileUG *) cb;
1077 if (ad->ly_main != NULL) {
1078 evas_object_show(ad->ly_main);
1081 return SETTING_RETURN_SUCCESS;
1084 static int setting_profile_sound_main_cleanup(void *cb)
1087 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1089 SettingProfileUG *ad = (SettingProfileUG *) cb;
1091 if (ad->ly_main != NULL) {
1092 evas_object_hide(ad->ly_main);
1095 return SETTING_RETURN_SUCCESS;
1098 /* ***************************************************
1102 ***************************************************/
1104 /* ***************************************************
1108 ***************************************************/
1110 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1115 ret_if(data == NULL);
1117 SettingProfileUG *ad = (SettingProfileUG *) data;
1119 /* close mm plaer */
1120 setting_profile_close_all_mm_players(ad);
1121 /* close vibration */
1122 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1123 SETTING_TRACE("ERROR haptic_stop_all_effects");
1127 /* Send destroy request */
1128 ug_destroy_me(ad->ug);
1133 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1135 ret_if(priv == NULL);
1136 SettingProfileUG *ad = (SettingProfileUG *) priv;
1138 __setting_profile_ug_key_grab(ad);
1142 ad->ug_loading = NULL;
1147 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1148 service_h result, void *priv)
1150 ret_if(priv == NULL);
1152 SettingProfileUG *ad = (SettingProfileUG *) priv;
1153 char *ringtone_file = NULL;
1154 char *ringtone_path = NULL;
1156 service_get_extra_data(result, "result", &ringtone_path);
1160 SETTING_TRACE("ringtone_path:%s", ringtone_path);
1162 if (ringtone_path != NULL) {
1163 ringtone_file = setting_file_basename(ringtone_path);
1164 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1166 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1168 (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1169 if (ad->data_call_alert_tone) {
1170 ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1172 elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1173 elm_genlist_item_update(ad->data_call_alert_tone->item);
1177 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1179 (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1180 if (ad->data_msg_alert_tone) {
1181 ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1183 elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1184 elm_genlist_item_update(ad->data_msg_alert_tone->item);
1188 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1190 (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1191 if (ad->data_email_alert_tone) {
1192 ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1194 elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1195 elm_genlist_item_update(ad->data_email_alert_tone->item);
1201 G_FREE(ringtone_file);
1206 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1209 ret_if(priv == NULL);
1211 SettingProfileUG *ad = (SettingProfileUG *) priv;
1214 base = (Evas_Object *) ug_get_layout(ug);
1219 case UG_MODE_FULLVIEW:
1220 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1221 //elm_win_resize_object_add(ad->win_get, base);
1222 evas_object_show(base);
1230 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1236 SETTING_TRACE("Myfiles ug is already loaded.");
1240 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1244 cbs->layout_cb = setting_profile_layout_ug_cb;
1245 cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1246 cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1247 cbs->priv = (void *)ad;
1250 if (service_create(&svc)) {
1255 const char *pa_cur_ringtone = NULL;
1256 const char *dir_path = NULL;
1257 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1258 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1259 if (pa_cur_ringtone == NULL)
1261 pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1263 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1264 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1265 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1266 if (pa_cur_ringtone == NULL)
1267 pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1268 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1269 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1270 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1271 if (pa_cur_ringtone == NULL)
1272 pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1273 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1275 SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1276 SETTING_TRACE("dir_path:\t%s", dir_path);
1278 service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1279 service_add_extra_data(svc, "path", dir_path);
1280 service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1281 service_add_extra_data(svc, "file_type", "SOUND");
1282 service_add_extra_data(svc, "drm_type", "DRM_ALL");
1284 SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1285 ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1286 if (NULL == ad->ug_loading) { /* error handling */
1287 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1290 service_destroy(svc);
1293 /** @todo verify it's valid */
1295 FREE(pa_cur_ringtone);
1297 __setting_profile_ug_key_ungrab(ad);
1302 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1306 ret_if(data == NULL);
1308 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1309 SettingProfileUG *ad = list_item->userdata;
1311 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1313 /* restore the selected check status */
1314 list_item->chk_status = state;
1315 elm_check_state_set(list_item->eo_check, state);
1317 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1318 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1319 list_item->chk_status = !state;
1320 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1323 if (list_item->chk_status) {
1324 setting_enable_genlist_item(ad->data_call_volume->item);
1325 setting_enable_genlist_item(ad->data_noti_volume->item);
1326 setting_enable_genlist_item(ad->data_media_volume->item);
1327 setting_enable_genlist_item(ad->data_touch_volume->item);
1329 setting_profile_close_all_mm_players(ad);
1330 setting_disable_genlist_item(ad->data_call_volume->item);
1331 setting_disable_genlist_item(ad->data_noti_volume->item);
1332 setting_disable_genlist_item(ad->data_media_volume->item);
1333 setting_disable_genlist_item(ad->data_touch_volume->item);
1335 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1336 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1337 list_item->chk_status = !state;
1338 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1340 if (list_item->chk_status) {
1341 setting_enable_genlist_item(ad->data_vib_volume->item);
1342 setting_enable_genlist_item(ad->data_touch_vib->item);
1344 /* Play vib if vib turns on */
1346 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1347 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1348 haptic_stop_all_effects(ad->hnd_hpt);
1349 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);
1352 SETTING_TRACE("Failed to play haptic monotone");
1354 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1355 SETTING_TRACE("ERROR haptic_stop_all_effects");
1357 setting_disable_genlist_item(ad->data_vib_volume->item);
1358 setting_disable_genlist_item(ad->data_touch_vib->item);
1361 /* additional items */
1362 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1363 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1364 list_item->chk_status = !state;
1365 elm_check_state_set(list_item->eo_check, !state);
1368 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1369 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1370 list_item->chk_status = !state;
1371 elm_check_state_set(list_item->eo_check, !state);
1380 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1385 ret_if(data == NULL);
1386 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1388 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1389 elm_genlist_item_selected_set(item, 0);
1390 Setting_GenGroupItem_Data *list_item =
1391 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1393 SettingProfileUG *ad = data;
1396 haptic_stop_all_effects(ad->hnd_hpt);
1398 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1399 if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1400 || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1401 || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1402 ad->ringtone_type = list_item->keyStr;
1403 setting_profile_sound_main_create_myfile_ug(ad);
1404 } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1405 int old_status = elm_check_state_get(list_item->eo_check);
1406 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1408 list_item->chk_status = !old_status;
1409 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1410 if (list_item->chk_status) {
1411 setting_enable_genlist_item(ad->data_call_volume->item);
1412 setting_enable_genlist_item(ad->data_noti_volume->item);
1413 setting_enable_genlist_item(ad->data_media_volume->item);
1414 setting_enable_genlist_item(ad->data_touch_volume->item);
1416 setting_profile_close_all_mm_players(ad);
1417 setting_disable_genlist_item(ad->data_call_volume->item);
1418 setting_disable_genlist_item(ad->data_noti_volume->item);
1419 setting_disable_genlist_item(ad->data_media_volume->item);
1420 setting_disable_genlist_item(ad->data_touch_volume->item);
1424 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1425 int old_status = elm_check_state_get(list_item->eo_check);
1426 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1428 list_item->chk_status = !old_status;
1429 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1430 if (list_item->chk_status) {
1431 setting_enable_genlist_item(ad->data_vib_volume->item);
1432 setting_enable_genlist_item(ad->data_touch_vib->item);
1434 /* Play vib if vib turns on */
1436 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1437 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1438 haptic_stop_all_effects(ad->hnd_hpt);
1439 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);
1442 SETTING_TRACE("Failed to play haptic monotone");
1444 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1445 SETTING_TRACE("ERROR haptic_stop_all_effects");
1447 setting_disable_genlist_item(ad->data_vib_volume->item);
1448 setting_disable_genlist_item(ad->data_touch_vib->item);
1453 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1454 int old_status = elm_check_state_get(list_item->eo_check);
1455 /* To do : set vconfkey for touch sounds */
1456 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1458 list_item->chk_status = !old_status;
1459 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1463 else if (ad->data_msg_alert_repeat == list_item
1464 || ad->data_email_alert_repeat == list_item) {
1465 bool status = !elm_genlist_item_expanded_get(item);
1466 elm_genlist_item_expanded_set(item, status);
1471 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1476 ret_if(data == NULL);
1478 double val = elm_slider_value_get(obj);
1480 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1481 SettingProfileUG *ad = list_item->userdata;
1483 if(ad->mp_ringtone == NULL)
1486 if(list_item->chk_status != (int)(val+0.5))
1488 list_item->chk_status = (int)(val+0.5);
1489 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
1490 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1495 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1500 ret_if(data == NULL);
1502 double val = elm_slider_value_get(obj);
1504 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1505 SettingProfileUG *ad = list_item->userdata;
1507 if(ad->mp_noti == NULL)
1510 if(list_item->chk_status != (int)(val+0.5))
1512 list_item->chk_status = val;
1513 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
1514 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1519 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1524 ret_if(data == NULL);
1526 double val = elm_slider_value_get(obj);
1528 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1529 SettingProfileUG *ad = list_item->userdata;
1531 if(ad->mp_media == NULL)
1533 if(list_item->chk_status != (int)(val+0.5))
1535 list_item->chk_status = val;
1536 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
1537 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1542 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1547 ret_if(data == NULL);
1549 double val = elm_slider_value_get(obj);
1551 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1552 SettingProfileUG *ad = list_item->userdata;
1554 if(ad->mp_sys == NULL)
1557 if(list_item->chk_status != (int)(val+0.5))
1559 list_item->chk_status = val;
1560 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
1561 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1566 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1571 ret_if(data == NULL);
1573 static double priv_val_db = 5.0;
1574 static int priv_val_int = 0;
1575 double val = elm_slider_value_get(obj);
1576 SETTING_TRACE("val = %f", val);
1577 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1578 SettingProfileUG *ad = list_item->userdata;
1583 value = (int)(val + 0.5); /* to sync displayed value on slider */
1584 list_item->chk_status = value;
1585 if (value != priv_val_int) {
1586 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status);
1587 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1588 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1589 haptic_stop_all_effects(ad->hnd_hpt);
1590 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1593 SETTING_TRACE("Failed to play haptic monotone");
1594 priv_val_int = value;
1601 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1607 ret_if(data == NULL);
1609 static double priv_val_db = 3.0;
1610 static int priv_val_int = 0;
1611 double val = elm_slider_value_get(obj);
1612 SETTING_TRACE("val = %f", val);
1613 Setting_GenGroupItem_Data *list_item =
1614 (Setting_GenGroupItem_Data *) data;
1615 SettingProfileUG *ad = list_item->userdata;
1620 value = (int)(val + 0.5); /* to sync displayed value on slider */
1621 list_item->chk_status = value;
1622 if (value != priv_val_int) {
1623 vconf_set_int (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status);
1624 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1625 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1626 haptic_stop_all_effects(ad->hnd_hpt);
1627 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1630 SETTING_TRACE("Failed to play haptic monotone");
1631 priv_val_int = value;