3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.1 (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);
418 int ret = sound_manager_get_current_sound_type(&type);
419 SETTING_TRACE("sound_manager_get_current_sound_type() : type %d, ret = %d", type, ret);
420 if(type != SOUND_TYPE_MEDIA)
422 setting_profile_play_sound_origin(player, ad, __mm_player_msg_cb,
428 case SETTING_VOL_TYPE_SYSTEM:
429 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
430 player = &(ad->mp_sys);
433 SETTING_TRACE_DEBUG("ringtone player will be created");
435 feedback_initialize();
436 feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_SIP);
437 feedback_deinitialize();
451 void __vibration_stop_change_cb(void *data, Evas_Object *obj, void *event_info)
453 ret_if(data == NULL);
455 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
456 SettingProfileUG *ad = list_item->userdata;
458 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
459 SETTING_TRACE("ERROR haptic_stop_all_effects");
464 switch(ad->cur_vol_type)
466 case SETTING_VOL_TYPE_NOTI_VIB:
467 if(ad->data_vib_volume)
469 value = elm_slider_value_get(ad->data_vib_volume->eo_check);
470 list_item->chk_status = (int)(value + 0.5);
471 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, list_item->chk_status);
473 elm_slider_value_set(ad->data_vib_volume->eo_check, 0);
475 elm_slider_value_set(ad->data_vib_volume->eo_check, list_item->chk_status);
478 case SETTING_VOL_TYPE_HAPTIC_VIB:
479 if(ad->data_touch_vib)
481 value = elm_slider_value_get(ad->data_touch_vib->eo_check);
482 list_item->chk_status = (int)(value + 0.5);
483 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, list_item->chk_status);
484 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, list_item->chk_status);
486 elm_slider_value_set(ad->data_touch_vib->eo_check, 0);
488 elm_slider_value_set(ad->data_touch_vib->eo_check, (unsigned int)(value+0.5));
495 ad->cur_vol_type = SETTING_VOL_TYPE_MAX;
499 static void __main_list_unrealized_cb(void *data, Evas_Object *obj, void *event_info)
502 ret_if(data == NULL);
504 SettingProfileUG *ad = (SettingProfileUG *) data;
506 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
507 Setting_GenGroupItem_Data *list_item =
508 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
510 /* backup each slider's value */
511 if(list_item == ad->data_call_volume)
512 sound_manager_set_volume(SOUND_TYPE_RINGTONE, ad->data_call_volume->chk_status);
513 else if(list_item == ad->data_noti_volume)
514 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, ad->data_noti_volume->chk_status);
515 else if(list_item == ad->data_media_volume)
516 sound_manager_set_volume(SOUND_TYPE_MEDIA, ad->data_media_volume->chk_status);
517 else if(list_item == ad->data_touch_volume)
518 sound_manager_set_volume(SOUND_TYPE_SYSTEM, ad->data_touch_volume->chk_status);
519 else if(list_item == ad->data_vib_volume)
520 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, ad->data_vib_volume->chk_status);
521 else if(list_item == ad->data_touch_vib)
522 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, ad->data_touch_vib->chk_status);
525 static Evas_Object *__get_main_list(void *data)
527 retv_if(data == NULL, NULL);
529 SettingProfileUG *ad = (SettingProfileUG *) data;
531 __setting_profile_ug_key_grab(ad);
533 if(ad->sub_view[SETTING_PROF_VIEW_VOL])
534 return ad->sub_view[SETTING_PROF_VIEW_VOL];
536 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
537 elm_object_style_set(genlist, "dialogue");
538 retvm_if(genlist == NULL, NULL,
539 "Cannot set genlist object as contento of layout");
540 elm_genlist_clear(genlist); /* first to clear list */
545 Elm_Object_Item *item = elm_genlist_item_append(genlist,
546 &(ad->itc_seperator), NULL, NULL,
547 ELM_GENLIST_ITEM_NONE, NULL, NULL);
548 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
551 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &vconf_value) < 0)
552 vconf_value = TRUE; /* default value of sound : on */
554 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
555 setting_profile_sound_main_mouse_up_Gendial_list_cb,
556 ad, SWALLOW_Type_1TOGGLE, NULL,
558 SETTING_SOUND_TEXT_SOUND, NULL,
559 setting_profile_sound_main_Gendial_chk_cb);
560 if (ad->data_sound) {
561 ad->data_sound->userdata = ad;
563 SETTING_TRACE_ERROR("ad->data_sound is NULL");
566 if (vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &vconf_value) < 0)
567 vconf_value = TRUE; /* default value of vibration : on */
569 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
570 setting_profile_sound_main_mouse_up_Gendial_list_cb,
571 ad, SWALLOW_Type_1TOGGLE, NULL,
573 SETTING_SOUND_TEXT_VIBRATION, NULL,
574 setting_profile_sound_main_Gendial_chk_cb);
575 if (ad->data_vibration) {
576 ad->data_vibration->userdata = ad;
578 SETTING_TRACE_ERROR("ad->data_vibration is NULL");
581 (void)setting_create_Gendial_field_titleItem(genlist,
582 &(ad->itc_group_item),
583 "IDS_ST_BODY_VOLUME", NULL);
586 if(sound_manager_get_volume(SOUND_TYPE_RINGTONE, &mm_value) < 0)
587 mm_value = SETTING_DEFAULT_RINGTONE_VOL_INT;
588 ad->data_call_volume =
589 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
591 SWALLOW_Type_LAYOUT_SLIDER,
592 IMG_SLIDER_BTN_VOLUME01,
593 IMG_SLIDER_BTN_VOLUME02, mm_value,
594 SETTING_SOUND_TEXT_INCOMING_CALL,
596 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb);
597 if (ad->data_call_volume) {
598 ad->data_call_volume->win_main = ad->win_main_layout;
599 ad->data_call_volume->evas = ad->evas;
600 ad->data_call_volume->isIndicatorVisible = true;
601 ad->data_call_volume->slider_min = 0;
602 ad->data_call_volume->slider_max = SETTING_SOUND_VOL_MAX;
603 ad->data_call_volume->userdata = ad;
604 ad->data_call_volume->start_change_cb = __ringtone_start_change_cb;
605 ad->data_call_volume->stop_change_cb = __volume_stop_change_cb;
606 ad->data_call_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
608 SETTING_TRACE_ERROR("ad->data_call_volume is NULL");
612 if(sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &mm_value) < 0)
613 mm_value = SETTING_DEFAULT_NOTI_VOL_INT;
615 (void)setting_create_Gendial_field_titleItem(genlist,
617 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
618 ad->data_noti_volume =
619 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
621 SWALLOW_Type_LAYOUT_SLIDER,
622 IMG_SLIDER_BTN_VOLUME01,
623 IMG_SLIDER_BTN_VOLUME02, mm_value,
624 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
626 setting_profile_sound_main_noti_sound_slider_value_change_cb);
627 if (ad->data_noti_volume) {
628 ad->data_noti_volume->win_main = ad->win_main_layout;
629 ad->data_noti_volume->evas = ad->evas;
630 ad->data_noti_volume->isIndicatorVisible = true;
631 ad->data_noti_volume->slider_min = 0;
632 ad->data_noti_volume->slider_max = SETTING_SOUND_VOL_MAX;
633 ad->data_noti_volume->userdata = ad;
634 ad->data_noti_volume->start_change_cb = __noti_start_change_cb;
635 ad->data_noti_volume->stop_change_cb = __volume_stop_change_cb;
636 ad->data_noti_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
638 SETTING_TRACE_ERROR("ad->data_noti_volume is NULL");
642 if(sound_manager_get_volume(SOUND_TYPE_MEDIA, &mm_value) < 0)
643 mm_value = SETTING_DEFAULT_MEDIA_VOL_INT;
645 (void)setting_create_Gendial_field_titleItem(genlist,
647 SETTING_SOUND_TEXT_MEDIA, NULL);
648 ad->data_media_volume =
649 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
651 SWALLOW_Type_LAYOUT_SLIDER,
652 IMG_SLIDER_BTN_VOLUME01,
653 IMG_SLIDER_BTN_VOLUME02, mm_value,
655 setting_profile_sound_main_media_sound_slider_value_change_cb);
656 if (ad->data_media_volume) {
657 ad->data_media_volume->win_main = ad->win_main_layout;
658 ad->data_media_volume->evas = ad->evas;
659 ad->data_media_volume->isIndicatorVisible = true;
660 ad->data_media_volume->slider_min = 0;
661 ad->data_media_volume->slider_max = SETTING_SOUND_VOL_MAX;
662 ad->data_media_volume->userdata = ad;
663 ad->data_media_volume->start_change_cb = __media_start_change_cb;
664 ad->data_media_volume->stop_change_cb = __volume_stop_change_cb;
665 ad->data_media_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
667 SETTING_TRACE_ERROR("ad->data_media_volume is NULL");
670 /* h.system volume */
671 if(sound_manager_get_volume(SOUND_TYPE_SYSTEM, &mm_value) < 0)
673 SETTING_TRACE_DEBUG("Fail to get volume");
674 mm_value = SETTING_DEFAULT_SYSTEM_VOL_INT;
676 (void)setting_create_Gendial_field_titleItem(genlist,
678 SETTING_SOUND_TEXT_SYSTEM, NULL);
679 ad->data_touch_volume =
680 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
682 SWALLOW_Type_LAYOUT_SLIDER,
683 IMG_SLIDER_BTN_VOLUME01,
684 IMG_SLIDER_BTN_VOLUME02, mm_value,
686 settings_profile_sound_main_sys_sound_slider_value_change_cb);
687 if (ad->data_touch_volume) {
688 ad->data_touch_volume->win_main = ad->win_main_layout;
689 ad->data_touch_volume->evas = ad->evas;
690 ad->data_touch_volume->isIndicatorVisible = true;
691 ad->data_touch_volume->slider_min = 0;
692 ad->data_touch_volume->slider_max = SETTING_SOUND_VOL_MAX;
693 ad->data_touch_volume->userdata = ad;
694 ad->data_touch_volume->start_change_cb = __system_start_change_cb;
695 ad->data_touch_volume->stop_change_cb = __volume_stop_change_cb;
696 ad->data_touch_volume->belongs_to = SETTING_VOL_SOUND_GROUP;
698 SETTING_TRACE_ERROR("ad->data_touch_volume is NULL");
701 (void)setting_create_Gendial_field_titleItem(genlist,
702 &(ad->itc_group_item),
703 "IDS_ST_BODY_CALLALERTTYPE_VIBRATION", NULL);
706 if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vconf_value) < 0)
707 vconf_value = SETTING_DEFAULT_NOTI_VIB_INT; /* default value of notification vibration volume : 5 */
709 (void)setting_create_Gendial_field_titleItem(genlist,
711 SETTING_SOUND_TEXT_NOTIFICATION, NULL);
712 ad->data_vib_volume =
713 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
715 SWALLOW_Type_LAYOUT_SLIDER,
716 IMG_VIBRATION_ICON_01,
717 IMG_VIBRATION_ICON_02, vconf_value,
718 NULL,//SETTING_SOUND_TEXT_NOTIFICATION,
720 setting_profile_sound_main_vib_sound_slider_value_change_cb);
721 if (ad->data_vib_volume) {
722 ad->data_vib_volume->win_main = ad->win_main_layout;
723 ad->data_vib_volume->evas = ad->evas;
724 ad->data_vib_volume->isIndicatorVisible = true;
725 ad->data_vib_volume->slider_min = 0;
726 ad->data_vib_volume->slider_max = SETTING_VIB_VOL_MAX;
727 ad->data_vib_volume->userdata = ad;
728 ad->data_vib_volume->start_change_cb = __noti_vib_start_change_cb;
729 ad->data_vib_volume->stop_change_cb = __vibration_stop_change_cb;
730 ad->data_vib_volume->belongs_to = SETTING_VOL_VIBRATION_GROUP;
732 SETTING_TRACE_ERROR("ad->data_vib_volume is NULL");
737 (VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &vconf_value) < 0)
738 vconf_value = SETTING_DEFAULT_HAPTIC_VIB_INT; /* default value of haptic vibration volume : 3 */
740 (void)setting_create_Gendial_field_titleItem(genlist,
742 "IDS_ST_BODY_SOUNDFEEDBACK_HAPTIC_FEEDBACK", NULL);
744 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
746 SWALLOW_Type_LAYOUT_SLIDER,
747 IMG_VIBRATION_ICON_01,
748 IMG_VIBRATION_ICON_02, vconf_value,
750 setting_profile_sound_main_touchVib_sound_slider_value_change_cb);
751 if (ad->data_touch_vib) {
752 ad->data_touch_vib->win_main = ad->win_main_layout;
753 ad->data_touch_vib->evas = ad->evas;
754 ad->data_touch_vib->isIndicatorVisible = true;
755 ad->data_touch_vib->slider_min = 0;
756 ad->data_touch_vib->slider_max = SETTING_VIB_VOL_MAX;
757 ad->data_touch_vib->userdata = ad;
758 ad->data_touch_vib->start_change_cb = __haptic_vib_start_change_cb;
759 ad->data_touch_vib->stop_change_cb = __vibration_stop_change_cb;
760 ad->data_touch_vib->belongs_to = SETTING_VOL_VIBRATION_GROUP;
762 SETTING_TRACE_ERROR("ad->data_touch_vib is NULL");
765 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
767 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
768 NULL, NULL, 0, SOUND_DESC, NULL, NULL);
769 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
770 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
773 if (vconf_get_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, &vconf_value) < 0)
774 vconf_value = TRUE; /* default value of touch sounds : on */
776 ad->data_touch_sounds =
777 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
778 setting_profile_sound_main_mouse_up_Gendial_list_cb,
779 ad, SWALLOW_Type_1TOGGLE, NULL,
781 "IDS_ST_BODY_TOUCH_SOUNDS",
783 setting_profile_sound_main_Gendial_chk_cb);
784 if (ad->data_touch_sounds) {
785 ad->data_touch_sounds->userdata = ad;
787 SETTING_TRACE_ERROR("ad->data_lock_sound is NULL");
790 setting_create_Gendial_field_def(genlist, &(ad->itc_bg_1icon),
792 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
793 NULL, NULL, 0, "IDS_ST_BODY_PLAY_SOUND_WHEN_MAKING_SCREEN_SELECTION", NULL, NULL);
794 elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
795 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
797 __change_state_of_sliderbars(ad);
799 //evas_object_smart_callback_add(genlist, "unrealized", __main_list_unrealized_cb, ad);
801 ad->sub_view[SETTING_PROF_VIEW_VOL] = genlist;
803 return ad->sub_view[SETTING_PROF_VIEW_VOL];
806 static Evas_Object *__get_ringtone_list(void *data)
808 retv_if(data == NULL, NULL);
809 SettingProfileUG *ad = (SettingProfileUG *) data;
811 if(ad->sub_view[SETTING_PROF_VIEW_RTN])
812 return ad->sub_view[SETTING_PROF_VIEW_RTN];
814 Evas_Object *genlist = elm_genlist_add(ad->navi_bar);
815 elm_object_style_set(genlist, "dialogue");
816 retvm_if(genlist == NULL, NULL,
817 "Cannot set genlist object as contento of layout");
818 elm_genlist_clear(genlist); /* first to clear list */
819 setting_enable_expandable_genlist(genlist, ad, __sound_exp_cb, NULL);
821 /* a. incoming call group */
822 (void)setting_create_Gendial_field_titleItem(genlist,
823 &(ad->itc_group_item),
824 SETTING_SOUND_TEXT_INCOMING_CALL,
829 char *sub_desc = NULL;
830 char *pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
831 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
833 pa_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
834 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, pa_ringtone);
836 SETTING_TRACE_DEBUG("failed to set vconf");
838 sub_desc = setting_file_basename(pa_ringtone);
840 ad->data_call_alert_tone =
841 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
842 setting_profile_sound_main_mouse_up_Gendial_list_cb,
843 ad, SWALLOW_Type_INVALID, NULL,
844 NULL, 0, SETTING_SOUND_TEXT_CALL_RINGTONE,
846 if (ad->data_call_alert_tone) {
847 ad->data_call_alert_tone->userdata = ad;
849 SETTING_TRACE_ERROR("ad->data_call_alert_tone is NULL");
855 /* b. notification */
856 (void)setting_create_Gendial_field_titleItem(genlist,
857 &(ad->itc_group_item),
858 SETTING_SOUND_TEXT_NOTIFICATION,
861 int repeat_value = 0;
863 /* b-1. msg ringtone */
864 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
865 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
867 pa_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
868 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SETTING_DEFAULT_MSG_TONE);
870 SETTING_TRACE_DEBUG("failed to set vconf");
872 sub_desc = setting_file_basename(pa_ringtone);
874 ad->data_msg_alert_tone =
875 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
876 setting_profile_sound_main_mouse_up_Gendial_list_cb,
877 ad, SWALLOW_Type_INVALID, NULL,
879 SETTING_SOUND_TEXT_MSG_ALERT,
881 if (ad->data_msg_alert_tone) {
882 ad->data_msg_alert_tone->userdata = ad;
884 SETTING_TRACE_ERROR("ad->data_msg_alert_tone is NULL");
889 /* b-2. msg alert repetition */
891 (VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &repeat_value) != 0)
892 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
893 ad->data_msg_alert_repeat =
894 setting_create_Gendial_exp_parent_field(genlist,
895 &(ad->itc_2text_3_parent),
896 setting_profile_sound_main_mouse_up_Gendial_list_cb,
897 ad, SWALLOW_Type_INVALID,
898 SETTING_SOUND_TEXT_MSG_RINGTONE_REPEAT,
899 _(repeat_type[repeat_value]));
900 if (ad->data_msg_alert_repeat) {
901 ad->data_msg_alert_repeat->int_slp_setting_binded =
902 INT_SLP_SETTING_MSG_ALERT_REPEAT;
904 SETTING_TRACE_ERROR("ad->data_msg_alert_repeat is NULL");
907 /* b-3. email ringtone */
908 pa_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
909 if(setting_profile_check_file_exist(ad, pa_ringtone) == SETTING_RETURN_FAIL)
911 pa_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
912 vconf_ret = vconf_set_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, SETTING_DEFAULT_EMAIL_TONE);
914 SETTING_TRACE_DEBUG("failed to set vconf");
916 sub_desc = setting_file_basename(pa_ringtone);
918 ad->data_email_alert_tone =
919 setting_create_Gendial_field_def(genlist, &(ad->itc_2text_2),
920 setting_profile_sound_main_mouse_up_Gendial_list_cb,
921 ad, SWALLOW_Type_INVALID, NULL,
923 SETTING_SOUND_TEXT_EMAIL_ALERT,
925 if (ad->data_email_alert_tone) {
926 ad->data_email_alert_tone->userdata = ad;
928 SETTING_TRACE_ERROR("ad->data_email_alert_tone is NULL");
933 /* b-4. email alert repetition */
935 (VCONFKEY_SETAPPL_NOTI_EMAIL_ALERT_REP_TYPE_INT,
937 repeat_value = SETTING_DEFAULT_ALERT_REPEAT_TYPE_INT; /* default 0 : repeat once */
938 ad->data_email_alert_repeat =
939 setting_create_Gendial_exp_parent_field(genlist,
940 &(ad->itc_2text_3_parent),
941 setting_profile_sound_main_mouse_up_Gendial_list_cb,
942 ad, SWALLOW_Type_INVALID,
943 SETTING_SOUND_TEXT_EMAIL_RINGTONE_REPEAT,
944 _(repeat_type[repeat_value]));
945 if (ad->data_email_alert_repeat) {
946 ad->data_email_alert_repeat->int_slp_setting_binded =
947 INT_SLP_SETTING_EMAIL_ALERT_REPEAT;
949 SETTING_TRACE_ERROR("ad->data_email_alert_repeat is NULL");
952 Elm_Object_Item *item = NULL;
953 item = elm_genlist_item_append(genlist, &itc_bottom_seperator, NULL, NULL,
954 ELM_GENLIST_ITEM_NONE, NULL, NULL);
955 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
957 ad->sub_view[SETTING_PROF_VIEW_RTN] = genlist;
959 return ad->sub_view[SETTING_PROF_VIEW_RTN];
962 static void __view_change_cb(void *data, Evas_Object *obj, void *event_info)
964 //appcore_measure_start();
965 retm_if(event_info == NULL, "Invalid argmuent: event info is NULL");
966 retm_if(data == NULL, "Invalid argmuent: data is NULL");
968 SettingProfileUG *ad = (SettingProfileUG *) data;
970 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
971 SETTING_TRACE("ERROR haptic_stop_all_effects");
974 setting_profile_close_all_mm_players(ad);
976 Evas_Object *sub_view = NULL;
977 Elm_Object_Item *sel_item = elm_toolbar_selected_item_get(obj);
978 const char *tab_lable = elm_object_item_text_get(sel_item);
980 //SETTING_TRACE("tab_lable:%s", tab_lable);
981 if (0 == safeStrCmp(tab_lable, VOLUME_STR)) {
983 haptic_stop_all_effects(ad->hnd_hpt);
984 sub_view = __get_main_list(ad);
985 } else if (0 == safeStrCmp(tab_lable, RINGTONE_STR)) {
986 sub_view = __get_ringtone_list(ad);
989 Evas_Object *old_sub_view = elm_object_part_content_get(ad->view_layout, "elm.swallow.content");
990 ret_if(old_sub_view == sub_view);
995 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
996 evas_object_hide(old_sub_view);
998 elm_object_part_content_set(ad->view_layout, "elm.swallow.content", sub_view);
999 evas_object_show(sub_view);
1003 static int setting_profile_sound_main_create(void *cb)
1005 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1007 SettingProfileUG *ad = (SettingProfileUG *) cb;
1009 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
1010 ad->navi_bar = setting_create_navi_bar(ad->ly_main);
1013 Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
1014 elm_layout_theme_set(view_layout, "layout", "application", "default");
1015 evas_object_show(view_layout);
1016 ad->view_layout = view_layout;
1018 Evas_Object *tabbar= elm_toolbar_add(ad->navi_bar);
1020 return SETTING_RETURN_FAIL;
1022 elm_object_part_content_set(view_layout, "elm.swallow.tabbar", tabbar);
1023 ad->ctrl_bar = tabbar;
1024 elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
1025 elm_object_style_set(tabbar, "tabbar");
1026 elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
1028 ad->ctrl_item[0] = elm_toolbar_item_append(tabbar,
1029 IMG_CTRL_ICON_VOLUME,
1030 VOLUME_STR, __view_change_cb, ad);
1032 ad->ctrl_item[1] = elm_toolbar_item_append(tabbar,
1033 IMG_CTRL_ICON_RINGTONE,
1034 RINGTONE_STR, __view_change_cb, ad);
1036 elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
1037 elm_toolbar_item_selected_set(ad->ctrl_item[0], EINA_TRUE);
1039 Evas_Object *ug_back_btn = elm_button_add(ad->navi_bar);
1040 elm_object_style_set(ug_back_btn, NAVI_BACK_BUTTON_STYLE);
1041 evas_object_smart_callback_add(ug_back_btn, "clicked", setting_profile_sound_main_click_softkey_cancel_cb, ad);
1043 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navi_bar, _(KeyStr_Sounds), ug_back_btn, NULL, ad->view_layout, "tabbar");
1044 elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
1045 //elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
1047 setting_view_profile_sound_main.is_create = TRUE;
1049 return SETTING_RETURN_SUCCESS;
1052 static int setting_profile_sound_main_destroy(void *cb)
1055 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1057 SettingProfileUG *ad = (SettingProfileUG *) cb;
1059 __setting_profile_ug_key_ungrab(ad);
1061 if (ad->ly_main != NULL) {
1062 //Fix the memory leak,
1063 //Manage ad->sub_view[] separately, unset first, then delete in together
1064 if (ad->view_layout)
1066 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
1068 int i = SETTING_PROF_VIEW_VOL;
1069 for (; i < SETTING_PROF_VIEW_MAX; i++ )
1071 evas_object_del(ad->sub_view[i]);
1074 evas_object_del(ad->ly_main);
1075 setting_view_profile_sound_main.is_create = FALSE;
1077 return SETTING_RETURN_SUCCESS;
1080 static int setting_profile_sound_main_update(void *cb)
1082 SETTING_TRACE_BEGIN;
1084 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1086 SettingProfileUG *ad = (SettingProfileUG *) cb;
1088 if (ad->ly_main != NULL) {
1089 evas_object_show(ad->ly_main);
1094 sound_manager_get_volume(SOUND_TYPE_RINGTONE, &volume);
1095 SETTING_TRACE_DEBUG("ringtone volume is %d", volume);
1096 if(ad->data_call_volume && ad->data_call_volume->eo_check)
1097 elm_slider_value_set(ad->data_call_volume->eo_check, (double)volume);
1099 return SETTING_RETURN_SUCCESS;
1102 static int setting_profile_sound_main_cleanup(void *cb)
1105 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1107 SettingProfileUG *ad = (SettingProfileUG *) cb;
1109 if (ad->ly_main != NULL) {
1110 evas_object_hide(ad->ly_main);
1113 return SETTING_RETURN_SUCCESS;
1116 /* ***************************************************
1120 ***************************************************/
1122 /* ***************************************************
1126 ***************************************************/
1128 static void setting_profile_sound_main_click_softkey_cancel_cb(void *data,
1133 ret_if(data == NULL);
1135 SettingProfileUG *ad = (SettingProfileUG *) data;
1137 /* close mm plaer */
1138 setting_profile_close_all_mm_players(ad);
1139 /* close vibration */
1140 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1141 SETTING_TRACE("ERROR haptic_stop_all_effects");
1145 /* Send destroy request */
1146 ug_destroy_me(ad->ug);
1151 static void setting_profile_sound_main_destroy_myfile_ug_cb(ui_gadget_h ug, void *priv)
1153 ret_if(priv == NULL);
1154 SettingProfileUG *ad = (SettingProfileUG *) priv;
1156 __setting_profile_ug_key_grab(ad);
1160 ad->ug_loading = NULL;
1165 setting_profile_sound_main_result_myfile_ug_cb(ui_gadget_h ug,
1166 service_h result, void *priv)
1168 ret_if(priv == NULL);
1170 SettingProfileUG *ad = (SettingProfileUG *) priv;
1171 char *ringtone_file = NULL;
1172 char *ringtone_path = NULL;
1174 service_get_extra_data(result, "result", &ringtone_path);
1178 SETTING_TRACE("ringtone_path:%s", ringtone_path);
1180 if (ringtone_path != NULL) {
1181 ringtone_file = setting_file_basename(ringtone_path);
1182 SETTING_TRACE("ringtone_file:%s", ringtone_file);
1184 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1186 (VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1187 if (ad->data_call_alert_tone) {
1188 ad->data_call_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1190 elm_object_item_data_set(ad->data_call_alert_tone->item, ad->data_call_alert_tone);
1191 elm_genlist_item_update(ad->data_call_alert_tone->item);
1195 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1197 (VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, ringtone_path) == 0) {
1198 if (ad->data_msg_alert_tone) {
1199 ad->data_msg_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1201 elm_object_item_data_set(ad->data_msg_alert_tone->item, ad->data_msg_alert_tone);
1202 elm_genlist_item_update(ad->data_msg_alert_tone->item);
1206 safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1208 (VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR, ringtone_path) == 0) {
1209 if (ad->data_email_alert_tone) {
1210 ad->data_email_alert_tone->sub_desc = (char *)g_strdup(ringtone_file);
1212 elm_object_item_data_set(ad->data_email_alert_tone->item, ad->data_email_alert_tone);
1213 elm_genlist_item_update(ad->data_email_alert_tone->item);
1219 G_FREE(ringtone_file);
1224 setting_profile_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1227 ret_if(priv == NULL);
1229 SettingProfileUG *ad = (SettingProfileUG *) priv;
1232 base = (Evas_Object *) ug_get_layout(ug);
1237 case UG_MODE_FULLVIEW:
1238 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1239 //elm_win_resize_object_add(ad->win_get, base);
1240 evas_object_show(base);
1248 static void setting_profile_sound_main_create_myfile_ug(SettingProfileUG *ad)
1254 SETTING_TRACE("Myfiles ug is already loaded.");
1258 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1262 cbs->layout_cb = setting_profile_layout_ug_cb;
1263 cbs->result_cb = setting_profile_sound_main_result_myfile_ug_cb;
1264 cbs->destroy_cb = setting_profile_sound_main_destroy_myfile_ug_cb;
1265 cbs->priv = (void *)ad;
1268 if (service_create(&svc)) {
1273 const char *pa_cur_ringtone = NULL;
1274 const char *dir_path = NULL;
1275 if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_CALL_RINGTONE)) {
1276 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
1277 if (pa_cur_ringtone == NULL)
1279 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_CALL_TONE);
1281 dir_path = SETTING_PROFILE_SOUND_RINGTONES_PATH;
1282 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_MSG_ALERT)) {
1283 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
1284 if (pa_cur_ringtone == NULL)
1285 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_MSG_TONE);
1286 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1287 } else if (0 == safeStrCmp(ad->ringtone_type, SETTING_SOUND_TEXT_EMAIL_ALERT)) {
1288 pa_cur_ringtone = vconf_get_str(VCONFKEY_SETAPPL_NOTI_EMAIL_RINGTONE_PATH_STR);
1289 if (pa_cur_ringtone == NULL)
1290 pa_cur_ringtone = (char *)strdup(SETTING_DEFAULT_EMAIL_TONE);
1291 dir_path = SETTING_PROFILE_SOUND_ALERTS_PATH;
1293 SETTING_TRACE("pa_cur_ringtone:\t%s", pa_cur_ringtone);
1294 SETTING_TRACE("dir_path:\t%s", dir_path);
1296 service_add_extra_data(svc, "marked_mode", pa_cur_ringtone);
1297 service_add_extra_data(svc, "path", dir_path);
1298 service_add_extra_data(svc, "select_type", "SINGLE_FILE");
1299 service_add_extra_data(svc, "file_type", "SOUND");
1300 service_add_extra_data(svc, "drm_type", "DRM_ALL");
1302 SETTING_TRACE("ad->ug->layout:%p", (void *)ug_get_layout(ad->ug));
1303 ad->ug_loading = ug_create(ad->ug, "myfile-efl", UG_MODE_FULLVIEW, svc, cbs);
1304 if (NULL == ad->ug_loading) { /* error handling */
1305 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1308 service_destroy(svc);
1311 /** @todo verify it's valid */
1312 if(pa_cur_ringtone) {
1313 free(pa_cur_ringtone);
1314 pa_cur_ringtone = NULL;
1317 __setting_profile_ug_key_ungrab(ad);
1322 setting_profile_sound_main_Gendial_chk_cb(void *data, Evas_Object *obj,
1326 ret_if(data == NULL);
1328 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1329 SettingProfileUG *ad = list_item->userdata;
1331 int state = list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
1333 /* restore the selected check status */
1334 list_item->chk_status = state;
1335 elm_check_state_set(list_item->eo_check, state);
1337 if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1338 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, list_item->chk_status) < 0) {
1339 list_item->chk_status = !state;
1340 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1343 if (list_item->chk_status) {
1344 setting_enable_genlist_item(ad->data_call_volume->item);
1345 setting_enable_genlist_item(ad->data_noti_volume->item);
1346 setting_enable_genlist_item(ad->data_media_volume->item);
1347 setting_enable_genlist_item(ad->data_touch_volume->item);
1349 setting_profile_close_all_mm_players(ad);
1350 setting_disable_genlist_item(ad->data_call_volume->item);
1351 setting_disable_genlist_item(ad->data_noti_volume->item);
1352 setting_disable_genlist_item(ad->data_media_volume->item);
1353 setting_disable_genlist_item(ad->data_touch_volume->item);
1355 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1356 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, list_item->chk_status) < 0) {
1357 list_item->chk_status = !state;
1358 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1360 if (list_item->chk_status) {
1361 setting_enable_genlist_item(ad->data_vib_volume->item);
1362 setting_enable_genlist_item(ad->data_touch_vib->item);
1364 /* Play vib if vib turns on */
1366 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1367 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1368 haptic_stop_all_effects(ad->hnd_hpt);
1369 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);
1372 SETTING_TRACE("Failed to play haptic monotone");
1374 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1375 SETTING_TRACE("ERROR haptic_stop_all_effects");
1377 setting_disable_genlist_item(ad->data_vib_volume->item);
1378 setting_disable_genlist_item(ad->data_touch_vib->item);
1381 /* additional items */
1382 else if (!safeStrCmp(SETTING_SOUND_TEXT_LOCK_SOUND, list_item->keyStr)) {
1383 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, list_item->chk_status) < 0) {
1384 list_item->chk_status = !state;
1385 elm_check_state_set(list_item->eo_check, !state);
1388 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1389 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, list_item->chk_status) < 0) {
1390 list_item->chk_status = !state;
1391 elm_check_state_set(list_item->eo_check, !state);
1400 setting_profile_sound_main_mouse_up_Gendial_list_cb(void *data,
1405 ret_if(data == NULL);
1406 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1408 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1409 elm_genlist_item_selected_set(item, 0);
1410 Setting_GenGroupItem_Data *list_item =
1411 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1413 SettingProfileUG *ad = data;
1416 haptic_stop_all_effects(ad->hnd_hpt);
1418 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1419 if (!safeStrCmp(SETTING_SOUND_TEXT_CALL_RINGTONE, list_item->keyStr)
1420 || !safeStrCmp(SETTING_SOUND_TEXT_MSG_ALERT, list_item->keyStr)
1421 || !safeStrCmp(SETTING_SOUND_TEXT_EMAIL_ALERT, list_item->keyStr)) {
1422 ad->ringtone_type = list_item->keyStr;
1423 setting_profile_sound_main_create_myfile_ug(ad);
1424 } else if (!safeStrCmp(SETTING_SOUND_TEXT_SOUND, list_item->keyStr)) {
1425 int old_status = elm_check_state_get(list_item->eo_check);
1426 if (vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, !old_status) == 0) {
1428 list_item->chk_status = !old_status;
1429 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1430 if (list_item->chk_status) {
1431 setting_enable_genlist_item(ad->data_call_volume->item);
1432 setting_enable_genlist_item(ad->data_noti_volume->item);
1433 setting_enable_genlist_item(ad->data_media_volume->item);
1434 setting_enable_genlist_item(ad->data_touch_volume->item);
1436 setting_profile_close_all_mm_players(ad);
1437 setting_disable_genlist_item(ad->data_call_volume->item);
1438 setting_disable_genlist_item(ad->data_noti_volume->item);
1439 setting_disable_genlist_item(ad->data_media_volume->item);
1440 setting_disable_genlist_item(ad->data_touch_volume->item);
1444 } else if (!safeStrCmp(SETTING_SOUND_TEXT_VIBRATION, list_item->keyStr)) {
1445 int old_status = elm_check_state_get(list_item->eo_check);
1446 if (vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, !old_status) == 0) {
1448 list_item->chk_status = !old_status;
1449 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1450 if (list_item->chk_status) {
1451 setting_enable_genlist_item(ad->data_vib_volume->item);
1452 setting_enable_genlist_item(ad->data_touch_vib->item);
1454 /* Play vib if vib turns on */
1456 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1457 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1458 haptic_stop_all_effects(ad->hnd_hpt);
1459 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);
1462 SETTING_TRACE("Failed to play haptic monotone");
1464 if (haptic_stop_all_effects(ad->hnd_hpt) != 0) {
1465 SETTING_TRACE("ERROR haptic_stop_all_effects");
1467 setting_disable_genlist_item(ad->data_vib_volume->item);
1468 setting_disable_genlist_item(ad->data_touch_vib->item);
1473 else if (!safeStrCmp("IDS_ST_BODY_TOUCH_SOUNDS", list_item->keyStr)) {
1474 int old_status = elm_check_state_get(list_item->eo_check);
1475 /* To do : set vconfkey for touch sounds */
1476 if (vconf_set_bool(VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL, !old_status) == 0) {
1478 list_item->chk_status = !old_status;
1479 elm_check_state_set(list_item->eo_check, list_item->chk_status);
1483 else if (ad->data_msg_alert_repeat == list_item
1484 || ad->data_email_alert_repeat == list_item) {
1485 bool status = !elm_genlist_item_expanded_get(item);
1486 elm_genlist_item_expanded_set(item, status);
1491 setting_profile_sound_main_call_ringtone_sound_slider_value_change_cb(void *data,
1496 ret_if(data == NULL);
1498 double val = elm_slider_value_get(obj);
1500 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1501 SettingProfileUG *ad = list_item->userdata;
1503 if(ad->mp_ringtone == NULL)
1506 if(list_item->chk_status != (int)(val+0.5))
1508 list_item->chk_status = (int)(val+0.5);
1509 sound_manager_set_volume(SOUND_TYPE_RINGTONE, list_item->chk_status);
1510 SETTING_TRACE_DEBUG("ringtone volume is %d, %f", list_item->chk_status, val);
1515 setting_profile_sound_main_noti_sound_slider_value_change_cb(void *data,
1520 ret_if(data == NULL);
1522 double val = elm_slider_value_get(obj);
1524 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1525 SettingProfileUG *ad = list_item->userdata;
1527 if(ad->mp_noti == NULL)
1530 if(list_item->chk_status != (int)(val+0.5))
1532 list_item->chk_status = val;
1533 sound_manager_set_volume(SOUND_TYPE_NOTIFICATION, list_item->chk_status);
1534 SETTING_TRACE_DEBUG("notification volume is %d, %f", list_item->chk_status, val);
1539 setting_profile_sound_main_media_sound_slider_value_change_cb(void *data,
1544 ret_if(data == NULL);
1546 double val = elm_slider_value_get(obj);
1548 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1549 SettingProfileUG *ad = list_item->userdata;
1551 if(ad->mp_media == NULL)
1553 if(list_item->chk_status != (int)(val+0.5))
1555 list_item->chk_status = val;
1556 sound_manager_set_volume(SOUND_TYPE_MEDIA, list_item->chk_status);
1557 SETTING_TRACE_DEBUG("media volume is %d, %f", list_item->chk_status, val);
1562 settings_profile_sound_main_sys_sound_slider_value_change_cb(void *data,
1567 ret_if(data == NULL);
1569 double val = elm_slider_value_get(obj);
1571 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1572 SettingProfileUG *ad = list_item->userdata;
1574 if(ad->mp_sys == NULL)
1577 if(list_item->chk_status != (int)(val+0.5))
1579 list_item->chk_status = val;
1580 sound_manager_set_volume(SOUND_TYPE_SYSTEM, list_item->chk_status);
1581 SETTING_TRACE_DEBUG("system volume is %d, %f", list_item->chk_status, val);
1583 feedback_initialize();
1584 feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_SIP);
1585 feedback_deinitialize();
1589 setting_profile_sound_main_vib_sound_slider_value_change_cb(void *data,
1593 SETTING_TRACE_BEGIN;
1595 ret_if(data == NULL);
1597 static double priv_val_db = 5.0;
1598 static int priv_val_int = 0;
1599 double val = elm_slider_value_get(obj);
1600 SETTING_TRACE("val = %f", val);
1601 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1602 SettingProfileUG *ad = list_item->userdata;
1607 value = (int)(val + 0.5); /* to sync displayed value on slider */
1608 list_item->chk_status = value;
1609 if (value != priv_val_int) {
1610 vconf_set_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, value);
1611 SETTING_TRACE_DEBUG("current %d", value);
1612 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1613 svi_get_path(SVI_TYPE_VIB, SVI_VIB_NOTIFICATION_GENERAL, pattern_file, sizeof(pattern_file));
1614 haptic_stop_all_effects(ad->hnd_hpt);
1615 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1618 SETTING_TRACE("Failed to play haptic monotone");
1619 priv_val_int = value;
1626 setting_profile_sound_main_touchVib_sound_slider_value_change_cb(void *data,
1631 SETTING_TRACE_BEGIN;
1633 ret_if(data == NULL);
1635 static double priv_val_db = 3.0;
1636 static int priv_val_int = 0;
1637 double val = elm_slider_value_get(obj);
1638 SETTING_TRACE("val = %f", val);
1639 Setting_GenGroupItem_Data *list_item =
1640 (Setting_GenGroupItem_Data *) data;
1641 SettingProfileUG *ad = list_item->userdata;
1646 value = (int)(val + 0.5); /* to sync displayed value on slider */
1647 list_item->chk_status = value;
1648 if (value != priv_val_int) {
1649 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
1650 SETTING_TRACE_DEBUG("current %d", value);
1651 char pattern_file[MAX_COMMON_BUFFER_LEN] = {0,};
1652 svi_get_path(SVI_TYPE_VIB, SVI_VIB_OPERATION_VIBRATION, pattern_file, sizeof(pattern_file));
1653 haptic_stop_all_effects(ad->hnd_hpt);
1654 err = haptic_vibrate_file_with_detail(ad->hnd_hpt, pattern_file, 1, list_item->chk_status * SETTING_VIB_FEEDBACK_RATE, HAPTIC_PRIORITY_MIN, NULL);
1657 SETTING_TRACE("Failed to play haptic monotone");
1658 priv_val_int = value;