3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 #include <setting-profile-sound-main.h>
18 #include <setting-profile.h>
20 #define VOLUME_STR _("IDS_ST_BODY_VOLUME")
21 #define RINGTONE_STR _("IDS_COM_BODY_RINGTONES")
23 #define SOUND_DESC "IDS_ST_BODY_ADJUST_VOLUME_AND_INTENSITY_FOR_SOUNDS_WHEN_MSG"
25 char *repeat_type[SETTING_SOUND_REPEAT_TYPE_LEN] = {
26 SETTING_SOUND_TEXT_REPEAT_ONCE,
27 SETTING_SOUND_TEXT_REPEAT_2MIN,
28 SETTING_SOUND_TEXT_REPEAT_5MIN,
29 SETTING_SOUND_TEXT_REPEAT_10MIN
32 static int setting_profile_sound_main_create(void *cb);
33 static int setting_profile_sound_main_destroy(void *cb);
34 static int setting_profile_sound_main_update(void *cb);
35 static int setting_profile_sound_main_cleanup(void *cb);
37 static void setting_profile_layout_ug_cb(ui_gadget_h ug,
38 enum ug_mode mode, void *priv);
40 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
41 Evas_Object *obj, void *event_info);
43 static void setting_profile_sound_main_Gendial_chk_cb(void *data,
44 Evas_Object *obj, void *event_info);
46 static void setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
47 Evas_Object *obj, void *event_info);
49 static void setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
50 Evas_Object *obj, void *event_info);
52 static void setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
53 Evas_Object *obj, void *event_info);
55 static void setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
56 Evas_Object *obj, void *event_info);
58 static void setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
59 Evas_Object *obj, void *event_info);
61 static void setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
62 Evas_Object *obj, void *event_info);
64 static void settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
65 Evas_Object *obj, void *event_info);
68 setting_view setting_view_profile_sound_main = {
69 .create = setting_profile_sound_main_create,
70 .destroy = setting_profile_sound_main_destroy,
71 .update = setting_profile_sound_main_update,
72 .cleanup = setting_profile_sound_main_cleanup,
75 /* ***************************************************
79 ***************************************************/
80 void __change_state_of_sliderbars(void *data)
83 SettingProfileUG *ad = (SettingProfileUG *) data;
86 int vibration_on = TRUE;
88 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &sound_on) == 0) {
89 if (sound_on == FALSE) {
90 /* disable slider bar of call ringtone, notification, media, and system volume */
91 if (ad->data_call_volume) {
92 setting_disable_genlist_item(ad->data_call_volume->item);
94 if (ad->data_noti_volume) {
95 setting_disable_genlist_item(ad->data_noti_volume->item);
97 if (ad->data_media_volume) {
98 setting_disable_genlist_item(ad->data_media_volume->item);
100 if (ad->data_touch_volume) {
101 setting_disable_genlist_item(ad->data_touch_volume->item);
107 (VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vibration_on) == 0) {
108 if (vibration_on == FALSE) {
109 /* disable slider bar of notification and system vibration */
110 if (ad->data_vib_volume) {
111 setting_disable_genlist_item(ad->data_vib_volume->item);
113 if (ad->data_touch_vib) {
114 setting_disable_genlist_item(ad->data_touch_vib->item);
120 void __sound_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
123 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
124 retm_if(data == NULL, "Invalid argument: data is NULL");
126 SettingProfileUG *ad = (SettingProfileUG *) data;
127 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
128 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
129 elm_genlist_item_selected_set(subitem, 0);
130 Setting_GenGroupItem_Data *data_subItem =
131 elm_object_item_data_get(subitem);
132 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
133 if (NULL == data_subItem || NULL == data_parentItem)
136 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
138 setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
139 data_subItem->chk_status, &err);
141 if (data_parentItem && data_parentItem->item) {
142 data_parentItem->sub_desc =
143 (char *)g_strdup(_(data_subItem->keyStr));
144 elm_object_item_data_set(data_parentItem->item, data_parentItem);
145 elm_genlist_item_update(data_parentItem->item);
148 if (data_parentItem->int_slp_setting_binded ==
149 INT_SLP_SETTING_CALL_ALERT_VIB) {
152 SETTING_TRACE_DEBUG("[ERROR] Can't use haptic handle.");
155 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
156 SETTING_TRACE("ERROR haptic_stop_all_effects");
159 setting_profile_play_vibration(ad,
160 setting_profile_get_call_playing_vib_by_vconf_value
161 (data_subItem->chk_status));
165 static void __sound_exp_cb(void *data, Evas_Object *obj, void *event_info)
167 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
168 retm_if(data == NULL, "Invalid argument: data is NULL");
170 SettingProfileUG *ad = (SettingProfileUG *) data;
171 Elm_Object_Item *parentItem = event_info; /* parent item */
172 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
173 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
176 if (data_parentItem == ad->data_call_alert_vib) {
177 rgd = elm_radio_add(scroller);
178 elm_radio_value_set(rgd, -1);
179 setting_create_Gendial_exp_sub_field(scroller,
180 &(ad->itc_1icon_1text_sub),
181 __sound_sub_list_sel_cb,
183 SWALLOW_Type_1RADIO, rgd,
185 "IDS_ST_BODY_VIBRATION_1",
188 setting_create_Gendial_exp_sub_field(scroller,
189 &(ad->itc_1icon_1text_sub),
190 __sound_sub_list_sel_cb,
192 SWALLOW_Type_1RADIO, rgd,
194 "IDS_ST_BODY_VIBRATION_2",
197 setting_create_Gendial_exp_sub_field(scroller,
198 &(ad->itc_1icon_1text_sub),
199 __sound_sub_list_sel_cb,
201 SWALLOW_Type_1RADIO, rgd,
203 "IDS_ST_BODY_VIBRATION_3",
206 setting_update_chk_status(rgd,
208 int_slp_setting_binded);
210 } else if (data_parentItem == ad->data_msg_alert_repeat
211 || data_parentItem == ad->data_email_alert_repeat) {
212 rgd = elm_radio_add(scroller);
213 elm_radio_value_set(rgd, -1);
214 setting_create_Gendial_exp_sub_field(scroller,
215 &(ad->itc_1icon_1text_sub),
216 __sound_sub_list_sel_cb,
218 SWALLOW_Type_1RADIO, rgd,
220 _(SETTING_SOUND_TEXT_REPEAT_ONCE),
223 setting_create_Gendial_exp_sub_field(scroller,
224 &(ad->itc_1icon_1text_sub),
225 __sound_sub_list_sel_cb,
227 SWALLOW_Type_1RADIO, rgd,
229 _(SETTING_SOUND_TEXT_REPEAT_2MIN),
232 setting_create_Gendial_exp_sub_field(scroller,
233 &(ad->itc_1icon_1text_sub),
234 __sound_sub_list_sel_cb,
236 SWALLOW_Type_1RADIO, rgd,
238 _(SETTING_SOUND_TEXT_REPEAT_5MIN),
240 setting_create_Gendial_exp_sub_field(scroller,
241 &(ad->itc_1icon_1text_sub),
242 __sound_sub_list_sel_cb,
244 SWALLOW_Type_1RADIO, rgd,
246 _(SETTING_SOUND_TEXT_REPEAT_10MIN),
249 setting_update_chk_status(rgd,
250 data_parentItem->int_slp_setting_binded);
254 static void __mm_player_msg_cb(void *user_param)
256 ret_if(user_param == NULL);
257 SettingProfileUG *ad = (SettingProfileUG *)user_param;
260 case MM_MESSAGE_END_OF_STREAM:
261 SETTING_TRACE_DEBUG("End of Stream");
262 setting_profile_close_all_mm_players(ad);
267 SETTING_TRACE("completed_cb is called.");
268 setting_profile_close_all_mm_players(ad);
271 void __ringtone_start_change_cb(void *data, Evas_Object *obj, void *event_info)
273 ret_if(data == NULL);
275 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
276 SettingProfileUG *ad = list_item->userdata;
278 ad->cur_vol_type = SETTING_VOL_TYPE_RINGTONE;
279 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_RINGTONE);
281 void __noti_start_change_cb(void *data, Evas_Object *obj, void *event_info)
283 ret_if(data == NULL);
285 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
286 SettingProfileUG *ad = list_item->userdata;
288 ad->cur_vol_type = SETTING_VOL_TYPE_NOTIFICATION;
289 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_NOTIFICATION);
291 void __media_start_change_cb(void *data, Evas_Object *obj, void *event_info)
293 ret_if(data == NULL);
295 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
296 SettingProfileUG *ad = list_item->userdata;
298 ad->cur_vol_type = SETTING_VOL_TYPE_MEDIA;
299 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_MEDIA);
301 void __system_start_change_cb(void *data, Evas_Object *obj, void *event_info)
303 ret_if(data == NULL);
305 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
306 SettingProfileUG *ad = list_item->userdata;
308 ad->cur_vol_type = SETTING_VOL_TYPE_SYSTEM;
309 setting_profile_close_other_mm_players_but_type(ad, SOUND_TYPE_SYSTEM);
312 void __noti_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
314 ret_if(data == NULL);
316 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
317 SettingProfileUG *ad = list_item->userdata;
319 ad->cur_vol_type = SETTING_VOL_TYPE_NOTI_VIB;
320 setting_profile_close_all_mm_players(ad);
323 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
324 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, MAX_COMMON_BUFFER_LEN);
325 haptic_stop_all_effects(ad->hnd_hpt);
326 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
328 SETTING_TRACE("Failed to play haptic monotone");
331 void __haptic_vib_start_change_cb(void *data, Evas_Object *obj, void *event_info)
334 ret_if(data == NULL);
336 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
337 SettingProfileUG *ad = list_item->userdata;
339 ad->cur_vol_type = SETTING_VOL_TYPE_HAPTIC_VIB;
340 setting_profile_close_all_mm_players(ad);
343 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
344 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, MAX_COMMON_BUFFER_LEN);
345 haptic_stop_all_effects(ad->hnd_hpt);
346 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
349 SETTING_TRACE("Failed to play haptic monotone");
352 void __volume_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
355 ret_if(data == NULL);
357 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
358 SettingProfileUG *ad = list_item->userdata;
360 char *pa_tone_path = NULL;
361 player_h **player = NULL;
363 double value = elm_slider_value_get(obj);
364 list_item->chk_status = (unsigned int)(value+0.5);
366 switch(ad->cur_vol_type)
368 case SETTING_VOL_TYPE_RINGTONE:
369 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
370 player = &(ad->mp_ringtone);
373 SETTING_TRACE_DEBUG("ringtone player will be created");
374 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
375 if(pa_tone_path == NULL)
377 pa_tone_path = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
379 if(vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_tone_path) < 0) {
384 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
387 SOUND_TYPE_RINGTONE);
389 case SETTING_VOL_TYPE_NOTIFICATION:
390 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
391 player = &(ad->mp_noti);
394 SETTING_TRACE_DEBUG("noti player will be created");
395 pa_tone_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
396 if(pa_tone_path == NULL)
398 pa_tone_path = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
399 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 list_item->chk_status = (int)(value + 0.5);
468 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status);
470 elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
472 elm_slider_value_set(ad->data_vib_volume->eo_check, list_item->chk_status);
475 case SETTING_VOL_TYPE_HAPTIC_VIB:
476 if(ad->data_touch_vib)
478 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
479 list_item->chk_status = (int)(value + 0.5);
480 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status);
481 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, list_item->chk_status);
483 elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
485 elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
492 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
496 static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
499 ret_if(data == NULL);
501 SettingProfileUG *ad = (SettingProfileUG *) data;
503 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
504 Setting_GenGroupItem_Data *list_item =
505 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
507 /* backup each slider's value */
508 if(list_item == ad->data_call_volume)
509 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
510 else if(list_item == ad->data_noti_volume)
511 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
512 else if(list_item == ad->data_media_volume)
513 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
514 else if(list_item == ad->data_touch_volume)
515 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
516 else if(list_item == ad->data_vib_volume)
517 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status);
518 else if(list_item == ad->data_touch_vib)
519 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status);
522 static Evas_Object *__get_main_list(void *data)
524 retv_if(data == NULL, NULL);
526 SettingProfileUG *ad = (SettingProfileUG *) data;
528 __setting_profile_ug_key_grab(ad);
530 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
531 return ad->sub_view[SETTING_PROF_VIEW_VOL];
533 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
534 elm_object_style_set(genlist, "dialogue");
535 retvm_if(genlist == NULL, NULL,
536 "Cannot set genlist object as contento of layout");
537 elm_genlist_clear(genlist); /* first to clear list */
542 Elm_Object_Item *item = elm_genlist_item_append(genlist,
543 &(ad->itc_seperator), NULL, NULL,
544 ELM_GENLIST_ITEM_NONE, NULL, NULL);
545 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
548 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
549 vconf_value = TRUE; /* default value of sound : on */
551 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
552 setting_profile_sound_main_mouse_up_Gendial_list_cb,
553 ad, SWALLOW_Type_1TOGGLE, NULL,
555 SETTING_SOUND_TEXT_SOUND, NULL,
556 setting_profile_sound_main_Gendial_chk_cb);
557 if (ad->data_sound) {
558 ad->data_sound->userdata = ad;
560 SETTING_TRACE_ERROR("ad->data_sound is NULL");
563 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
564 vconf_value = TRUE; /* default value of vibration : on */
566 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
567 setting_profile_sound_main_mouse_up_Gendial_list_cb,
568 ad, SWALLOW_Type_1TOGGLE, NULL,
570 SETTING_SOUND_TEXT_VIBRATION, NULL,
571 setting_profile_sound_main_Gendial_chk_cb);
572 if (ad->data_vibration) {
573 ad->data_vibration->userdata = ad;
575 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
578 (void)setting_create_Gendial_field_titleItem(genlist,
579 &(ad->itc_group_item),
580 "IDS_ST_BODY_VOLUME", NULL);
583 if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
584 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
585 ad->data_call_volume =
586 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
588 SWALLOW_Type_LAYOUT_SLIDER,
589 IMG_SLIDER_BTN_VOLUME01,
590 IMG_SLIDER_BTN_VOLUME02, mm_value,
591 SETTING_SOUND_TEXT_INCOMING_CALL,
593 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
594 if (ad->data_call_volume) {
595 ad->data_call_volume->win_main = ad->win_main_layout;
596 ad->data_call_volume->evas = ad->evas;
597 ad->data_call_volume->isIndicatorVisible = true;
598 ad->data_call_volume->slider_min = 0;
599 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
600 ad->data_call_volume->userdata = ad;
601 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
602 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
603 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
605 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
609 if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
610 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
612 (void)setting_create_Gendial_field_titleItem(genlist,
614 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
615 ad->data_noti_volume =
616 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
618 SWALLOW_Type_LAYOUT_SLIDER,
619 IMG_SLIDER_BTN_VOLUME01,
620 IMG_SLIDER_BTN_VOLUME02, mm_value,
621 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
623 setting_profile_sound_main_noti_sound_slider_value_change_cb);
624 if (ad->data_noti_volume) {
625 ad->data_noti_volume->win_main = ad->win_main_layout;
626 ad->data_noti_volume->evas = ad->evas;
627 ad->data_noti_volume->isIndicatorVisible = true;
628 ad->data_noti_volume->slider_min = 0;
629 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
630 ad->data_noti_volume->userdata = ad;
631 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
632 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
633 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
635 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
639 if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
640 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
642 (void)setting_create_Gendial_field_titleItem(genlist,
644 SETTING_SOUND_TEXT_MEDIA, NULL);
645 ad->data_media_volume =
646 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
648 SWALLOW_Type_LAYOUT_SLIDER,
649 IMG_SLIDER_BTN_VOLUME01,
650 IMG_SLIDER_BTN_VOLUME02, mm_value,
652 setting_profile_sound_main_media_sound_slider_value_change_cb);
653 if (ad->data_media_volume) {
654 ad->data_media_volume->win_main = ad->win_main_layout;
655 ad->data_media_volume->evas = ad->evas;
656 ad->data_media_volume->isIndicatorVisible = true;
657 ad->data_media_volume->slider_min = 0;
658 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
659 ad->data_media_volume->userdata = ad;
660 ad->data_media_volume->start_change_cb = __media_start_change_cb;
661 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
662 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
664 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
667 /* h.system volume */
668 if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
670 SETTING_TRACE_DEBUG("Fail to get volume");
671 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
673 (void)setting_create_Gendial_field_titleItem(genlist,
675 SETTING_SOUND_TEXT_SYSTEM, NULL);
676 ad->data_touch_volume =
677 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
679 SWALLOW_Type_LAYOUT_SLIDER,
680 IMG_SLIDER_BTN_VOLUME01,
681 IMG_SLIDER_BTN_VOLUME02, mm_value,
683 settings_profile_sound_main_sys_sound_slider_value_change_cb);
684 if (ad->data_touch_volume) {
685 ad->data_touch_volume->win_main = ad->win_main_layout;
686 ad->data_touch_volume->evas = ad->evas;
687 ad->data_touch_volume->isIndicatorVisible = true;
688 ad->data_touch_volume->slider_min = 0;
689 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
690 ad->data_touch_volume->userdata = ad;
691 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
692 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
693 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
695 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
698 (void)setting_create_Gendial_field_titleItem(genlist,
699 &(ad->itc_group_item),
700 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
703 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0)
704 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
706 (void)setting_create_Gendial_field_titleItem(genlist,
708 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
709 ad->data_vib_volume =
710 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
712 SWALLOW_Type_LAYOUT_SLIDER,
713 IMG_VIBRATION_ICON_01,
714 IMG_VIBRATION_ICON_02, vconf_value,
715 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
717 setting_profile_sound_main_vib_sound_slider_value_change_cb);
718 if (ad->data_vib_volume) {
719 ad->data_vib_volume->win_main = ad->win_main_layout;
720 ad->data_vib_volume->evas = ad->evas;
721 ad->data_vib_volume->isIndicatorVisible = true;
722 ad->data_vib_volume->slider_min = 0;
723 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
724 ad->data_vib_volume->userdata = ad;
725 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
726 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
727 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
729 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
734 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
735 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
737 (void)setting_create_Gendial_field_titleItem(genlist,
739 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL);
741 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
743 SWALLOW_Type_LAYOUT_SLIDER,
744 IMG_VIBRATION_ICON_01,
745 IMG_VIBRATION_ICON_02, vconf_value,
747 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
748 if (ad->data_touch_vib) {
749 ad->data_touch_vib->win_main = ad->win_main_layout;
750 ad->data_touch_vib->evas = ad->evas;
751 ad->data_touch_vib->isIndicatorVisible = true;
752 ad->data_touch_vib->slider_min = 0;
753 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
754 ad->data_touch_vib->userdata = ad;
755 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
756 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
757 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
759 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
762 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
764 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
765 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
766 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
767 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
770 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
771 vconf_value = TRUE; /* default value of touch sounds : on */
773 ad->data_touch_sounds =
774 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
775 setting_profile_sound_main_mouse_up_Gendial_list_cb,
776 ad, SWALLOW_Type_1TOGGLE, NULL,
778 "IDS_ST_BODY_TOUCH_SOUNDS",
780 setting_profile_sound_main_Gendial_chk_cb);
781 if (ad->data_touch_sounds) {
782 ad->data_touch_sounds->userdata = ad;
784 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
787 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
789 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
790 NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
791 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
792 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
794 __change_state_of_sliderbars(ad);
796 //evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
798 ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
800 return ad->sub_view[SETTING_PROF_VIEW_VOL];
803 static Evas_Object *__get_ringtone_list(void *data)
805 retv_if(data == NULL, NULL);
806 SettingProfileUG *ad = (SettingProfileUG *) data;
808 if(ad->sub_view[SETTING_PROF_VIEW_RTN])
809 return ad->sub_view[SETTING_PROF_VIEW_RTN];
811 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
812 elm_object_style_set(genlist, "dialogue");
813 retvm_if(genlist == NULL, NULL,
814 "Cannot set genlist object as contento of layout");
815 elm_genlist_clear(genlist); /* first to clear list */
816 setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
818 /* a. incoming call group */
819 (void)setting_create_Gendial_field_titleItem(genlist,
820 &(ad->itc_group_item),
821 SETTING_SOUND_TEXT_INCOMING_CALL,
826 char *sub_desc = NULL;
827 char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
828 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
830 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
831 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
833 SETTING_TRACE_DEBUG("failed to set vconf");
835 sub_desc = setting_file_basename(pa_ringtone);
837 ad->data_call_alert_tone =
838 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
839 setting_profile_sound_main_mouse_up_Gendial_list_cb,
840 ad, SWALLOW_Type_INVALID, NULL,
841 NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
843 if (ad->data_call_alert_tone) {
844 ad->data_call_alert_tone->userdata = ad;
846 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
852 /* b. notification */
853 (void)setting_create_Gendial_field_titleItem(genlist,
854 &(ad->itc_group_item),
855 SETTING_SOUND_TEXT_NOTIFICATION,
858 int repeat_value = 0;
860 /* b-1. msg ringtone */
861 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
862 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
864 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
865 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
867 SETTING_TRACE_DEBUG("failed to set vconf");
869 sub_desc = setting_file_basename(pa_ringtone);
871 ad->data_msg_alert_tone =
872 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
873 setting_profile_sound_main_mouse_up_Gendial_list_cb,
874 ad, SWALLOW_Type_INVALID, NULL,
876 SETTING_SOUND_TEXT_MSG_ALERT,
878 if (ad->data_msg_alert_tone) {
879 ad->data_msg_alert_tone->userdata = ad;
881 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
886 /* b-2. msg alert repetition */
888 (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
889 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
890 ad->data_msg_alert_repeat =
891 setting_create_Gendial_exp_parent_field(genlist,
892 &(ad->itc_2text_3_parent),
893 setting_profile_sound_main_mouse_up_Gendial_list_cb,
894 ad, SWALLOW_Type_INVALID,
895 SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
896 _(repeat_type[repeat_value]));
897 if (ad->data_msg_alert_repeat) {
898 ad->data_msg_alert_repeat->int_slp_setting_binded =
899 INT_SLP_SETTING_MSG_ALERT_REPEAT;
901 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
904 /* b-3. email ringtone */
905 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
906 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
908 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
909 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
911 SETTING_TRACE_DEBUG("failed to set vconf");
913 sub_desc = setting_file_basename(pa_ringtone);
915 ad->data_email_alert_tone =
916 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
917 setting_profile_sound_main_mouse_up_Gendial_list_cb,
918 ad, SWALLOW_Type_INVALID, NULL,
920 SETTING_SOUND_TEXT_EMAIL_ALERT,
922 if (ad->data_email_alert_tone) {
923 ad->data_email_alert_tone->userdata = ad;
925 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
930 /* b-4. email alert repetition */
932 (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
934 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
935 ad->data_email_alert_repeat =
936 setting_create_Gendial_exp_parent_field(genlist,
937 &(ad->itc_2text_3_parent),
938 setting_profile_sound_main_mouse_up_Gendial_list_cb,
939 ad, SWALLOW_Type_INVALID,
940 SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
941 _(repeat_type[repeat_value]));
942 if (ad->data_email_alert_repeat) {
943 ad->data_email_alert_repeat->int_slp_setting_binded =
944 INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
946 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
949 Elm_Object_Item *item = NULL;
950 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
951 ELM_GENLIST_ITEM_NONE, NULL, NULL);
952 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
954 ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
956 return ad->sub_view[SETTING_PROF_VIEW_RTN];
959 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
961 //appcore_measure_start();
962 retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
963 retm_if(data == NULL, "Invalid argmuent: data is NULL");
965 SettingProfileUG *ad = (SettingProfileUG *) data;
967 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
968 SETTING_TRACE("ERROR haptic_stop_all_effects");
971 setting_profile_close_all_mm_players(ad);
973 Evas_Object *sub_view = NULL;
974 Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
975 const char *tab_lable = elm_object_item_text_get(sel_item);
977 //SETTING_TRACE("tab_lable:%s", tab_lable);
978 if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
980 haptic_stop_all_effects(ad->hnd_hpt);
981 sub_view = __get_main_list(ad);
982 } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
983 sub_view = __get_ringtone_list(ad);
986 Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
987 ret_if(old_sub_view == sub_view);
992 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
993 evas_object_hide(old_sub_view);
995 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
996 evas_object_show(sub_view);
1000 static int setting_profile_sound_main_create(void *cb)
1002 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1004 SettingProfileUG *ad = (SettingProfileUG *) cb;
1006 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1007 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1010 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1011 elm_layout_theme_set(view_layout, "layout", "application", "default");
1012 evas_object_show(view_layout);
1013 ad->view_layout = view_layout;
1015 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1017 return SETTING_RETURN_FAIL;
1019 elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1020 ad->ctrl_bar = tabbar;
1021 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1022 elm_object_style_set(tabbar, "tabbar");
1023 elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
1025 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1026 IMG_CTRL_ICON_VOLUME,
1027 VOLUME_STR, __view_change_cb, ad);
1029 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1030 IMG_CTRL_ICON_RINGTONE,
1031 RINGTONE_STR, __view_change_cb, ad);
1033 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1034 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1036 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1037 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1038 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1040 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, _(KeyStr_Sounds), ug_back_btn, NULL, ad->view_layout, "tabbar");
1041 elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
1042 //elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1044 setting_view_profile_sound_main.is_create = TRUE;
1046 return SETTING_RETURN_SUCCESS;
1049 static int setting_profile_sound_main_destroy(void *cb)
1052 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1054 SettingProfileUG *ad = (SettingProfileUG *) cb;
1056 __setting_profile_ug_key_ungrab(ad);
1058 if (ad->ly_main != NULL) {
1059 //Fix the memory leak,
1060 //Manage ad->sub_view[] separately, unset first, then delete in together
1061 if (ad->view_layout)
1063 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1065 int i = SETTING_PROF_VIEW_VOL;
1066 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1068 evas_object_del(ad->sub_view[i]);
1071 evas_object_del(ad->ly_main);
1072 setting_view_profile_sound_main.is_create = FALSE;
1074 return SETTING_RETURN_SUCCESS;
1077 static int setting_profile_sound_main_update(void *cb)
1079 SETTING_TRACE_BEGIN;
1081 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1083 SettingProfileUG *ad = (SettingProfileUG *) cb;
1085 if (ad->ly_main != NULL) {
1086 evas_object_show(ad->ly_main);
1091 sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
1092 SETTING_TRACE_DEBUG("ringtone volume is %d", volume);
1093 if(ad->data_call_volume && ad->data_call_volume->eo_check)
1094 elm_slider_value_set(ad->data_call_volume->eo_check, (double)volume);
1096 return SETTING_RETURN_SUCCESS;
1099 static int setting_profile_sound_main_cleanup(void *cb)
1102 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1104 SettingProfileUG *ad = (SettingProfileUG *) cb;
1106 if (ad->ly_main != NULL) {
1107 evas_object_hide(ad->ly_main);
1110 return SETTING_RETURN_SUCCESS;
1113 /* ***************************************************
1117 ***************************************************/
1119 /* ***************************************************
1123 ***************************************************/
1125 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1130 ret_if(data == NULL);
1132 SettingProfileUG *ad = (SettingProfileUG *) data;
1134 /* close mm plaer */
1135 setting_profile_close_all_mm_players(ad);
1136 /* close vibration */
1137 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1138 SETTING_TRACE("ERROR haptic_stop_all_effects");
1142 /* Send destroy request */
1143 ug_destroy_me(ad->ug);
1148 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1150 ret_if(priv == NULL);
1151 SettingProfileUG *ad = (SettingProfileUG *) priv;
1153 __setting_profile_ug_key_grab(ad);
1157 ad->ug_loading = NULL;
1162 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1163 service_h result, void *priv)
1165 ret_if(priv == NULL);
1167 SettingProfileUG *ad = (SettingProfileUG *) priv;
1168 char *ringtone_file = NULL;
1169 char *ringtone_path = NULL;
1171 service_get_extra_data(result, "result", &ringtone_path);
1175 SETTING_TRACE("ringtone_path:%s", ringtone_path);
1177 if (ringtone_path != NULL) {
1178 ringtone_file = setting_file_basename(ringtone_path);
1179 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1181 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1183 (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1184 if (ad->data_call_alert_tone) {
1185 ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1187 elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1188 elm_genlist_item_update(ad->data_call_alert_tone->item);
1192 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1194 (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1195 if (ad->data_msg_alert_tone) {
1196 ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1198 elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1199 elm_genlist_item_update(ad->data_msg_alert_tone->item);
1203 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1205 (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1206 if (ad->data_email_alert_tone) {
1207 ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1209 elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1210 elm_genlist_item_update(ad->data_email_alert_tone->item);
1216 G_FREE(ringtone_file);
1221 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1224 ret_if(priv == NULL);
1226 SettingProfileUG *ad = (SettingProfileUG *) priv;
1229 base = (Evas_Object *) ug_get_layout(ug);
1234 case UG_MODE_FULLVIEW:
1235 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1236 //elm_win_resize_object_add(ad->win_get, base);
1237 evas_object_show(base);
1245 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1251 SETTING_TRACE("Myfiles ug is already loaded.");
1255 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1259 cbs->layout_cb = setting_profile_layout_ug_cb;
1260 cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1261 cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1262 cbs->priv = (void *)ad;
1265 if (service_create(&svc)) {
1270 const char *pa_cur_ringtone = NULL;
1271 const char *dir_path = NULL;
1272 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1273 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1274 if (pa_cur_ringtone == NULL)
1276 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
1278 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1279 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1280 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1281 if (pa_cur_ringtone == NULL)
1282 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
1283 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1284 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1285 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1286 if (pa_cur_ringtone == NULL)
1287 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
1288 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1290 SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1291 SETTING_TRACE("dir_path:\t%s", dir_path);
1293 service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1294 service_add_extra_data(svc, "path", dir_path);
1295 service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1296 service_add_extra_data(svc, "file_type", "SOUND");
1297 service_add_extra_data(svc, "drm_type", "DRM_ALL");
1299 SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1300 ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1301 if (NULL == ad->ug_loading) { /* error handling */
1302 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1305 service_destroy(svc);
1308 /** @todo verify it's valid */
1309 if(pa_cur_ringtone) {
1310 free(pa_cur_ringtone);
1311 pa_cur_ringtone = NULL;
1314 __setting_profile_ug_key_ungrab(ad);
1319 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1323 ret_if(data == NULL);
1325 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1326 SettingProfileUG *ad = list_item->userdata;
1328 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1330 /* restore the selected check status */
1331 list_item->chk_status = state;
1332 elm_check_state_set(list_item->eo_check, state);
1334 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1335 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1336 list_item->chk_status = !state;
1337 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_call_volume->item);
1342 setting_enable_genlist_item(ad->data_noti_volume->item);
1343 setting_enable_genlist_item(ad->data_media_volume->item);
1344 setting_enable_genlist_item(ad->data_touch_volume->item);
1346 setting_profile_close_all_mm_players(ad);
1347 setting_disable_genlist_item(ad->data_call_volume->item);
1348 setting_disable_genlist_item(ad->data_noti_volume->item);
1349 setting_disable_genlist_item(ad->data_media_volume->item);
1350 setting_disable_genlist_item(ad->data_touch_volume->item);
1352 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1353 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1354 list_item->chk_status = !state;
1355 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1357 if (list_item->chk_status) {
1358 setting_enable_genlist_item(ad->data_vib_volume->item);
1359 setting_enable_genlist_item(ad->data_touch_vib->item);
1361 /* Play vib if vib turns on */
1363 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1364 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1365 haptic_stop_all_effects(ad->hnd_hpt);
1366 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);
1369 SETTING_TRACE("Failed to play haptic monotone");
1371 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1372 SETTING_TRACE("ERROR haptic_stop_all_effects");
1374 setting_disable_genlist_item(ad->data_vib_volume->item);
1375 setting_disable_genlist_item(ad->data_touch_vib->item);
1378 /* additional items */
1379 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1380 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1381 list_item->chk_status = !state;
1382 elm_check_state_set(list_item->eo_check, !state);
1385 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1386 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1387 list_item->chk_status = !state;
1388 elm_check_state_set(list_item->eo_check, !state);
1397 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1402 ret_if(data == NULL);
1403 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1405 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1406 elm_genlist_item_selected_set(item, 0);
1407 Setting_GenGroupItem_Data *list_item =
1408 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1410 SettingProfileUG *ad = data;
1413 haptic_stop_all_effects(ad->hnd_hpt);
1415 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1416 if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1417 || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1418 || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1419 ad->ringtone_type = list_item->keyStr;
1420 setting_profile_sound_main_create_myfile_ug(ad);
1421 } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1422 int old_status = elm_check_state_get(list_item->eo_check);
1423 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1425 list_item->chk_status = !old_status;
1426 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1427 if (list_item->chk_status) {
1428 setting_enable_genlist_item(ad->data_call_volume->item);
1429 setting_enable_genlist_item(ad->data_noti_volume->item);
1430 setting_enable_genlist_item(ad->data_media_volume->item);
1431 setting_enable_genlist_item(ad->data_touch_volume->item);
1433 setting_profile_close_all_mm_players(ad);
1434 setting_disable_genlist_item(ad->data_call_volume->item);
1435 setting_disable_genlist_item(ad->data_noti_volume->item);
1436 setting_disable_genlist_item(ad->data_media_volume->item);
1437 setting_disable_genlist_item(ad->data_touch_volume->item);
1441 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1442 int old_status = elm_check_state_get(list_item->eo_check);
1443 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1445 list_item->chk_status = !old_status;
1446 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1447 if (list_item->chk_status) {
1448 setting_enable_genlist_item(ad->data_vib_volume->item);
1449 setting_enable_genlist_item(ad->data_touch_vib->item);
1451 /* Play vib if vib turns on */
1453 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1454 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1455 haptic_stop_all_effects(ad->hnd_hpt);
1456 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);
1459 SETTING_TRACE("Failed to play haptic monotone");
1461 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1462 SETTING_TRACE("ERROR haptic_stop_all_effects");
1464 setting_disable_genlist_item(ad->data_vib_volume->item);
1465 setting_disable_genlist_item(ad->data_touch_vib->item);
1470 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1471 int old_status = elm_check_state_get(list_item->eo_check);
1472 /* To do : set vconfkey for touch sounds */
1473 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1475 list_item->chk_status = !old_status;
1476 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1480 else if (ad->data_msg_alert_repeat == list_item
1481 || ad->data_email_alert_repeat == list_item) {
1482 bool status = !elm_genlist_item_expanded_get(item);
1483 elm_genlist_item_expanded_set(item, status);
1488 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1493 ret_if(data == NULL);
1495 double val = elm_slider_value_get(obj);
1497 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1498 SettingProfileUG *ad = list_item->userdata;
1500 if(ad->mp_ringtone == NULL)
1503 if(list_item->chk_status != (int)(val+0.5))
1505 list_item->chk_status = (int)(val+0.5);
1506 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
1507 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1512 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1517 ret_if(data == NULL);
1519 double val = elm_slider_value_get(obj);
1521 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1522 SettingProfileUG *ad = list_item->userdata;
1524 if(ad->mp_noti == NULL)
1527 if(list_item->chk_status != (int)(val+0.5))
1529 list_item->chk_status = val;
1530 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
1531 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1536 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1541 ret_if(data == NULL);
1543 double val = elm_slider_value_get(obj);
1545 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1546 SettingProfileUG *ad = list_item->userdata;
1548 if(ad->mp_media == NULL)
1550 if(list_item->chk_status != (int)(val+0.5))
1552 list_item->chk_status = val;
1553 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
1554 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1559 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1564 ret_if(data == NULL);
1566 double val = elm_slider_value_get(obj);
1568 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1569 SettingProfileUG *ad = list_item->userdata;
1571 if(ad->mp_sys == NULL)
1574 if(list_item->chk_status != (int)(val+0.5))
1576 list_item->chk_status = val;
1577 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
1578 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1583 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1587 SETTING_TRACE_BEGIN;
1589 ret_if(data == NULL);
1591 static double priv_val_db = 5.0;
1592 static int priv_val_int = 0;
1593 double val = elm_slider_value_get(obj);
1594 SETTING_TRACE("val = %f", val);
1595 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1596 SettingProfileUG *ad = list_item->userdata;
1601 value = (int)(val + 0.5); /* to sync displayed value on slider */
1602 list_item->chk_status = value;
1603 if (value != priv_val_int) {
1604 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, value);
1605 SETTING_TRACE_DEBUG("current %d", value);
1606 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1607 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1608 haptic_stop_all_effects(ad->hnd_hpt);
1609 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1612 SETTING_TRACE("Failed to play haptic monotone");
1613 priv_val_int = value;
1620 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1625 SETTING_TRACE_BEGIN;
1627 ret_if(data == NULL);
1629 static double priv_val_db = 3.0;
1630 static int priv_val_int = 0;
1631 double val = elm_slider_value_get(obj);
1632 SETTING_TRACE("val = %f", val);
1633 Setting_GenGroupItem_Data *list_item =
1634 (Setting_GenGroupItem_Data *) data;
1635 SettingProfileUG *ad = list_item->userdata;
1640 value = (int)(val + 0.5); /* to sync displayed value on slider */
1641 list_item->chk_status = value;
1642 if (value != priv_val_int) {
1643 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
1644 SETTING_TRACE_DEBUG("current %d", value);
1645 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1646 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1647 haptic_stop_all_effects(ad->hnd_hpt);
1648 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1651 SETTING_TRACE("Failed to play haptic monotone");
1652 priv_val_int = value;