2 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <vconf-keys.h>
20 #include "setting-volume.h"
21 #include "setting_control_haptic.h"
22 #include "setting-common-sound.h"
26 static struct _volume_menu_item volume_menu_its[] = {
27 { "IDS_ST_BUTTON_MULTIMEDIA", _gl_multimedia_cb },
28 { "IDS_ST_HEADER_RINGTONES_ABB", _gl_ringtone_cb },
29 { "IDS_ST_BUTTON_NOTIFICATIONS", _gl_notification_cb },
30 { "IDS_ST_BODY_SYSTEM_M_VOLUME_ABB", _gl_system_cb },
35 static char * volume_number_str[] = {
36 "0", "1", "2", "3", "4", "5", "6", "7",
37 "8", "9", "10", "11", "12", "13", "14", "15"
42 static void _set_volumn(sound_type_e type, int volume_index, char* vconf_key);
43 static void _change_to_vibrate_mode();
44 static void vibrate_vconf_changed_cb(keynode_t * key, void * data);
45 static void sound_vconf_changed_cb(keynode_t * key, void * data);
46 static void _play_sound_all_type(int sound_type, float volume);
47 static void _update_volume_circle(Evas_Object * spiner);
50 static int is_changing_level_by_vconf = 0;
51 static int is_changed = 0;
52 static int is_myself_changing = 0;
53 static int is_myself_ringtone_changing = 0;
54 static int is_play_ringtone_sound = 0;
56 static int is_sound_changed = 0;
57 static int is_vibrate_changed = 0;
58 static int is_play_media_sound = 0;
62 void _initialize_volume()
66 is_wav_playing_vol = SOUND_STATE_STOP;
69 is_changing_level_by_vconf = 0;
70 is_myself_changing = 0;
71 is_myself_ringtone_changing = 0;
74 is_vibrate_changed = 0;
75 is_play_media_sound = 0;
77 curr_sound_type = SOUND_TYPE_RINGTONE;
79 if( is_created_player() )
81 _close_player(NULL, SOUND_TYPE_RINGTONE);
85 void _clear_volume_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
87 _clear_volume_resources();
92 static void stop_wav()
94 if( is_wav_playing_vol == SOUND_STATE_PLAY ) {
95 DBG("Setting - sound id : %d", sound_id_vol);
97 wav_player_stop(sound_id_vol);
98 is_wav_playing_vol = SOUND_STATE_STOP;
103 void _stop_all_volume_sound()
105 DBG("Setting - stop all volume sound.");
107 if( is_created_player() )
109 _close_player(NULL, curr_sound_type);
115 void _clear_volume_resources()
117 DBG("Setting - _clear_volume_resources()");
119 if( is_created_player() )
121 _close_player(NULL, curr_sound_type);
127 g_volume_spinner = NULL;
128 is_myself_changing = 0;
129 is_myself_ringtone_changing = 0;
130 is_sound_changed = is_vibrate_changed = 0;
133 static void _update_volume_popup_for_changing_sound_mode()
135 DBG("_update_volume_popup_for_changing_sound_mode is called!!");
137 int temp_volume_index = 0;
139 is_sound_changed = is_vibrate_changed = 0;
141 if( g_volume_spinner )
143 is_changing_level_by_vconf = 1;
145 int sound_mode = get_sound_mode();
147 if( sound_mode == SOUND_MODE_VIBRATE )
149 DBG("Setting - vibrate!!!");
151 if( curr_sound_type == SOUND_TYPE_RINGTONE )
155 elm_spinner_value_set(g_volume_spinner, 0);
156 _update_volume_circle(g_volume_spinner);
158 _stop_all_volume_sound();
160 edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,min", "elm");
161 edje_object_part_drag_value_set(elm_layout_edje_get(g_volume_spinner), "elm.dragable.slider", 0, 0);
162 edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,vibrate", "elm");
164 if( curr_sound_type == SOUND_TYPE_NOTIFICATION ||
165 curr_sound_type == SOUND_TYPE_SYSTEM )
167 DBG("current_sound_type!!");
169 elm_object_disabled_set(g_volume_spinner, EINA_TRUE);
172 else if( sound_mode == SOUND_MODE_SOUND )
174 DBG("Setting - Sound!!!");
176 sound_manager_get_volume(curr_sound_type, &volume_index);
178 DBG("volume_index !!!!!! -------------- %d", volume_index);
180 if( volume_index != 0 )
182 elm_spinner_value_set(g_volume_spinner, volume_index);
184 _update_volume_circle(g_volume_spinner);
186 elm_object_disabled_set(g_volume_spinner, EINA_FALSE);
191 DBG("Setting - Mute!!!");
193 if( curr_sound_type == SOUND_TYPE_NOTIFICATION ||
194 curr_sound_type == SOUND_TYPE_SYSTEM )
196 elm_object_disabled_set(g_volume_spinner, EINA_FALSE);
198 edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,min", "elm");
199 edje_object_part_drag_value_set(elm_layout_edje_get(g_volume_spinner), "elm.dragable.slider", 0, 0);
201 elm_object_disabled_set(g_volume_spinner, EINA_TRUE);
203 else if ( curr_sound_type == SOUND_TYPE_RINGTONE )
205 _stop_all_volume_sound();
207 if( curr_sound_type == SOUND_TYPE_RINGTONE )
211 elm_spinner_value_set(g_volume_spinner, 0);
212 _update_volume_circle(g_volume_spinner);
214 edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,min", "elm");
215 edje_object_part_drag_value_set(elm_layout_edje_get(g_volume_spinner), "elm.dragable.slider", 0, 0);
221 static void sound_vconf_changed_cb(keynode_t * key, void * data)
223 DBG("Setting - sound_vconf_changed_cb() is called!!");
225 if( curr_sound_type == SOUND_TYPE_MEDIA )
230 if( is_myself_changing )
232 DBG("Setting - is_myself_changing is called!!");
233 is_myself_changing = 0;
237 is_sound_changed = 1;
239 if( is_sound_changed && is_vibrate_changed )
241 _update_volume_popup_for_changing_sound_mode();
245 static void vibrate_vconf_changed_cb(keynode_t * key, void * data)
247 DBG("Setting - vibrate_vconf_changed_cb() is called!!");
249 if( curr_sound_type == SOUND_TYPE_MEDIA )
254 if( is_myself_changing )
256 DBG("Setting - is_myself_changing is called!!");
257 is_myself_changing = 0;
261 is_vibrate_changed = 1;
263 if( is_sound_changed && is_vibrate_changed )
265 _update_volume_popup_for_changing_sound_mode();
269 static void pm_state_vconf_changed_cb_for_volume(keynode_t * key, void * data)
271 DBG("Setting - pm_state_vconf_changed_cb_for_volume() is called!");
274 vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
276 if (pm_state == VCONFKEY_PM_STATE_LCDOFF)
278 DBG("Setting - LCD Off!! stop sound!");
279 _stop_all_volume_sound();
283 static void _rigngtone_volume_changed_cb(sound_type_e type, unsigned int volume, void *user_data)
285 DBG("Setting - _rigngtone_volume_changed_cb() is called!");
287 if( type != SOUND_TYPE_RINGTONE )
289 DBG("Setting - sound_type is not media!!");
293 if( is_myself_ringtone_changing )
295 is_myself_ringtone_changing = 0;
299 if( g_volume_spinner )
301 volume_index = volume;
303 DBG("Setting - Ringtone volume: %d", volume_index);
305 is_play_ringtone_sound = 1;
307 elm_spinner_value_set(g_volume_spinner, volume_index);
311 static void _media_volume_changed_cb(sound_type_e type, unsigned int volume, void *user_data)
313 DBG("Setting - _media_volume_changed_cb() is called!");
315 if( type == SOUND_TYPE_RINGTONE )
317 DBG("Setting - sound_type is ringtone!!");
321 if( is_myself_ringtone_changing )
323 is_myself_ringtone_changing = 0;
327 if( volume_index == volume )
329 DBG("Setting - Volume is same!!");
333 if( g_volume_spinner )
335 volume_index = volume;
337 DBG("Setting - Media volume: %d", volume_index);
339 is_play_media_sound = 1;
341 elm_spinner_value_set(g_volume_spinner, volume_index);
345 static void _gl_multimedia_cb(void *data, Evas_Object *obj, void *event_info)
347 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
349 _show_multimedia_popup(data, obj, event_info);
352 static void _gl_ringtone_cb(void *data, Evas_Object *obj, void *event_info)
354 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
356 _show_ringtone_popup(data, obj, event_info);
359 static void _gl_notification_cb(void *data, Evas_Object *obj, void *event_info)
361 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
363 _show_notification_popup(data, obj, event_info);
366 static void _gl_system_cb(void *data, Evas_Object *obj, void *event_info)
368 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
370 _show_system_popup(data, obj, event_info);
373 char * _gl_volume_title_get(void *data, Evas_Object *obj, const char *part)
376 Item_Data *id = data;
377 int index = id->index;
378 if( !strcmp(part, "elm.text") )
380 snprintf(buf, sizeof(buf)-1, "%s", _(volume_menu_its[index % VOLUMN_ITEM_COUNT].name));
386 static void _volumn_gl_del(void *data, Evas_Object *obj)
388 Item_Data *id = data;
393 Evas_Object* _create_volume_list(void* data)
398 DBG("%s", "_create_volume_list - appdata is null");
401 Evas_Object *genlist = NULL;
402 Elm_Object_Item *item = NULL;
403 struct _volume_menu_item *menu_its = NULL;
408 Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
409 itc->item_style = "1text";
410 itc->func.text_get = _gl_volume_title_get;
411 itc->func.del = _volumn_gl_del;
413 genlist = elm_genlist_add(ad->nf);
414 elm_genlist_block_count_set(genlist, 14);
415 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
417 menu_its = volume_menu_its;
419 for (idx = 0; idx < VOLUMN_ITEM_COUNT; idx++)
421 Item_Data *id = calloc(sizeof(Item_Data), 1);
423 item = elm_genlist_item_append(
424 genlist, // genlist object
428 ELM_GENLIST_ITEM_NONE,
429 menu_its[ idx ].func, // call back
433 elm_genlist_item_class_free(itc);
438 static void change_sound_mode(int mode)
442 case SOUND_MODE_SOUND:
443 DBG("Setting - Change sound mode to Sound!");
445 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
446 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
448 case SOUND_MODE_VIBRATE:
449 DBG("Setting - Change sound mode to Sound!");
451 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
452 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
454 case SOUND_MODE_MUTE:
455 DBG("Setting - Change sound mode to Sound!");
457 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
458 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
463 static void _set_cancel_cb(void *data, Evas_Object *obj, void *event_info)
472 elm_naviframe_item_pop(ad->nf);
476 DBG("Setting - original volume : %d", original_volume);
478 char vconf_key[512] = {0,};
480 switch(curr_sound_type)
482 case SOUND_TYPE_MEDIA:
483 strcpy(vconf_key, VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT);
485 case SOUND_TYPE_RINGTONE:
486 strcpy(vconf_key, VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT);
488 case SOUND_TYPE_SYSTEM:
489 strcpy(vconf_key, VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT);
491 case SOUND_TYPE_NOTIFICATION:
492 strcpy(vconf_key, VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT);
496 // restore original vulume value
497 _set_volumn( curr_sound_type, original_volume, vconf_key );
499 if( original_sound_mode != get_sound_mode() )
501 // restore sound mode
502 change_sound_mode(original_sound_mode);
507 if( is_created_player() )
509 _close_player(ad, curr_sound_type);
514 elm_naviframe_item_pop(ad->nf);
517 static Eina_Bool _back_volume_naviframe_cb(void *data, Elm_Object_Item *it)
521 if( is_created_player() )
523 _close_player(data, curr_sound_type);
526 g_volume_spinner = NULL;
528 is_changed = 0; // initialize flag!
532 unregister_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume);
534 if( curr_sound_type == SOUND_TYPE_RINGTONE )
536 sound_manager_unset_volume_changed_cb();
540 sound_manager_unset_volume_changed_cb();
543 /* Unregister sound mode vconf callback */
544 unregister_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb);
545 unregister_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb);
550 static void _set_volumn(sound_type_e type, int volume_index, char* vconf_key)
552 DBG("Setting - set_volume() is called!");
556 if( (type == SOUND_TYPE_RINGTONE) || (type == SOUND_TYPE_NOTIFICATION) )
558 err = sound_manager_set_volume(type, volume_index);
562 err = sound_manager_set_volume(type, volume_index);
565 // save system vulume value
566 if( err == SOUND_MANAGER_ERROR_NONE )
568 vconf_set_int(vconf_key, volume_index);
570 if( curr_sound_type == SOUND_TYPE_RINGTONE )
572 DBG("Ringtone volume is changed....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
574 if( volume_index == 0 && get_sound_mode() == SOUND_MODE_SOUND )
576 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
577 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
579 else if( volume_index > 0 && get_sound_mode() != SOUND_MODE_SOUND )
581 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
582 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
588 DBG("Setting - ringtone value is not saved... %d", volume_index);
592 static void _set_multimedia_clicked_cb(void *data, Evas_Object *obj, void *event_info)
601 elm_naviframe_item_pop(ad->nf);
605 // save multimedia vulume value
606 _set_volumn( SOUND_TYPE_MEDIA, volume_index, VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT );
610 if( is_created_player() )
612 _close_player(ad, curr_sound_type);
617 elm_naviframe_item_pop(ad->nf);
621 static void wav_player_completed_cb(int id, void *user_data)
623 DBG("wav_player_completed_cb() is called!");
625 is_wav_playing_vol = SOUND_STATE_STOP;
630 static void _play_sound_all_type(int sound_type, float volume)
632 if( is_myself_ringtone_changing )
634 DBG(" is_myself_ringtone_changing !!!!!!!!!!!");
640 const char * sound_path = NULL;
641 int temp_volume_index = 0;
643 case SOUND_TYPE_RINGTONE :
644 temp_volume_index = volume_index;
646 vconf_set_int(VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT, temp_volume_index);
647 vconf_set_int("db/setting/sound/call/rmd_ringtone_volume", temp_volume_index); // backup ringtone volume
649 sound_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
651 sprintf(buf, "%s", sound_path);
654 sprintf(buf, "%s", VCONFKEY_SETAPPL_CALL_RINGTONE_DEFAULT_PATH_STR);
657 case SOUND_TYPE_MEDIA:
658 _set_volumn(sound_type, volume_index, VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT);
660 sprintf(buf, "%s", SETTING_DEFAULT_MEDIA_TONE);
662 case SOUND_TYPE_NOTIFICATION:
663 vconf_set_int(VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT, volume_index);
665 sound_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
667 sprintf(buf, "%s", sound_path);
670 sprintf(buf, "%s", SETTING_DEFAULT_MSG_TONE);
673 case SOUND_TYPE_SYSTEM:
674 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT, volume_index);
676 sprintf(buf, "%s", SETTING_DEFAULT_SYS_TONE);
682 if( sound_type == SOUND_TYPE_RINGTONE )
684 DBG("Setting - ringtone safety volume!!");
685 DBG("Setting - real volume : %d", temp_volume_index);
687 sound_manager_set_volume(sound_type, temp_volume_index);
689 else if( sound_type == SOUND_TYPE_NOTIFICATION )
691 DBG("Setting - notification safety volume!!");
692 sound_manager_set_volume(sound_type, volume_index);
696 DBG("Setting - normal volume!!");
697 err = sound_manager_set_volume(sound_type, volume_index);
698 if( err != SOUND_MANAGER_ERROR_NONE )
700 ERR("Setting - sound_manager_set_volume() is failed! : %d", err);
704 if( sound_type == SOUND_TYPE_RINGTONE )
706 if( !is_created_player() || is_player_paused() )
708 play_sound(buf, volume, SOUND_TYPE_RINGTONE);
711 is_myself_ringtone_changing = 1;
713 else if( sound_type == SOUND_TYPE_MEDIA )
716 int err = vconf_get_int("memory/private/org.tizen.w-music-player/player_state", &music_state);
718 DBG("Setting - music state: %d, err: %d", music_state, err);
720 if( music_state == VCONFKEY_MUSIC_PLAY )
722 DBG("Setting - media is playing...");
726 if( !is_created_player() || is_player_paused() )
728 play_sound(buf, volume, SOUND_TYPE_MEDIA);
734 if( sound_type == SOUND_TYPE_RINGTONE )
736 if( is_wav_playing_vol == SOUND_STATE_STOP )
738 is_wav_playing_vol = SOUND_STATE_PLAY;
739 wav_player_start(buf, sound_type, _player_stop_cb, NULL, &sound_id_vol);
743 else if( sound_type == SOUND_TYPE_MEDIA )
745 if( is_wav_playing_vol == SOUND_STATE_STOP )
747 is_wav_playing_vol = SOUND_STATE_PLAY;
748 wav_player_start(buf, sound_type, _player_stop_cb, NULL, &sound_id_vol);
750 DBG("Setting - wav start : %d", sound_id_vol);
756 else if( sound_type == SOUND_TYPE_SYSTEM )
760 is_wav_playing_vol = SOUND_STATE_PLAY;
761 wav_player_start(buf, sound_type, NULL, NULL, &sound_id_vol);
764 else if( sound_type == SOUND_TYPE_NOTIFICATION )
766 play_sound(buf, 0.0, SOUND_TYPE_NOTIFICATION);
771 if( is_wav_playing_vol == SOUND_STATE_STOP )
773 is_wav_playing_vol = SOUND_STATE_PLAY;
774 wav_player_start(buf, sound_type, wav_player_completed_cb, NULL, &sound_id_vol);
783 static void _change_to_vibrate_mode( )
785 DBG("Setting - _change_to_vibrate_mode() is called!");
787 if(curr_sound_type == SOUND_TYPE_MEDIA)
792 if( get_sound_mode() != SOUND_MODE_VIBRATE )
794 DBG("Setting - Change sound mode to vibrate!");
796 is_myself_changing = 1;
798 _stop_all_volume_sound();
800 _start_vibration(3, SETTING_VIB_STRONG_RATE, SETTING_DEFAULT_SYSTEM_HAPTIC_PREVIEW_VIB);
802 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
803 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
807 static void _change_to_sound_mode( )
809 DBG("Setting - _change_to_sound_mode() is called!");
811 if(curr_sound_type == SOUND_TYPE_MEDIA)
816 if( get_sound_mode() != SOUND_MODE_SOUND )
818 DBG("Setting - Change sound mode to sound!");
820 is_myself_changing = 1;
822 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
823 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
827 static int sync_volume(int vconf_vol, int real_vol)
829 if( vconf_vol != real_vol )
834 static void _update_volume_circle(Evas_Object * spiner)
840 double min, max, posx;
841 int idx = (int) elm_spinner_value_get(spiner);
843 edje_object_part_geometry_get(elm_layout_edje_get(spiner), "center.image2", NULL, NULL, &w, NULL);
844 elm_spinner_min_max_get(spiner, &min, &max);
847 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,full", "elm");
849 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,default", "elm");
852 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,min", "elm");
853 if( curr_sound_type != SOUND_TYPE_MEDIA && get_sound_mode() == SOUND_MODE_VIBRATE )
855 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,vibrate", "elm");
859 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,normal", "elm");
861 posx = (double)(w/max) * idx;
863 edje_object_part_drag_value_set(elm_layout_edje_get(spiner), "elm.dragable.slider", posx, 0);
866 static void _on_volume_spinner_change_cb(void *data, Evas_Object * obj, void *event_info)
868 DBG("Setting - _on_volume_spinner_change_cb() is called!");
870 if( is_changing_level_by_vconf )
872 DBG("Setting - is_changing_level_by_vconf!!!!");
874 is_changing_level_by_vconf = 0;
878 is_changed = 1; // changed flag!!
883 int idx = (int) elm_spinner_value_get(obj);
887 DBG("Setting - volume_index : %d", volume_index);
889 if( get_sound_mode() != SOUND_MODE_MUTE )
891 if( !is_play_ringtone_sound )
893 _play_sound_all_type(curr_sound_type, 0.0);
897 is_play_ringtone_sound = 0;
901 edje_object_part_geometry_get(elm_layout_edje_get(obj), "center.image2", NULL, NULL, &w, NULL);
902 elm_spinner_min_max_get(obj, &min, &max);
904 DBG("Setting - min: %i, max: %i, idx: %d", (int)min, (int)max, idx);
908 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,full", "elm");
912 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,default", "elm");
916 if( get_sound_mode() != SOUND_MODE_VIBRATE )
918 _change_to_vibrate_mode();
920 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,min", "elm");
921 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,vibrate", "elm");
925 if( get_sound_mode() == SOUND_MODE_MUTE )
927 _change_to_vibrate_mode();
928 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,min", "elm");
929 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,vibrate", "elm");
931 elm_spinner_value_set(obj, 0);
935 _change_to_sound_mode();
936 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,normal", "elm");
941 if( get_sound_mode() == SOUND_MODE_MUTE )
947 posx = (double)(w/max) * idx;
950 edje_object_part_drag_value_set(elm_layout_edje_get(obj), "elm.dragable.slider", posx, 0);
953 static void _on_media_volume_spinner_change_cb(void *data, Evas_Object * obj, void *event_info)
955 DBG("Setting - _on_media_volume_spinner_change_cb() is called!");
957 if( curr_sound_type != SOUND_TYPE_MEDIA )
959 if( is_changing_level_by_vconf )
961 DBG("Setting - is_changing_level_by_vconf!!!!");
963 is_changing_level_by_vconf = 0;
971 int idx = (int) elm_spinner_value_get(obj);
973 is_changed = 1; // changed flag!!
977 DBG("Setting - volume_index : %d", volume_index);
979 if( curr_sound_type == SOUND_TYPE_MEDIA )
981 if( !is_play_media_sound )
983 _play_sound_all_type(curr_sound_type, 0.0);
984 is_play_media_sound = 0;
988 is_play_media_sound = 0;
993 _play_sound_all_type(curr_sound_type, 0.0);
996 edje_object_part_geometry_get(elm_layout_edje_get(obj), "center.image2", NULL, NULL, &w, NULL);
997 elm_spinner_min_max_get(obj, &min, &max);
999 DBG("Setting - min: %i, max: %i, idx: %d", (int)min, (int)max, idx);
1003 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,full", "elm");
1007 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,default", "elm");
1011 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,min", "elm");
1015 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,normal", "elm");
1019 posx = (double)(w/max) * idx;
1021 edje_object_part_drag_value_set(elm_layout_edje_get(obj), "elm.dragable.slider", posx, 0);
1024 void _show_multimedia_popup(void *data, Evas_Object *obj, void *event_info)
1033 is_play_media_sound = 0;
1035 original_sound_mode = get_sound_mode();
1037 curr_sound_type = SOUND_TYPE_MEDIA;
1039 vconf_get_int(VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT, &volume_index);
1041 int real_volume_index = 0;
1042 sound_manager_get_volume(SOUND_TYPE_MEDIA, &real_volume_index);
1044 DBG("Setting - vconf vol: %d, real vol: %d", volume_index, real_volume_index);
1047 volume_index = sync_volume(volume_index, real_volume_index);
1048 original_volume = volume_index;
1050 ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1052 ly = elm_layout_add(ad->nf);
1053 elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1054 evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1055 evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1057 Evas_Object * spinner = elm_spinner_add(ly);
1059 g_volume_spinner = spinner;
1061 elm_object_style_set(spinner, "volumestyle");
1062 elm_spinner_editable_set(spinner, EINA_TRUE);
1063 elm_spinner_min_max_set(spinner, 0, 15);
1064 elm_spinner_value_set(spinner, volume_index);
1065 _update_volume_circle(spinner);
1066 evas_object_smart_callback_add(spinner, "changed", _on_media_volume_spinner_change_cb, ly);
1067 elm_object_part_content_set(ly, "elm.icon.1", spinner);
1069 btn = elm_button_add(ly);
1070 elm_object_style_set(btn, "popup");
1071 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1072 elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1073 elm_object_part_content_set(ly, "btn1", btn);
1074 evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1076 btn = elm_button_add(ly);
1077 elm_object_style_set(btn, "popup");
1078 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1079 elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1080 elm_object_part_content_set(ly, "btn2", btn);
1081 evas_object_smart_callback_add(btn, "clicked", _set_multimedia_clicked_cb, ad);
1083 evas_object_show(ly);
1085 Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1086 "IDS_ST_BUTTON_MULTIMEDIA",
1089 elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1090 elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1092 register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1093 //register_vconf_changing(VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT ,_media_vconf_changing_cb, NULL);
1095 sound_manager_set_volume_changed_cb(_media_volume_changed_cb, NULL);
1097 /* Unregister sound mode vconf callback */
1098 register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1099 register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);
1102 static void _set_ringtone_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1104 appdata * ad = data;
1111 elm_naviframe_item_pop(ad->nf);
1115 // save ringtone vulume value
1116 _set_volumn( SOUND_TYPE_RINGTONE, volume_index, VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT );
1118 if( is_created_player() )
1120 _close_player(ad, curr_sound_type);
1125 elm_naviframe_item_pop(ad->nf);
1128 void _show_ringtone_popup(void *data, Evas_Object *obj, void *event_info)
1138 original_sound_mode = get_sound_mode();
1140 curr_sound_type = SOUND_TYPE_RINGTONE;
1142 vconf_get_int(VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT, &volume_index);
1144 DBG("Setting - Ringtone volume is %d", volume_index);
1146 sound_mode = get_sound_mode();
1148 int real_volume_index = 0;
1149 sound_manager_get_volume(SOUND_TYPE_RINGTONE, &real_volume_index);
1151 int virtual_index = real_volume_index;
1153 DBG("Setting - vconf vol: %d, real vol: %d", volume_index, virtual_index);
1155 if( sound_mode != SOUND_MODE_SOUND )
1161 volume_index = sync_volume(volume_index, virtual_index);
1162 original_volume = volume_index;
1164 ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1166 ly = elm_layout_add(ad->nf);
1167 elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1168 evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1169 evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1171 Evas_Object * spinner = elm_spinner_add(ly);
1173 g_volume_spinner = spinner;
1175 DBG("Setting- Volume: %d", volume_index);
1177 elm_object_style_set(spinner, "volumestyle");
1178 elm_spinner_editable_set(spinner, EINA_TRUE);
1179 elm_spinner_min_max_set(spinner, 0, 15);
1181 if( sound_mode != SOUND_MODE_SOUND )
1183 elm_spinner_value_set(spinner, volume_index);
1184 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,min", "elm");
1185 edje_object_part_drag_value_set(elm_layout_edje_get(spinner), "elm.dragable.slider", 0, 0);
1187 if( get_sound_mode() == SOUND_MODE_VIBRATE )
1189 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,vibrate", "elm");
1194 elm_spinner_value_set(spinner, volume_index);
1195 _update_volume_circle(spinner);
1197 evas_object_smart_callback_add(spinner, "changed", _on_volume_spinner_change_cb, ly);
1198 elm_object_part_content_set(ly, "elm.icon.1", spinner);
1200 btn = elm_button_add(ly);
1201 elm_object_style_set(btn, "popup");
1202 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1203 elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1204 elm_object_part_content_set(ly, "btn1", btn);
1205 evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1207 btn = elm_button_add(ly);
1208 elm_object_style_set(btn, "popup");
1209 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1210 elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1211 elm_object_part_content_set(ly, "btn2", btn);
1212 evas_object_smart_callback_add(btn, "clicked", _set_ringtone_clicked_cb, ad);
1214 Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1215 "IDS_ST_HEADER_RINGTONES_ABB",
1219 elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1220 elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1222 register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1224 sound_manager_set_volume_changed_cb(_rigngtone_volume_changed_cb, NULL);
1226 /* Unregister sound mode vconf callback */
1227 register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1228 register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);
1231 static void _set_notification_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1233 appdata * ad = data;
1240 elm_naviframe_item_pop(ad->nf);
1244 _set_volumn( SOUND_TYPE_NOTIFICATION, volume_index, VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT);
1246 if( is_created_player() )
1248 _close_player(ad, curr_sound_type);
1253 elm_naviframe_item_pop(ad->nf);
1256 void _show_notification_popup(void *data, Evas_Object *obj, void *event_info)
1265 original_sound_mode = get_sound_mode();
1267 curr_sound_type = SOUND_TYPE_NOTIFICATION;
1269 vconf_get_int(VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT, &volume_index);
1271 int real_volume_index = 0;
1272 sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &real_volume_index);
1274 DBG("Setting - vconf vol: %d, real vol: %d", volume_index, real_volume_index);
1277 volume_index = sync_volume(volume_index, real_volume_index);
1278 original_volume = volume_index;
1280 ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1282 ly = elm_layout_add(ad->nf);
1283 elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1284 evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1285 evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1288 Evas_Object * spinner = elm_spinner_add(ly);
1290 g_volume_spinner = spinner;
1292 elm_object_style_set(spinner, "volumestyle");
1293 elm_spinner_editable_set(spinner, EINA_TRUE);
1294 elm_spinner_min_max_set(spinner, 0, 15);
1296 if( get_sound_mode() != SOUND_MODE_SOUND )
1298 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,min", "elm");
1299 edje_object_part_drag_value_set(elm_layout_edje_get(spinner), "elm.dragable.slider", 0, 0);
1301 if( get_sound_mode() == SOUND_MODE_VIBRATE )
1303 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,vibrate", "elm");
1306 elm_object_disabled_set(spinner, EINA_TRUE);
1310 elm_spinner_value_set(spinner, volume_index);
1311 _update_volume_circle(spinner);
1313 evas_object_smart_callback_add(spinner, "changed", _on_media_volume_spinner_change_cb, ly);
1314 elm_object_part_content_set(ly, "elm.icon.1", spinner);
1316 btn = elm_button_add(ly);
1317 elm_object_style_set(btn, "popup");
1318 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1319 elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1320 elm_object_part_content_set(ly, "btn1", btn);
1321 evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1323 btn = elm_button_add(ly);
1324 elm_object_style_set(btn, "popup");
1325 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1326 elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1327 elm_object_part_content_set(ly, "btn2", btn);
1328 evas_object_smart_callback_add(btn, "clicked", _set_notification_clicked_cb, ad);
1330 Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1331 "IDS_ST_BUTTON_NOTIFICATIONS",
1334 elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1335 elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1336 register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1338 sound_manager_set_volume_changed_cb(_media_volume_changed_cb, NULL);
1340 /* Unregister sound mode vconf callback */
1341 register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1342 register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);
1345 static void _set_system_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1347 appdata * ad = data;
1354 elm_naviframe_item_pop(ad->nf);
1358 // save system vulume value
1359 _set_volumn(SOUND_TYPE_SYSTEM, volume_index, VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT);
1361 if( is_created_player() )
1363 _close_player(ad, curr_sound_type);
1368 elm_naviframe_item_pop(ad->nf);
1372 void _show_system_popup(void *data, Evas_Object *obj, void *event_info)
1381 original_sound_mode = get_sound_mode();
1383 curr_sound_type = SOUND_TYPE_SYSTEM;
1385 vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT, &volume_index);
1387 int real_volume_index = 0;
1388 sound_manager_get_volume(SOUND_TYPE_SYSTEM, &real_volume_index);
1390 DBG("Setting - vconf vol: %d, real vol: %d", volume_index, real_volume_index);
1393 volume_index = sync_volume(volume_index, real_volume_index);
1394 original_volume = volume_index;
1396 ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1398 ly = elm_layout_add(ad->nf);
1399 elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1400 evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1401 evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1403 Evas_Object * spinner = elm_spinner_add(ly);
1405 g_volume_spinner = spinner;
1407 elm_object_style_set(spinner, "volumestyle");
1408 elm_spinner_editable_set(spinner, EINA_TRUE);
1409 elm_spinner_min_max_set(spinner, 0, 15);
1411 if( get_sound_mode() != SOUND_MODE_SOUND )
1413 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,min", "elm");
1414 edje_object_part_drag_value_set(elm_layout_edje_get(spinner), "elm.dragable.slider", 0, 0);
1416 if( get_sound_mode() == SOUND_MODE_VIBRATE )
1418 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,vibrate", "elm");
1421 elm_object_disabled_set(spinner, EINA_TRUE);
1425 elm_spinner_value_set(spinner, volume_index);
1426 _update_volume_circle(spinner);
1428 evas_object_smart_callback_add(spinner, "changed", _on_media_volume_spinner_change_cb, ly);
1429 elm_object_part_content_set(ly, "elm.icon.1", spinner);
1431 btn = elm_button_add(ly);
1432 elm_object_style_set(btn, "popup");
1433 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1434 elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1435 elm_object_part_content_set(ly, "btn1", btn);
1436 evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1438 btn = elm_button_add(ly);
1439 elm_object_style_set(btn, "popup");
1440 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1441 elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1442 elm_object_part_content_set(ly, "btn2", btn);
1443 evas_object_smart_callback_add(btn, "clicked", _set_system_clicked_cb, ad);
1445 Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1446 "IDS_ST_BODY_SYSTEM_M_VOLUME_ABB",
1449 elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1450 elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1452 register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1454 sound_manager_set_volume_changed_cb(_media_volume_changed_cb, NULL);
1456 /* Unregister sound mode vconf callback */
1457 register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1458 register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);