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,
448 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
450 ret_if(data == NULL);
452 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
453 SettingProfileUG *ad = list_item->userdata;
455 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
456 SETTING_TRACE("ERROR haptic_stop_all_effects");
461 switch(ad->cur_vol_type)
463 case SETTING_VOL_TYPE_NOTI_VIB:
464 if(ad->data_vib_volume)
466 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
467 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
469 elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
471 elm_slider_value_set(ad->data_vib_volume->eo_check, (unsigned int)(value+0.5));
474 case SETTING_VOL_TYPE_HAPTIC_VIB:
475 if(ad->data_touch_vib)
477 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
478 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, (unsigned int)(value+0.5));
479 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, (unsigned int)(value+0.5));
481 elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
483 elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
489 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
493 static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
496 ret_if(data == NULL);
498 SettingProfileUG *ad = (SettingProfileUG *) data;
500 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
501 Setting_GenGroupItem_Data *list_item =
502 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
504 /* backup each slider's value */
505 if(list_item == ad->data_call_volume)
506 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
507 else if(list_item == ad->data_noti_volume)
508 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
509 else if(list_item == ad->data_media_volume)
510 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
511 else if(list_item == ad->data_touch_volume)
512 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
513 else if(list_item == ad->data_vib_volume)
514 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status);
515 else if(list_item == ad->data_touch_vib)
516 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status);
519 static Evas_Object *__get_main_list(void *data)
521 retv_if(data == NULL, NULL);
523 SettingProfileUG *ad = (SettingProfileUG *) data;
525 __setting_profile_ug_key_grab(ad);
527 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
528 return ad->sub_view[SETTING_PROF_VIEW_VOL];
530 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
531 elm_object_style_set(genlist, "dialogue");
532 retvm_if(genlist == NULL, NULL,
533 "Cannot set genlist object as contento of layout");
534 elm_genlist_clear(genlist); /* first to clear list */
539 Elm_Object_Item *item = elm_genlist_item_append(genlist,
540 &(ad->itc_seperator), NULL, NULL,
541 ELM_GENLIST_ITEM_NONE, NULL, NULL);
542 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
545 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
546 vconf_value = TRUE; /* default value of sound : on */
548 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
549 setting_profile_sound_main_mouse_up_Gendial_list_cb,
550 ad, SWALLOW_Type_1TOGGLE, NULL,
552 SETTING_SOUND_TEXT_SOUND, NULL,
553 setting_profile_sound_main_Gendial_chk_cb);
554 if (ad->data_sound) {
555 ad->data_sound->userdata = ad;
557 SETTING_TRACE_ERROR("ad->data_sound is NULL");
560 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
561 vconf_value = TRUE; /* default value of vibration : on */
563 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
564 setting_profile_sound_main_mouse_up_Gendial_list_cb,
565 ad, SWALLOW_Type_1TOGGLE, NULL,
567 SETTING_SOUND_TEXT_VIBRATION, NULL,
568 setting_profile_sound_main_Gendial_chk_cb);
569 if (ad->data_vibration) {
570 ad->data_vibration->userdata = ad;
572 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
575 (void)setting_create_Gendial_field_titleItem(genlist,
576 &(ad->itc_group_item),
577 "IDS_ST_BODY_VOLUME", NULL);
580 if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
581 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
582 ad->data_call_volume =
583 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
585 SWALLOW_Type_LAYOUT_SLIDER,
586 IMG_SLIDER_BTN_VOLUME01,
587 IMG_SLIDER_BTN_VOLUME02, mm_value,
588 SETTING_SOUND_TEXT_INCOMING_CALL,
590 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
591 if (ad->data_call_volume) {
592 ad->data_call_volume->win_main = ad->win_main_layout;
593 ad->data_call_volume->evas = ad->evas;
594 ad->data_call_volume->isIndicatorVisible = true;
595 ad->data_call_volume->slider_min = 0;
596 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
597 ad->data_call_volume->userdata = ad;
598 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
599 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
600 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
602 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
606 if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
607 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
609 (void)setting_create_Gendial_field_titleItem(genlist,
611 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
612 ad->data_noti_volume =
613 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
615 SWALLOW_Type_LAYOUT_SLIDER,
616 IMG_SLIDER_BTN_VOLUME01,
617 IMG_SLIDER_BTN_VOLUME02, mm_value,
618 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
620 setting_profile_sound_main_noti_sound_slider_value_change_cb);
621 if (ad->data_noti_volume) {
622 ad->data_noti_volume->win_main = ad->win_main_layout;
623 ad->data_noti_volume->evas = ad->evas;
624 ad->data_noti_volume->isIndicatorVisible = true;
625 ad->data_noti_volume->slider_min = 0;
626 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
627 ad->data_noti_volume->userdata = ad;
628 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
629 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
630 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
632 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
636 if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
637 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
639 (void)setting_create_Gendial_field_titleItem(genlist,
641 SETTING_SOUND_TEXT_MEDIA, NULL);
642 ad->data_media_volume =
643 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
645 SWALLOW_Type_LAYOUT_SLIDER,
646 IMG_SLIDER_BTN_VOLUME01,
647 IMG_SLIDER_BTN_VOLUME02, mm_value,
649 setting_profile_sound_main_media_sound_slider_value_change_cb);
650 if (ad->data_media_volume) {
651 ad->data_media_volume->win_main = ad->win_main_layout;
652 ad->data_media_volume->evas = ad->evas;
653 ad->data_media_volume->isIndicatorVisible = true;
654 ad->data_media_volume->slider_min = 0;
655 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
656 ad->data_media_volume->userdata = ad;
657 ad->data_media_volume->start_change_cb = __media_start_change_cb;
658 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
659 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
661 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
664 /* h.system volume */
665 if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
667 SETTING_TRACE_DEBUG("Fail to get volume");
668 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
670 (void)setting_create_Gendial_field_titleItem(genlist,
672 SETTING_SOUND_TEXT_SYSTEM, NULL);
673 ad->data_touch_volume =
674 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
676 SWALLOW_Type_LAYOUT_SLIDER,
677 IMG_SLIDER_BTN_VOLUME01,
678 IMG_SLIDER_BTN_VOLUME02, mm_value,
680 settings_profile_sound_main_sys_sound_slider_value_change_cb);
681 if (ad->data_touch_volume) {
682 ad->data_touch_volume->win_main = ad->win_main_layout;
683 ad->data_touch_volume->evas = ad->evas;
684 ad->data_touch_volume->isIndicatorVisible = true;
685 ad->data_touch_volume->slider_min = 0;
686 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
687 ad->data_touch_volume->userdata = ad;
688 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
689 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
690 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
692 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
695 (void)setting_create_Gendial_field_titleItem(genlist,
696 &(ad->itc_group_item),
697 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
700 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0)
701 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
703 (void)setting_create_Gendial_field_titleItem(genlist,
705 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
706 ad->data_vib_volume =
707 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
709 SWALLOW_Type_LAYOUT_SLIDER,
710 IMG_VIBRATION_ICON_01,
711 IMG_VIBRATION_ICON_02, vconf_value,
712 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
714 setting_profile_sound_main_vib_sound_slider_value_change_cb);
715 if (ad->data_vib_volume) {
716 ad->data_vib_volume->win_main = ad->win_main_layout;
717 ad->data_vib_volume->evas = ad->evas;
718 ad->data_vib_volume->isIndicatorVisible = true;
719 ad->data_vib_volume->slider_min = 0;
720 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
721 ad->data_vib_volume->userdata = ad;
722 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
723 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
724 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
726 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
731 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
732 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
734 (void)setting_create_Gendial_field_titleItem(genlist,
736 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL);
738 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
740 SWALLOW_Type_LAYOUT_SLIDER,
741 IMG_VIBRATION_ICON_01,
742 IMG_VIBRATION_ICON_02, vconf_value,
744 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
745 if (ad->data_touch_vib) {
746 ad->data_touch_vib->win_main = ad->win_main_layout;
747 ad->data_touch_vib->evas = ad->evas;
748 ad->data_touch_vib->isIndicatorVisible = true;
749 ad->data_touch_vib->slider_min = 0;
750 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
751 ad->data_touch_vib->userdata = ad;
752 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
753 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
754 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
756 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
759 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
761 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
762 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
763 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
764 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
767 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
768 vconf_value = TRUE; /* default value of touch sounds : on */
770 ad->data_touch_sounds =
771 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
772 setting_profile_sound_main_mouse_up_Gendial_list_cb,
773 ad, SWALLOW_Type_1TOGGLE, NULL,
775 "IDS_ST_BODY_TOUCH_SOUNDS",
777 setting_profile_sound_main_Gendial_chk_cb);
778 if (ad->data_touch_sounds) {
779 ad->data_touch_sounds->userdata = ad;
781 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
784 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
786 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
787 NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
788 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
789 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
791 __change_state_of_sliderbars(ad);
793 evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
795 ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
797 return ad->sub_view[SETTING_PROF_VIEW_VOL];
800 static Evas_Object *__get_ringtone_list(void *data)
802 retv_if(data == NULL, NULL);
803 SettingProfileUG *ad = (SettingProfileUG *) data;
805 if(ad->sub_view[SETTING_PROF_VIEW_RTN])
806 return ad->sub_view[SETTING_PROF_VIEW_RTN];
808 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
809 elm_object_style_set(genlist, "dialogue");
810 retvm_if(genlist == NULL, NULL,
811 "Cannot set genlist object as contento of layout");
812 elm_genlist_clear(genlist); /* first to clear list */
813 setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
815 /* a. incoming call group */
816 (void)setting_create_Gendial_field_titleItem(genlist,
817 &(ad->itc_group_item),
818 SETTING_SOUND_TEXT_INCOMING_CALL,
823 char *sub_desc = NULL;
824 char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
825 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
827 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
828 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
830 SETTING_TRACE_DEBUG("failed to set vconf");
832 sub_desc = setting_file_basename(pa_ringtone);
834 ad->data_call_alert_tone =
835 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
836 setting_profile_sound_main_mouse_up_Gendial_list_cb,
837 ad, SWALLOW_Type_INVALID, NULL,
838 NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
840 if (ad->data_call_alert_tone) {
841 ad->data_call_alert_tone->userdata = ad;
843 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
849 /* b. notification */
850 (void)setting_create_Gendial_field_titleItem(genlist,
851 &(ad->itc_group_item),
852 SETTING_SOUND_TEXT_NOTIFICATION,
855 int repeat_value = 0;
857 /* b-1. msg ringtone */
858 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
859 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
861 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
862 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
864 SETTING_TRACE_DEBUG("failed to set vconf");
866 sub_desc = setting_file_basename(pa_ringtone);
868 ad->data_msg_alert_tone =
869 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
870 setting_profile_sound_main_mouse_up_Gendial_list_cb,
871 ad, SWALLOW_Type_INVALID, NULL,
873 SETTING_SOUND_TEXT_MSG_ALERT,
875 if (ad->data_msg_alert_tone) {
876 ad->data_msg_alert_tone->userdata = ad;
878 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
883 /* b-2. msg alert repetition */
885 (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
886 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
887 ad->data_msg_alert_repeat =
888 setting_create_Gendial_exp_parent_field(genlist,
889 &(ad->itc_2text_3_parent),
890 setting_profile_sound_main_mouse_up_Gendial_list_cb,
891 ad, SWALLOW_Type_INVALID,
892 SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
893 _(repeat_type[repeat_value]));
894 if (ad->data_msg_alert_repeat) {
895 ad->data_msg_alert_repeat->int_slp_setting_binded =
896 INT_SLP_SETTING_MSG_ALERT_REPEAT;
898 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
901 /* b-3. email ringtone */
902 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
903 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
905 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
906 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
908 SETTING_TRACE_DEBUG("failed to set vconf");
910 sub_desc = setting_file_basename(pa_ringtone);
912 ad->data_email_alert_tone =
913 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
914 setting_profile_sound_main_mouse_up_Gendial_list_cb,
915 ad, SWALLOW_Type_INVALID, NULL,
917 SETTING_SOUND_TEXT_EMAIL_ALERT,
919 if (ad->data_email_alert_tone) {
920 ad->data_email_alert_tone->userdata = ad;
922 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
927 /* b-4. email alert repetition */
929 (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
931 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
932 ad->data_email_alert_repeat =
933 setting_create_Gendial_exp_parent_field(genlist,
934 &(ad->itc_2text_3_parent),
935 setting_profile_sound_main_mouse_up_Gendial_list_cb,
936 ad, SWALLOW_Type_INVALID,
937 SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
938 _(repeat_type[repeat_value]));
939 if (ad->data_email_alert_repeat) {
940 ad->data_email_alert_repeat->int_slp_setting_binded =
941 INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
943 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
946 Elm_Object_Item *item = NULL;
947 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
948 ELM_GENLIST_ITEM_NONE, NULL, NULL);
949 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
951 ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
953 return ad->sub_view[SETTING_PROF_VIEW_RTN];
956 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
958 //appcore_measure_start();
959 retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
960 retm_if(data == NULL, "Invalid argmuent: data is NULL");
962 SettingProfileUG *ad = (SettingProfileUG *) data;
964 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
965 SETTING_TRACE("ERROR haptic_stop_all_effects");
968 setting_profile_close_all_mm_players(ad);
970 Evas_Object *sub_view = NULL;
971 Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
972 const char *tab_lable = elm_object_item_text_get(sel_item);
974 //SETTING_TRACE("tab_lable:%s", tab_lable);
975 if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
977 haptic_stop_all_effects(ad->hnd_hpt);
978 sub_view = __get_main_list(ad);
979 } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
980 sub_view = __get_ringtone_list(ad);
983 Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
984 ret_if(old_sub_view == sub_view);
989 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
990 evas_object_hide(old_sub_view);
992 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
993 evas_object_show(sub_view);
997 static int setting_profile_sound_main_create(void *cb)
999 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1001 SettingProfileUG *ad = (SettingProfileUG *) cb;
1003 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1004 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1007 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1008 elm_layout_theme_set(view_layout, "layout", "tabbar", "default");
1009 evas_object_show(view_layout);
1010 ad->view_layout = view_layout;
1012 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1014 return SETTING_RETURN_FAIL;
1016 elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1017 ad->ctrl_bar = tabbar;
1018 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1019 elm_object_style_set(tabbar, "tabbar");
1020 elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
1022 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1023 IMG_CTRL_ICON_VOLUME,
1024 VOLUME_STR, __view_change_cb, ad);
1026 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1027 IMG_CTRL_ICON_RINGTONE,
1028 RINGTONE_STR, __view_change_cb, ad);
1030 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1031 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1033 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1034 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1035 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1037 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, NULL, ug_back_btn, NULL, ad->view_layout, "tabbar");
1038 elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1040 setting_view_profile_sound_main.is_create = TRUE;
1042 return SETTING_RETURN_SUCCESS;
1045 static int setting_profile_sound_main_destroy(void *cb)
1048 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1050 SettingProfileUG *ad = (SettingProfileUG *) cb;
1052 __setting_profile_ug_key_ungrab(ad);
1054 if (ad->ly_main != NULL) {
1055 //Fix the memory leak,
1056 //Manage ad->sub_view[] separately, unset first, then delete in together
1057 if (ad->view_layout)
1059 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1061 int i = SETTING_PROF_VIEW_VOL;
1062 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1064 evas_object_del(ad->sub_view[i]);
1067 evas_object_del(ad->ly_main);
1068 setting_view_profile_sound_main.is_create = FALSE;
1070 return SETTING_RETURN_SUCCESS;
1073 static int setting_profile_sound_main_update(void *cb)
1076 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1078 SettingProfileUG *ad = (SettingProfileUG *) cb;
1080 if (ad->ly_main != NULL) {
1081 evas_object_show(ad->ly_main);
1084 return SETTING_RETURN_SUCCESS;
1087 static int setting_profile_sound_main_cleanup(void *cb)
1090 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1092 SettingProfileUG *ad = (SettingProfileUG *) cb;
1094 if (ad->ly_main != NULL) {
1095 evas_object_hide(ad->ly_main);
1098 return SETTING_RETURN_SUCCESS;
1101 /* ***************************************************
1105 ***************************************************/
1107 /* ***************************************************
1111 ***************************************************/
1113 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1118 ret_if(data == NULL);
1120 SettingProfileUG *ad = (SettingProfileUG *) data;
1122 /* close mm plaer */
1123 setting_profile_close_all_mm_players(ad);
1124 /* close vibration */
1125 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1126 SETTING_TRACE("ERROR haptic_stop_all_effects");
1130 /* Send destroy request */
1131 ug_destroy_me(ad->ug);
1136 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1138 ret_if(priv == NULL);
1139 SettingProfileUG *ad = (SettingProfileUG *) priv;
1141 __setting_profile_ug_key_grab(ad);
1145 ad->ug_loading = NULL;
1150 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1151 service_h result, void *priv)
1153 ret_if(priv == NULL);
1155 SettingProfileUG *ad = (SettingProfileUG *) priv;
1156 char *ringtone_file = NULL;
1157 char *ringtone_path = NULL;
1159 service_get_extra_data(result, "result", &ringtone_path);
1163 SETTING_TRACE("ringtone_path:%s", ringtone_path);
1165 if (ringtone_path != NULL) {
1166 ringtone_file = setting_file_basename(ringtone_path);
1167 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1169 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1171 (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1172 if (ad->data_call_alert_tone) {
1173 ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1175 elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1176 elm_genlist_item_update(ad->data_call_alert_tone->item);
1180 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1182 (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1183 if (ad->data_msg_alert_tone) {
1184 ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1186 elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1187 elm_genlist_item_update(ad->data_msg_alert_tone->item);
1191 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1193 (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1194 if (ad->data_email_alert_tone) {
1195 ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1197 elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1198 elm_genlist_item_update(ad->data_email_alert_tone->item);
1204 G_FREE(ringtone_file);
1209 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1212 ret_if(priv == NULL);
1214 SettingProfileUG *ad = (SettingProfileUG *) priv;
1217 base = (Evas_Object *) ug_get_layout(ug);
1222 case UG_MODE_FULLVIEW:
1223 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1224 //elm_win_resize_object_add(ad->win_get, base);
1225 evas_object_show(base);
1233 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1239 SETTING_TRACE("Myfiles ug is already loaded.");
1243 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1247 cbs->layout_cb = setting_profile_layout_ug_cb;
1248 cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1249 cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1250 cbs->priv = (void *)ad;
1253 if (service_create(&svc)) {
1258 const char *pa_cur_ringtone = NULL;
1259 const char *dir_path = NULL;
1260 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1261 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1262 if (pa_cur_ringtone == NULL)
1264 pa_cur_ringtone = SETTING_DEFAULT_CALL_TONE;
1266 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1267 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1268 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1269 if (pa_cur_ringtone == NULL)
1270 pa_cur_ringtone = SETTING_DEFAULT_MSG_TONE;
1271 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1272 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1273 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1274 if (pa_cur_ringtone == NULL)
1275 pa_cur_ringtone = SETTING_DEFAULT_EMAIL_TONE;
1276 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1278 SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1279 SETTING_TRACE("dir_path:\t%s", dir_path);
1281 service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1282 service_add_extra_data(svc, "path", dir_path);
1283 service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1284 service_add_extra_data(svc, "file_type", "SOUND");
1285 service_add_extra_data(svc, "drm_type", "DRM_ALL");
1287 SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1288 ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1289 if (NULL == ad->ug_loading) { /* error handling */
1290 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1293 service_destroy(svc);
1296 /** @todo verify it's valid */
1297 if(pa_cur_ringtone) {
1298 free(pa_cur_ringtone);
1299 pa_cur_ringtone = NULL;
1302 __setting_profile_ug_key_ungrab(ad);
1307 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1311 ret_if(data == NULL);
1313 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1314 SettingProfileUG *ad = list_item->userdata;
1316 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1318 /* restore the selected check status */
1319 list_item->chk_status = state;
1320 elm_check_state_set(list_item->eo_check, state);
1322 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1323 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1324 list_item->chk_status = !state;
1325 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1328 if (list_item->chk_status) {
1329 setting_enable_genlist_item(ad->data_call_volume->item);
1330 setting_enable_genlist_item(ad->data_noti_volume->item);
1331 setting_enable_genlist_item(ad->data_media_volume->item);
1332 setting_enable_genlist_item(ad->data_touch_volume->item);
1334 setting_profile_close_all_mm_players(ad);
1335 setting_disable_genlist_item(ad->data_call_volume->item);
1336 setting_disable_genlist_item(ad->data_noti_volume->item);
1337 setting_disable_genlist_item(ad->data_media_volume->item);
1338 setting_disable_genlist_item(ad->data_touch_volume->item);
1340 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1341 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1342 list_item->chk_status = !state;
1343 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1345 if (list_item->chk_status) {
1346 setting_enable_genlist_item(ad->data_vib_volume->item);
1347 setting_enable_genlist_item(ad->data_touch_vib->item);
1349 /* Play vib if vib turns on */
1351 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1352 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1353 haptic_stop_all_effects(ad->hnd_hpt);
1354 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);
1357 SETTING_TRACE("Failed to play haptic monotone");
1359 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1360 SETTING_TRACE("ERROR haptic_stop_all_effects");
1362 setting_disable_genlist_item(ad->data_vib_volume->item);
1363 setting_disable_genlist_item(ad->data_touch_vib->item);
1366 /* additional items */
1367 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1368 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1369 list_item->chk_status = !state;
1370 elm_check_state_set(list_item->eo_check, !state);
1373 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1374 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1375 list_item->chk_status = !state;
1376 elm_check_state_set(list_item->eo_check, !state);
1385 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1390 ret_if(data == NULL);
1391 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1393 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1394 elm_genlist_item_selected_set(item, 0);
1395 Setting_GenGroupItem_Data *list_item =
1396 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1398 SettingProfileUG *ad = data;
1401 haptic_stop_all_effects(ad->hnd_hpt);
1403 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1404 if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1405 || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1406 || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1407 ad->ringtone_type = list_item->keyStr;
1408 setting_profile_sound_main_create_myfile_ug(ad);
1409 } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1410 int old_status = elm_check_state_get(list_item->eo_check);
1411 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1413 list_item->chk_status = !old_status;
1414 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1415 if (list_item->chk_status) {
1416 setting_enable_genlist_item(ad->data_call_volume->item);
1417 setting_enable_genlist_item(ad->data_noti_volume->item);
1418 setting_enable_genlist_item(ad->data_media_volume->item);
1419 setting_enable_genlist_item(ad->data_touch_volume->item);
1421 setting_profile_close_all_mm_players(ad);
1422 setting_disable_genlist_item(ad->data_call_volume->item);
1423 setting_disable_genlist_item(ad->data_noti_volume->item);
1424 setting_disable_genlist_item(ad->data_media_volume->item);
1425 setting_disable_genlist_item(ad->data_touch_volume->item);
1429 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1430 int old_status = elm_check_state_get(list_item->eo_check);
1431 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1433 list_item->chk_status = !old_status;
1434 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1435 if (list_item->chk_status) {
1436 setting_enable_genlist_item(ad->data_vib_volume->item);
1437 setting_enable_genlist_item(ad->data_touch_vib->item);
1439 /* Play vib if vib turns on */
1441 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1442 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1443 haptic_stop_all_effects(ad->hnd_hpt);
1444 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);
1447 SETTING_TRACE("Failed to play haptic monotone");
1449 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1450 SETTING_TRACE("ERROR haptic_stop_all_effects");
1452 setting_disable_genlist_item(ad->data_vib_volume->item);
1453 setting_disable_genlist_item(ad->data_touch_vib->item);
1458 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1459 int old_status = elm_check_state_get(list_item->eo_check);
1460 /* To do : set vconfkey for touch sounds */
1461 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1463 list_item->chk_status = !old_status;
1464 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1468 else if (ad->data_msg_alert_repeat == list_item
1469 || ad->data_email_alert_repeat == list_item) {
1470 bool status = !elm_genlist_item_expanded_get(item);
1471 elm_genlist_item_expanded_set(item, status);
1476 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1481 ret_if(data == NULL);
1483 double val = elm_slider_value_get(obj);
1485 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1486 SettingProfileUG *ad = list_item->userdata;
1488 if(ad->mp_ringtone == NULL)
1491 if(list_item->chk_status != (int)(val+0.5))
1493 list_item->chk_status = (int)(val+0.5);
1494 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
1495 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1500 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1505 ret_if(data == NULL);
1507 double val = elm_slider_value_get(obj);
1509 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1510 SettingProfileUG *ad = list_item->userdata;
1512 if(ad->mp_noti == NULL)
1515 if(list_item->chk_status != (int)(val+0.5))
1517 list_item->chk_status = val;
1518 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
1519 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1524 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1529 ret_if(data == NULL);
1531 double val = elm_slider_value_get(obj);
1533 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1534 SettingProfileUG *ad = list_item->userdata;
1536 if(ad->mp_media == NULL)
1538 if(list_item->chk_status != (int)(val+0.5))
1540 list_item->chk_status = val;
1541 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
1542 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1547 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1552 ret_if(data == NULL);
1554 double val = elm_slider_value_get(obj);
1556 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1557 SettingProfileUG *ad = list_item->userdata;
1559 if(ad->mp_sys == NULL)
1562 if(list_item->chk_status != (int)(val+0.5))
1564 list_item->chk_status = val;
1565 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
1566 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1571 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1576 ret_if(data == NULL);
1578 static double priv_val_db = 5.0;
1579 static int priv_val_int = 0;
1580 double val = elm_slider_value_get(obj);
1581 SETTING_TRACE("val = %f", val);
1582 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1583 SettingProfileUG *ad = list_item->userdata;
1588 value = (int)(val + 0.5); /* to sync displayed value on slider */
1589 list_item->chk_status = value;
1590 if (value != priv_val_int) {
1591 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status);
1592 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1593 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1594 haptic_stop_all_effects(ad->hnd_hpt);
1595 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1598 SETTING_TRACE("Failed to play haptic monotone");
1599 priv_val_int = value;
1606 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1612 ret_if(data == NULL);
1614 static double priv_val_db = 3.0;
1615 static int priv_val_int = 0;
1616 double val = elm_slider_value_get(obj);
1617 SETTING_TRACE("val = %f", val);
1618 Setting_GenGroupItem_Data *list_item =
1619 (Setting_GenGroupItem_Data *) data;
1620 SettingProfileUG *ad = list_item->userdata;
1625 value = (int)(val + 0.5); /* to sync displayed value on slider */
1626 list_item->chk_status = value;
1627 if (value != priv_val_int) {
1628 vconf_set_int (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status);
1629 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1630 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1631 haptic_stop_all_effects(ad->hnd_hpt);
1632 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1635 SETTING_TRACE("Failed to play haptic monotone");
1636 priv_val_int = value;