tizen 2.3 release
[apps/home/b2-clocksetting.git] / src / setting-volume.c
1 /*
2  * Copyright (c) 2010 Samsung Electronics, Inc.
3  * All rights reserved.
4  *
5  * This software is a confidential and proprietary information
6  * of Samsung Electronics, Inc. ("Confidential Information").  You
7  * shall not disclose such Confidential Information and shall use
8  * it only in accordance with the terms of the license agreement
9  * you entered into with Samsung Electronics.
10  */
11 #include <vconf.h>
12 #include <vconf-keys.h>
13
14 #include "setting-volume.h"
15 #include "setting_control_haptic.h"
16 #include "setting-common-sound.h"
17 #include "util.h"
18
19
20 static struct _volume_menu_item volume_menu_its[] = {
21         { "IDS_ST_BUTTON_MULTIMEDIA",                   _gl_multimedia_cb   },
22         { "IDS_ST_HEADER_RINGTONES_ABB",                _gl_ringtone_cb     },
23         { "IDS_ST_BUTTON_NOTIFICATIONS",                _gl_notification_cb },
24         { "IDS_ST_BODY_SYSTEM_M_VOLUME_ABB",    _gl_system_cb       },
25         { NULL, NULL }
26 };
27
28 #if 0
29 static char * volume_number_str[] = {
30                 "0", "1", "2", "3", "4", "5", "6", "7",
31                 "8", "9", "10", "11", "12", "13", "14", "15"
32 };
33 #endif
34
35
36 static void _set_volumn(sound_type_e type, int volume_index, char* vconf_key);
37 static void _change_to_vibrate_mode();
38 static void vibrate_vconf_changed_cb(keynode_t * key, void * data);
39 static void sound_vconf_changed_cb(keynode_t * key, void * data);
40 static void _play_sound_all_type(int sound_type, float volume);
41 static void _update_volume_circle(Evas_Object * spiner);
42
43
44 static int is_changing_level_by_vconf = 0;
45 static int is_changed = 0;
46 static int is_myself_changing = 0;
47 static int is_myself_ringtone_changing = 0;
48 static int is_play_ringtone_sound = 0;
49
50 static int is_sound_changed = 0;
51 static int is_vibrate_changed = 0;
52 static int is_play_media_sound = 0;
53
54
55
56 void _initialize_volume()
57 {
58         volume_index = 0;
59         original_volume = 0;
60         is_wav_playing_vol = SOUND_STATE_STOP;
61         sound_id_vol = -1;
62         is_changed = 0;
63         is_changing_level_by_vconf = 0;
64         is_myself_changing = 0;
65         is_myself_ringtone_changing = 0;
66
67         is_sound_changed = 0;
68         is_vibrate_changed = 0;
69         is_play_media_sound = 0;
70
71         curr_sound_type = SOUND_TYPE_RINGTONE;
72
73         if( is_created_player() )
74         {
75                 _close_player(NULL, SOUND_TYPE_RINGTONE);
76         }
77 }
78
79 void _clear_volume_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
80 {
81         _clear_volume_resources();
82
83         return;
84 }
85
86 static void stop_wav()
87 {
88         if( is_wav_playing_vol == SOUND_STATE_PLAY ) {
89                 DBG("Setting - sound id : %d", sound_id_vol);
90
91                 wav_player_stop(sound_id_vol);
92                 is_wav_playing_vol = SOUND_STATE_STOP;
93                 sound_id_vol = -1;
94         }
95 }
96
97 void _stop_all_volume_sound()
98 {
99         DBG("Setting - stop all volume sound.");
100
101         if( is_created_player() )
102         {
103                 _close_player(NULL, curr_sound_type);
104         }
105
106         stop_wav();
107 }
108
109 void _clear_volume_resources()
110 {
111         DBG("Setting - _clear_volume_resources()");
112
113         if( is_created_player() )
114         {
115                 _close_player(NULL, curr_sound_type);
116         }
117
118         stop_wav();
119
120         g_ad = NULL;
121         g_volume_spinner = NULL;
122         is_myself_changing = 0;
123         is_myself_ringtone_changing = 0;
124         is_sound_changed = is_vibrate_changed = 0;
125 }
126
127 static void _update_volume_popup_for_changing_sound_mode()
128 {
129         DBG("_update_volume_popup_for_changing_sound_mode is called!!");
130
131         int temp_volume_index = 0;
132
133         is_sound_changed = is_vibrate_changed = 0;
134
135         if( g_volume_spinner )
136         {
137                 is_changing_level_by_vconf = 1;
138
139                 int sound_mode = get_sound_mode();
140
141                 if( sound_mode == SOUND_MODE_VIBRATE )
142                 {
143                         DBG("Setting - vibrate!!!");
144
145                         if( curr_sound_type == SOUND_TYPE_RINGTONE )
146                         {
147                                 volume_index = 0;
148                         }
149                         elm_spinner_value_set(g_volume_spinner, 0);
150                         _update_volume_circle(g_volume_spinner);
151
152                         _stop_all_volume_sound();
153
154                         edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,min", "elm");
155                         edje_object_part_drag_value_set(elm_layout_edje_get(g_volume_spinner), "elm.dragable.slider", 0, 0);
156                         edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,vibrate", "elm");
157
158                         if( curr_sound_type == SOUND_TYPE_NOTIFICATION ||
159                                         curr_sound_type == SOUND_TYPE_SYSTEM )
160                         {
161                                 DBG("current_sound_type!!");
162
163                                 elm_object_disabled_set(g_volume_spinner, EINA_TRUE);
164                         }
165                 }
166                 else if( sound_mode == SOUND_MODE_SOUND )
167                 {
168                         DBG("Setting - Sound!!!");
169
170                         sound_manager_get_volume(curr_sound_type, &volume_index);
171
172                         DBG("volume_index !!!!!!  --------------   %d", volume_index);
173
174                         if( volume_index != 0 )
175                         {
176                                 elm_spinner_value_set(g_volume_spinner, volume_index);
177
178                                 _update_volume_circle(g_volume_spinner);
179
180                                 elm_object_disabled_set(g_volume_spinner, EINA_FALSE);
181                         }
182                 }
183                 else
184                 {
185                         DBG("Setting - Mute!!!");
186
187                         if( curr_sound_type == SOUND_TYPE_NOTIFICATION ||
188                                         curr_sound_type == SOUND_TYPE_SYSTEM )
189                         {
190                                 elm_object_disabled_set(g_volume_spinner, EINA_FALSE);
191
192                                 edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,min", "elm");
193                                 edje_object_part_drag_value_set(elm_layout_edje_get(g_volume_spinner), "elm.dragable.slider", 0, 0);
194
195                                 elm_object_disabled_set(g_volume_spinner, EINA_TRUE);
196                         }
197                         else if ( curr_sound_type == SOUND_TYPE_RINGTONE )
198                         {
199                                 _stop_all_volume_sound();
200
201                                 if( curr_sound_type == SOUND_TYPE_RINGTONE )
202                                 {
203                                         volume_index = 0;
204                                 }
205                                 elm_spinner_value_set(g_volume_spinner, 0);
206                                 _update_volume_circle(g_volume_spinner);
207
208                                 edje_object_signal_emit(elm_layout_edje_get(g_volume_spinner), "elm,spinner,min", "elm");
209                                 edje_object_part_drag_value_set(elm_layout_edje_get(g_volume_spinner), "elm.dragable.slider", 0, 0);
210                         }
211                 }
212         }
213 }
214
215 static void sound_vconf_changed_cb(keynode_t * key, void * data)
216 {
217         DBG("Setting - sound_vconf_changed_cb() is called!!");
218
219         if( curr_sound_type == SOUND_TYPE_MEDIA )
220         {
221                 return;
222         }
223
224         if( is_myself_changing )
225         {
226                 DBG("Setting - is_myself_changing is called!!");
227                 is_myself_changing = 0;
228                 return;
229         }
230
231         is_sound_changed = 1;
232
233         if( is_sound_changed && is_vibrate_changed )
234         {
235                 _update_volume_popup_for_changing_sound_mode();
236         }
237 }
238
239 static void vibrate_vconf_changed_cb(keynode_t * key, void * data)
240 {
241         DBG("Setting - vibrate_vconf_changed_cb() is called!!");
242
243         if( curr_sound_type == SOUND_TYPE_MEDIA )
244         {
245                 return;
246         }
247
248         if( is_myself_changing )
249         {
250                 DBG("Setting - is_myself_changing is called!!");
251                 is_myself_changing = 0;
252                 return;
253         }
254
255         is_vibrate_changed = 1;
256
257         if( is_sound_changed && is_vibrate_changed )
258         {
259                 _update_volume_popup_for_changing_sound_mode();
260         }
261 }
262
263 static void pm_state_vconf_changed_cb_for_volume(keynode_t * key, void * data)
264 {
265         DBG("Setting - pm_state_vconf_changed_cb_for_volume() is called!");
266
267         int pm_state = 0;
268         vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
269
270         if (pm_state == VCONFKEY_PM_STATE_LCDOFF)
271         {
272                 DBG("Setting - LCD Off!! stop sound!");
273                 _stop_all_volume_sound();
274         }
275 }
276
277 static void _rigngtone_volume_changed_cb(sound_type_e type, unsigned int volume, void *user_data)
278 {
279         DBG("Setting - _rigngtone_volume_changed_cb() is called!");
280
281         if( type != SOUND_TYPE_RINGTONE )
282         {
283                 DBG("Setting - sound_type is not media!!");
284                 return;
285         }
286
287         if( is_myself_ringtone_changing )
288         {
289                 is_myself_ringtone_changing = 0;
290                 return;
291         }
292
293         if( g_volume_spinner )
294         {
295                 volume_index = volume;
296
297                 DBG("Setting - Ringtone volume: %d", volume_index);
298
299                 is_play_ringtone_sound = 1;
300
301                 elm_spinner_value_set(g_volume_spinner, volume_index);
302         }
303 }
304
305 static void _media_volume_changed_cb(sound_type_e type, unsigned int volume, void *user_data)
306 {
307         DBG("Setting - _media_volume_changed_cb() is called!");
308
309         if( type == SOUND_TYPE_RINGTONE )
310         {
311                 DBG("Setting - sound_type is ringtone!!");
312                 return;
313         }
314
315         if( is_myself_ringtone_changing )
316         {
317                 is_myself_ringtone_changing = 0;
318                 return;
319         }
320
321         if( volume_index == volume )
322         {
323                 DBG("Setting - Volume is same!!");
324                 return;
325         }
326
327         if( g_volume_spinner )
328         {
329                 volume_index = volume;
330
331                 DBG("Setting - Media volume: %d", volume_index);
332
333                 is_play_media_sound = 1;
334
335                 elm_spinner_value_set(g_volume_spinner, volume_index);
336         }
337 }
338
339 static void _gl_multimedia_cb(void *data, Evas_Object *obj, void *event_info)
340 {
341         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
342
343         _show_multimedia_popup(data, obj, event_info);
344 }
345
346 static void _gl_ringtone_cb(void *data, Evas_Object *obj, void *event_info)
347 {
348         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
349
350         _show_ringtone_popup(data, obj, event_info);
351 }
352
353 static void _gl_notification_cb(void *data, Evas_Object *obj, void *event_info)
354 {
355         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
356
357         _show_notification_popup(data, obj, event_info);
358 }
359
360 static void _gl_system_cb(void *data, Evas_Object *obj, void *event_info)
361 {
362         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
363
364         _show_system_popup(data, obj, event_info);
365 }
366
367 char * _gl_volume_title_get(void *data, Evas_Object *obj, const char *part)
368 {
369         char buf[1024];
370         Item_Data *id = data;
371         int index = id->index;
372         if( !strcmp(part, "elm.text") )
373         {
374                 snprintf(buf, sizeof(buf)-1, "%s", _(volume_menu_its[index % VOLUMN_ITEM_COUNT].name));
375                 index++;
376         }
377         return strdup(buf);
378 }
379
380 static void _volumn_gl_del(void *data, Evas_Object *obj)
381 {
382         Item_Data *id = data;
383         if (id)
384                 free(id);
385 }
386
387 Evas_Object* _create_volume_list(void* data)
388 {
389         appdata *ad = data;
390         if( ad == NULL )
391         {
392                 DBG("%s", "_create_volume_list - appdata is null");
393                 return NULL;
394         }
395         Evas_Object *genlist  = NULL;
396         Elm_Object_Item *item = NULL;
397         struct _volume_menu_item *menu_its = NULL;
398         int idx = 0;
399
400         g_ad = ad;
401
402         Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
403         itc->item_style = "1text";
404         itc->func.text_get = _gl_volume_title_get;
405         itc->func.del = _volumn_gl_del;
406
407         genlist = elm_genlist_add(ad->nf);
408         elm_genlist_block_count_set(genlist, 14);
409         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
410
411         menu_its = volume_menu_its;
412
413         for (idx = 0; idx < VOLUMN_ITEM_COUNT; idx++)
414         {
415                 Item_Data *id = calloc(sizeof(Item_Data), 1);
416                 id->index = idx;
417                 item = elm_genlist_item_append(
418                                 genlist,                        // genlist object
419                                 itc,                            // item class
420                                 id,                         // data
421                                 NULL,
422                                 ELM_GENLIST_ITEM_NONE,
423                                 menu_its[ idx ].func,   // call back
424                                 ad);
425                 id->item = item;
426         }
427         elm_genlist_item_class_free(itc);
428
429         return genlist;
430 }
431
432 static void change_sound_mode(int mode)
433 {
434         switch(mode)
435         {
436         case SOUND_MODE_SOUND:
437                 DBG("Setting - Change sound mode to Sound!");
438
439                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
440                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
441                 break;
442         case SOUND_MODE_VIBRATE:
443                 DBG("Setting - Change sound mode to Sound!");
444
445                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
446                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
447                 break;
448         case SOUND_MODE_MUTE:
449                 DBG("Setting - Change sound mode to Sound!");
450
451                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
452                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
453                 break;
454         }
455 }
456
457 static void _set_cancel_cb(void *data, Evas_Object *obj, void *event_info)
458 {
459         appdata * ad = data;
460         if( ad == NULL )
461                 return;
462
463         if(!is_changed)
464         {
465                 DBG("not changed");
466                 elm_naviframe_item_pop(ad->nf);
467                 return;
468         }
469
470         DBG("Setting - original volume : %d", original_volume);
471
472         char vconf_key[512] = {0,};
473
474         switch(curr_sound_type)
475         {
476         case SOUND_TYPE_MEDIA:
477                 strcpy(vconf_key, VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT);
478                 break;
479         case SOUND_TYPE_RINGTONE:
480                 strcpy(vconf_key, VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT);
481                 break;
482         case SOUND_TYPE_SYSTEM:
483                 strcpy(vconf_key, VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT);
484                 break;
485         case SOUND_TYPE_NOTIFICATION:
486                 strcpy(vconf_key, VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT);
487                 break;
488         }
489
490         // restore original vulume value
491         _set_volumn( curr_sound_type, original_volume, vconf_key );
492
493         if( original_sound_mode != get_sound_mode() )
494         {
495                 // restore sound mode
496                 change_sound_mode(original_sound_mode);
497         }
498
499         original_volume = 0;
500
501         if( is_created_player() )
502         {
503                 _close_player(ad, curr_sound_type);
504         }
505
506         stop_wav();
507
508         elm_naviframe_item_pop(ad->nf);
509 }
510
511 static Eina_Bool _back_volume_naviframe_cb(void *data, Elm_Object_Item *it)
512 {
513         original_volume = 0;
514
515         if( is_created_player() )
516         {
517                 _close_player(data, curr_sound_type);
518         }
519
520         g_volume_spinner = NULL;
521
522         is_changed = 0;         // initialize flag!
523
524         stop_wav();
525
526         unregister_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume);
527
528         if( curr_sound_type == SOUND_TYPE_RINGTONE )
529         {
530                 sound_manager_unset_volume_changed_cb();
531         }
532         else
533         {
534                 sound_manager_unset_volume_changed_cb();
535         }
536
537         /* Unregister sound mode vconf callback */
538         unregister_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb);
539         unregister_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb);
540
541         return EINA_TRUE;
542 }
543
544 static void _set_volumn(sound_type_e type, int volume_index, char* vconf_key)
545 {
546         DBG("Setting - set_volume() is called!");
547
548         int err = -1;
549
550         if( (type == SOUND_TYPE_RINGTONE) || (type == SOUND_TYPE_NOTIFICATION) )
551         {
552                 err = sound_manager_set_volume(type, volume_index);
553         }
554         else
555         {
556                 err = sound_manager_set_volume(type, volume_index);
557         }
558
559         // save system vulume value
560         if( err == SOUND_MANAGER_ERROR_NONE )
561         {
562                 vconf_set_int(vconf_key, volume_index);
563
564                 if( curr_sound_type == SOUND_TYPE_RINGTONE )
565                 {
566                         DBG("Ringtone volume is changed....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
567
568                         if( volume_index == 0 && get_sound_mode() == SOUND_MODE_SOUND )
569                         {
570                                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
571                                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
572                         }
573                         else if( volume_index > 0 && get_sound_mode() != SOUND_MODE_SOUND )
574                         {
575                                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
576                                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
577                         }
578                 }
579         }
580         else
581         {
582                 DBG("Setting - ringtone value is not saved...   %d", volume_index);
583         }
584 }
585
586 static void _set_multimedia_clicked_cb(void *data, Evas_Object *obj, void *event_info)
587 {
588         appdata * ad = data;
589         if( ad == NULL )
590                 return;
591
592         if(!is_changed)
593         {
594                 DBG("not changed");
595                 elm_naviframe_item_pop(ad->nf);
596                 return;
597         }
598
599         // save multimedia vulume value
600         _set_volumn( SOUND_TYPE_MEDIA, volume_index, VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT );
601
602         original_volume = 0;
603
604         if( is_created_player() )
605         {
606                 _close_player(ad, curr_sound_type);
607         }
608
609         stop_wav();
610
611         elm_naviframe_item_pop(ad->nf);
612 }
613
614 static void _play_sound_all_type(int sound_type, float volume)
615 {
616         if( is_myself_ringtone_changing )
617         {
618                 DBG(" is_myself_ringtone_changing !!!!!!!!!!!");
619
620                 return;
621         }
622
623         char buf[1024];
624         const char * sound_path = NULL;
625         int temp_volume_index = 0;
626         switch(sound_type) {
627         case SOUND_TYPE_RINGTONE :
628                 temp_volume_index = volume_index;
629
630                 vconf_set_int(VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT, temp_volume_index);
631                 vconf_set_int("db/setting/sound/call/rmd_ringtone_volume", temp_volume_index);  // backup ringtone volume
632
633                 sound_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
634                 if( sound_path ) {
635                         sprintf(buf, "%s", sound_path);
636                 }
637                 else {
638                         sprintf(buf, "%s", VCONFKEY_SETAPPL_CALL_RINGTONE_DEFAULT_PATH_STR);
639                 }
640                 break;
641         case SOUND_TYPE_MEDIA:
642                 _set_volumn(sound_type, volume_index, VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT);
643
644                 sprintf(buf, "%s", SETTING_DEFAULT_MEDIA_TONE);
645                 break;
646         case SOUND_TYPE_NOTIFICATION:
647                 vconf_set_int(VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT, volume_index);
648
649                 sound_path = vconf_get_str(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR);
650                 if( sound_path ) {
651                         sprintf(buf, "%s", sound_path);
652                 }
653                 else {
654                         sprintf(buf, "%s", SETTING_DEFAULT_MSG_TONE);
655                 }
656                 break;
657         case SOUND_TYPE_SYSTEM:
658                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT, volume_index);
659
660                 sprintf(buf, "%s", SETTING_DEFAULT_SYS_TONE);
661                 break;
662         }
663
664         int err = -1;
665
666         if( sound_type == SOUND_TYPE_RINGTONE )
667         {
668                 DBG("Setting - ringtone safety volume!!");
669                 DBG("Setting - real volume : %d", temp_volume_index);
670
671                 sound_manager_set_volume(sound_type, temp_volume_index);
672         }
673         else if( sound_type == SOUND_TYPE_NOTIFICATION )
674         {
675                 DBG("Setting - notification safety volume!!");
676                 sound_manager_set_volume(sound_type, temp_volume_index);
677         }
678         else
679         {
680                 DBG("Setting - normal volume!!");
681                 err = sound_manager_set_volume(sound_type, volume_index);
682                 if( err != SOUND_MANAGER_ERROR_NONE )
683                 {
684                         ERR("Setting - sound_manager_set_volume() is failed! : %d", err);
685                 }
686         }
687
688         if( sound_type == SOUND_TYPE_RINGTONE )
689         {
690                 if( !is_created_player() || is_player_paused() )
691                 {
692                         play_sound(buf, volume, SOUND_TYPE_RINGTONE);
693                         set_looping(TRUE);
694                 }
695                 is_myself_ringtone_changing = 1;
696         }
697         else if( sound_type == SOUND_TYPE_MEDIA )
698         {
699                 int music_state = 0;
700                 int err = vconf_get_int("memory/private/org.tizen.w-music-player/player_state", &music_state);
701
702                 DBG("Setting - music state: %d, err: %d", music_state, err);
703
704                 if( music_state == VCONFKEY_MUSIC_PLAY )
705                 {
706                         DBG("Setting - media is playing...");
707                         return;
708                 }
709
710                 if( !is_created_player() || is_player_paused() )
711                 {
712                         play_sound(buf, volume, SOUND_TYPE_MEDIA);
713                         set_looping(TRUE);
714                 }
715         }
716
717         else if( sound_type == SOUND_TYPE_SYSTEM )
718         {
719                 stop_wav();
720
721                 is_wav_playing_vol = SOUND_STATE_PLAY;
722                 wav_player_start(buf, sound_type, NULL, NULL, &sound_id_vol);
723                 return;
724         }
725         else if( sound_type == SOUND_TYPE_NOTIFICATION )
726         {
727                 play_sound(buf, 0.0, SOUND_TYPE_NOTIFICATION);
728                 set_looping(FALSE);
729
730                 return;
731         }
732 }
733
734 static void _change_to_vibrate_mode( )
735 {
736         DBG("Setting - _change_to_vibrate_mode() is called!");
737
738         if(curr_sound_type == SOUND_TYPE_MEDIA)
739         {
740                 return;
741         }
742
743         if( get_sound_mode() != SOUND_MODE_VIBRATE )
744         {
745                 DBG("Setting - Change sound mode to vibrate!");
746
747                 is_myself_changing = 1;
748
749                 _stop_all_volume_sound();
750
751                 _start_vibration(3, SETTING_VIB_STRONG_RATE, SETTING_DEFAULT_SYSTEM_HAPTIC_PREVIEW_VIB);
752
753                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, FALSE);
754                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, TRUE);
755         }
756 }
757
758 static void _change_to_sound_mode( )
759 {
760         DBG("Setting - _change_to_sound_mode() is called!");
761
762         if(curr_sound_type == SOUND_TYPE_MEDIA)
763         {
764                 return;
765         }
766
767         if( get_sound_mode() != SOUND_MODE_SOUND )
768         {
769                 DBG("Setting - Change sound mode to sound!");
770
771                 is_myself_changing = 1;
772
773                 vconf_set_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, TRUE);
774                 vconf_set_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, FALSE);
775         }
776 }
777
778 static int sync_volume(int vconf_vol, int real_vol)
779 {
780         if( vconf_vol != real_vol )
781                 return real_vol;
782         return vconf_vol;
783 }
784
785 static void _update_volume_circle(Evas_Object * spiner)
786 {
787         if(spiner == NULL)
788                 return;
789
790         Evas_Coord w;
791         double min, max, posx;
792         int idx = (int) elm_spinner_value_get(spiner);
793
794         edje_object_part_geometry_get(elm_layout_edje_get(spiner), "center.image2", NULL, NULL, &w, NULL);
795         elm_spinner_min_max_get(spiner, &min, &max);
796
797         if(idx == max)
798                 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,full", "elm");
799         if(idx < max)
800                 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,default", "elm");
801         if(idx == min)
802         {
803                 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,min", "elm");
804                 if( curr_sound_type != SOUND_TYPE_MEDIA && get_sound_mode() == SOUND_MODE_VIBRATE )
805                 {
806                         edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,vibrate", "elm");
807                 }
808         }
809         if(idx > min)
810                 edje_object_signal_emit(elm_layout_edje_get(spiner), "elm,spinner,normal", "elm");
811
812         posx = (double)(w/max) * idx;
813
814         edje_object_part_drag_value_set(elm_layout_edje_get(spiner), "elm.dragable.slider", posx, 0);
815 }
816
817 static void _on_volume_spinner_change_cb(void *data, Evas_Object * obj, void *event_info)
818 {
819         DBG("Setting - _on_volume_spinner_change_cb() is called!");
820
821         if( is_changing_level_by_vconf )
822         {
823                 DBG("Setting - is_changing_level_by_vconf!!!!");
824
825                 is_changing_level_by_vconf = 0;
826                 return;
827         }
828
829         is_changed = 1; // changed flag!!
830
831         Evas_Coord w;
832
833         double min, max;
834         int idx = (int) elm_spinner_value_get(obj);
835
836         volume_index = idx;
837
838         DBG("Setting - volume_index : %d", volume_index);
839
840         if( get_sound_mode() != SOUND_MODE_MUTE )
841         {
842                 if( !is_play_ringtone_sound )
843                 {
844                         _play_sound_all_type(curr_sound_type, 0.0);
845                 }
846                 else
847                 {
848                         is_play_ringtone_sound = 0;
849                 }
850         }
851
852         edje_object_part_geometry_get(elm_layout_edje_get(obj), "center.image2", NULL, NULL, &w, NULL);
853         elm_spinner_min_max_get(obj, &min, &max);
854
855         DBG("Setting - min: %i, max: %i, idx: %d", (int)min, (int)max, idx);
856
857         if(idx == max)
858         {
859                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,full", "elm");
860         }
861         if(idx < max)
862         {
863                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,default", "elm");
864         }
865         if(idx == min)
866         {
867                 if( get_sound_mode() != SOUND_MODE_VIBRATE )
868                 {
869                         _change_to_vibrate_mode();
870                 }
871                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,min", "elm");
872                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,vibrate", "elm");
873         }
874         if(idx > min)
875         {
876                 if( get_sound_mode() == SOUND_MODE_MUTE )
877                 {
878                         _change_to_vibrate_mode();
879                         edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,min", "elm");
880                         edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,vibrate", "elm");
881
882                         elm_spinner_value_set(obj, 0);
883                 }
884                 else
885                 {
886                         _change_to_sound_mode();
887                         edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,normal", "elm");
888                 }
889         }
890
891         double posx = 0.0;
892         if( get_sound_mode() == SOUND_MODE_MUTE )
893         {
894                 posx = 0;
895         }
896         else
897         {
898                 posx = (double)(w/max) * idx;
899         }
900
901         edje_object_part_drag_value_set(elm_layout_edje_get(obj), "elm.dragable.slider", posx, 0);
902 }
903
904 static void _on_media_volume_spinner_change_cb(void *data, Evas_Object * obj, void *event_info)
905 {
906         DBG("Setting - _on_media_volume_spinner_change_cb() is called!");
907
908         if( curr_sound_type != SOUND_TYPE_MEDIA )
909         {
910                 if( is_changing_level_by_vconf )
911                 {
912                         DBG("Setting - is_changing_level_by_vconf!!!!");
913
914                         is_changing_level_by_vconf = 0;
915                         return;
916                 }
917         }
918
919         Evas_Coord w;
920
921         double min, max;
922         int idx = (int) elm_spinner_value_get(obj);
923
924         is_changed = 1;         // changed flag!!
925
926         volume_index = idx;
927
928         DBG("Setting - volume_index : %d", volume_index);
929
930         if( curr_sound_type == SOUND_TYPE_MEDIA )
931         {
932                 if( !is_play_media_sound )
933                 {
934                         _play_sound_all_type(curr_sound_type, 0.0);
935                         is_play_media_sound = 0;
936                 }
937                 else
938                 {
939                         is_play_media_sound = 0;
940                 }
941         }
942         else
943         {
944                 _play_sound_all_type(curr_sound_type, 0.0);
945         }
946
947         edje_object_part_geometry_get(elm_layout_edje_get(obj), "center.image2", NULL, NULL, &w, NULL);
948         elm_spinner_min_max_get(obj, &min, &max);
949
950         DBG("Setting - min: %i, max: %i, idx: %d", (int)min, (int)max, idx);
951
952         if(idx == max)
953         {
954                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,full", "elm");
955         }
956         if(idx < max)
957         {
958                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,default", "elm");
959         }
960         if(idx == min)
961         {
962                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,min", "elm");
963         }
964         if(idx > min)
965         {
966                 edje_object_signal_emit(elm_layout_edje_get(obj), "elm,spinner,normal", "elm");
967         }
968
969         double posx = 0.0;
970         posx = (double)(w/max) * idx;
971
972         edje_object_part_drag_value_set(elm_layout_edje_get(obj), "elm.dragable.slider", posx, 0);
973 }
974
975 void _show_multimedia_popup(void *data, Evas_Object *obj, void *event_info)
976 {
977         Evas_Object *ly;
978         Evas_Object *btn;
979         appdata *ad = data;
980
981         if( ad == NULL )
982                 return;
983
984         is_play_media_sound = 0;
985
986         original_sound_mode = get_sound_mode();
987
988         curr_sound_type = SOUND_TYPE_MEDIA;
989
990         vconf_get_int(VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT, &volume_index);
991
992         int real_volume_index = 0;
993         sound_manager_get_volume(SOUND_TYPE_MEDIA, &real_volume_index);
994
995         DBG("Setting - vconf vol: %d, real vol: %d", volume_index, real_volume_index);
996
997         // sync volume
998         volume_index = sync_volume(volume_index, real_volume_index);
999         original_volume = volume_index;
1000
1001         ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1002
1003
1004         ly = elm_layout_add(ad->nf);
1005         elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1006         evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1007         evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1008
1009         int w,h;
1010         ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
1011         DBG("    ----> width : %d,  height : %d ", w, h);
1012         if ( w==360 && h == 480)
1013         {
1014                 DBG("make long height !!!!!!!!!!!!!!!!!");
1015                 //elm_object_signal_emit(layout, "set,popup,long", "elm.icon.1");       
1016                 elm_object_signal_emit(ly, "set,popup,long", "*");      
1017         }
1018
1019
1020         Evas_Object * spinner = elm_spinner_add(ly);
1021
1022         g_volume_spinner = spinner;
1023
1024         //elm_object_style_set(spinner, "volumestyle");
1025         elm_spinner_editable_set(spinner, EINA_FALSE);
1026         elm_spinner_min_max_set(spinner, 0, 15);
1027         elm_spinner_value_set(spinner, volume_index);
1028         _update_volume_circle(spinner);
1029         evas_object_smart_callback_add(spinner, "changed", _on_media_volume_spinner_change_cb, ly);
1030         elm_object_part_content_set(ly, "elm.icon.1", spinner);
1031
1032         //ea_theme_object_color_set(spinner, "B101");
1033         //ea_theme_object_color_set(spinner, "B011");
1034         //ea_theme_object_color_set(spinner, "AO033");
1035         //evas_object_color_set(spinner, 255, 0, 0, 255);
1036 //      evas_object_color_set(spinner, 31, 23, 17, 255 );
1037         //ea_theme_object_color_set(spinner, "AO017");
1038         //ea_theme_object_color_set(spinner, "B101");
1039         //ea_theme_object_color_set(spinner, "AO011");
1040         //ea_theme_object_color_replace(spinner, "AO011", "B101");
1041
1042         btn = elm_button_add(ly);
1043         elm_object_style_set(btn, "popup");
1044         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1045         elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1046         elm_object_part_content_set(ly, "btn1", btn);
1047         evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1048
1049         btn = elm_button_add(ly);
1050         elm_object_style_set(btn, "popup");
1051         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1052         elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1053         elm_object_part_content_set(ly, "btn2", btn);
1054         evas_object_smart_callback_add(btn, "clicked", _set_multimedia_clicked_cb, ad);
1055
1056         Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1057                                                                                                            "IDS_ST_BUTTON_MULTIMEDIA",
1058                                                                                                            NULL, NULL,
1059                                                                                                            ly, NULL );
1060         elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1061         elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1062
1063         register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1064         //register_vconf_changing(VCONFKEY_SETAPPL_MEDIA_SOUND_VOLUME_INT ,_media_vconf_changing_cb, NULL);
1065
1066         sound_manager_set_volume_changed_cb(_media_volume_changed_cb, NULL);
1067
1068         /* Unregister sound mode vconf callback */
1069         register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1070         register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);
1071 }
1072
1073 static void _set_ringtone_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1074 {
1075         appdata * ad = data;
1076         if( ad == NULL )
1077                 return;
1078
1079         if(!is_changed)
1080         {
1081                 DBG("not changed");
1082                 elm_naviframe_item_pop(ad->nf);
1083                 return;
1084         }
1085
1086         // save ringtone vulume value
1087         _set_volumn( SOUND_TYPE_RINGTONE, volume_index, VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT );
1088
1089         if( is_created_player() )
1090         {
1091                 _close_player(ad, curr_sound_type);
1092         }
1093
1094         stop_wav();
1095
1096         elm_naviframe_item_pop(ad->nf);
1097 }
1098
1099 void _show_ringtone_popup(void *data, Evas_Object *obj, void *event_info)
1100 {
1101         Evas_Object *ly;
1102         Evas_Object *btn;
1103         appdata *ad = data;
1104         int sound_mode;
1105
1106         if( ad == NULL )
1107                 return;
1108
1109         original_sound_mode = get_sound_mode();
1110
1111         curr_sound_type = SOUND_TYPE_RINGTONE;
1112
1113         vconf_get_int(VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT, &volume_index);
1114
1115         DBG("Setting - Ringtone volume is %d", volume_index);
1116
1117         sound_mode = get_sound_mode();
1118
1119         int real_volume_index = 0;
1120         sound_manager_get_volume(SOUND_TYPE_RINGTONE, &real_volume_index);
1121
1122         int virtual_index = real_volume_index;
1123
1124         DBG("Setting - vconf vol: %d, real vol: %d", volume_index, virtual_index);
1125
1126         if( sound_mode != SOUND_MODE_SOUND )
1127         {
1128                 virtual_index = 0;
1129         }
1130
1131         // sync volume
1132         volume_index = sync_volume(volume_index, virtual_index);
1133         original_volume = real_volume_index;
1134
1135         ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1136
1137         ly = elm_layout_add(ad->nf);
1138         elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1139         evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1140         evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1141
1142         int w,h;
1143         ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
1144         DBG("    ----> width : %d,  height : %d ", w, h);
1145         if ( w==360 && h == 480)
1146         {
1147                 DBG("make long height !!!!!!!!!!!!!!!!!");
1148                 //elm_object_signal_emit(layout, "set,popup,long", "elm.icon.1");       
1149                 elm_object_signal_emit(ly, "set,popup,long", "*");      
1150         }
1151
1152
1153         Evas_Object * spinner = elm_spinner_add(ly);
1154
1155         g_volume_spinner = spinner;
1156
1157         DBG("Setting- Volume: %d", volume_index);
1158
1159         //elm_object_style_set(spinner, "volumestyle");
1160         elm_spinner_editable_set(spinner, EINA_FALSE);
1161         elm_spinner_min_max_set(spinner, 0, 15);
1162
1163         if( sound_mode != SOUND_MODE_SOUND )
1164         {
1165                 elm_spinner_value_set(spinner, volume_index);
1166                 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,min", "elm");
1167                 edje_object_part_drag_value_set(elm_layout_edje_get(spinner), "elm.dragable.slider", 0, 0);
1168
1169                 if( get_sound_mode() == SOUND_MODE_VIBRATE )
1170                 {
1171                         edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,vibrate", "elm");
1172                 }
1173         }
1174         else
1175         {
1176                 elm_spinner_value_set(spinner, volume_index);
1177                 _update_volume_circle(spinner);
1178         }
1179         evas_object_smart_callback_add(spinner, "changed", _on_volume_spinner_change_cb, ly);
1180         elm_object_part_content_set(ly, "elm.icon.1", spinner);
1181
1182         btn = elm_button_add(ly);
1183         elm_object_style_set(btn, "popup");
1184         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1185         elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1186         elm_object_part_content_set(ly, "btn1", btn);
1187         evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1188
1189         btn = elm_button_add(ly);
1190         elm_object_style_set(btn, "popup");
1191         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1192         elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1193         elm_object_part_content_set(ly, "btn2", btn);
1194         evas_object_smart_callback_add(btn, "clicked", _set_ringtone_clicked_cb, ad);
1195
1196         Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1197                                                                                                            "IDS_ST_HEADER_RINGTONES_ABB",
1198                                                                                                            NULL, NULL,
1199                                                                                                            ly, NULL );
1200
1201         elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1202         elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1203
1204         register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1205
1206         sound_manager_set_volume_changed_cb(_rigngtone_volume_changed_cb, NULL);
1207
1208         /* Unregister sound mode vconf callback */
1209         register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1210         register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);
1211 }
1212
1213 static void _set_notification_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1214 {
1215         appdata * ad = data;
1216         if( ad == NULL )
1217                 return;
1218
1219         if(!is_changed)
1220         {
1221                 DBG("not changed");
1222                 elm_naviframe_item_pop(ad->nf);
1223                 return;
1224         }
1225
1226         _set_volumn( SOUND_TYPE_NOTIFICATION, volume_index, VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT);
1227
1228         if( is_created_player() )
1229         {
1230                 _close_player(ad, curr_sound_type);
1231         }
1232
1233         stop_wav();
1234
1235         elm_naviframe_item_pop(ad->nf);
1236 }
1237
1238 void _show_notification_popup(void *data, Evas_Object *obj, void *event_info)
1239 {
1240         Evas_Object *ly;
1241         Evas_Object *btn;
1242         appdata *ad = data;
1243
1244         if( ad == NULL )
1245                 return;
1246
1247         original_sound_mode = get_sound_mode();
1248
1249         curr_sound_type = SOUND_TYPE_NOTIFICATION;
1250
1251         vconf_get_int(VCONFKEY_SETAPPL_NOTI_SOUND_VOLUME_INT, &volume_index);
1252
1253         int real_volume_index = 0;
1254         sound_manager_get_volume(SOUND_TYPE_NOTIFICATION, &real_volume_index);
1255
1256         DBG("Setting - vconf vol: %d, real vol: %d", volume_index, real_volume_index);
1257
1258         // sync volume
1259         volume_index = sync_volume(volume_index, real_volume_index);
1260         original_volume = volume_index;
1261
1262         ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1263
1264         ly = elm_layout_add(ad->nf);
1265         elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1266         evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1267         evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1268
1269         int w,h;
1270         ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
1271         DBG("    ----> width : %d,  height : %d ", w, h);
1272         if ( w==360 && h == 480)
1273         {
1274                 DBG("make long height !!!!!!!!!!!!!!!!!");
1275                 //elm_object_signal_emit(layout, "set,popup,long", "elm.icon.1");       
1276                 elm_object_signal_emit(ly, "set,popup,long", "*");      
1277         }
1278
1279         Evas_Object * spinner = elm_spinner_add(ly);
1280
1281         g_volume_spinner = spinner;
1282
1283         //elm_object_style_set(spinner, "volumestyle");
1284         elm_spinner_editable_set(spinner, EINA_FALSE);
1285         elm_spinner_min_max_set(spinner, 0, 15);
1286
1287         if( get_sound_mode() != SOUND_MODE_SOUND )
1288         {
1289                 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,min", "elm");
1290                 edje_object_part_drag_value_set(elm_layout_edje_get(spinner), "elm.dragable.slider", 0, 0);
1291
1292                 if( get_sound_mode() == SOUND_MODE_VIBRATE )
1293                 {
1294                         edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,vibrate", "elm");
1295                 }
1296
1297                 elm_object_disabled_set(spinner, EINA_TRUE);
1298         }
1299         else
1300         {
1301                 elm_spinner_value_set(spinner, volume_index);
1302                 _update_volume_circle(spinner);
1303         }
1304         evas_object_smart_callback_add(spinner, "changed", _on_media_volume_spinner_change_cb, ly);
1305         elm_object_part_content_set(ly, "elm.icon.1", spinner);
1306
1307         btn = elm_button_add(ly);
1308         elm_object_style_set(btn, "popup");
1309         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1310         elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1311         elm_object_part_content_set(ly, "btn1", btn);
1312         evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1313
1314         btn = elm_button_add(ly);
1315         elm_object_style_set(btn, "popup");
1316         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1317         elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1318         elm_object_part_content_set(ly, "btn2", btn);
1319         evas_object_smart_callback_add(btn, "clicked", _set_notification_clicked_cb, ad);
1320
1321         Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1322                                                                                                            "IDS_ST_BUTTON_NOTIFICATIONS",
1323                                                                                                            NULL, NULL,
1324                                                                                                            ly, NULL );
1325         elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1326         elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1327         register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1328
1329         sound_manager_set_volume_changed_cb(_media_volume_changed_cb, NULL);
1330
1331         /* Unregister sound mode vconf callback */
1332         register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1333         register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);
1334 }
1335
1336 static void _set_system_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1337 {
1338         appdata * ad = data;
1339         if( ad == NULL )
1340                 return;
1341
1342         if(!is_changed)
1343         {
1344                 DBG("not changed");
1345                 elm_naviframe_item_pop(ad->nf);
1346                 return;
1347         }
1348
1349         // save system vulume value
1350         _set_volumn(SOUND_TYPE_SYSTEM, volume_index, VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT);
1351
1352         if( is_created_player() )
1353         {
1354                 _close_player(ad, curr_sound_type);
1355         }
1356
1357         stop_wav();
1358
1359         elm_naviframe_item_pop(ad->nf);
1360 }
1361
1362
1363 void _show_system_popup(void *data, Evas_Object *obj, void *event_info)
1364 {
1365         Evas_Object *ly;
1366         Evas_Object *btn;
1367         appdata *ad = data;
1368
1369         if( ad == NULL )
1370                 return;
1371
1372         original_sound_mode = get_sound_mode();
1373
1374         curr_sound_type = SOUND_TYPE_SYSTEM;
1375
1376         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_SOUND_VOLUME_INT, &volume_index);
1377
1378         int real_volume_index = 0;
1379         sound_manager_get_volume(SOUND_TYPE_SYSTEM, &real_volume_index);
1380
1381         DBG("Setting - vconf vol: %d, real vol: %d", volume_index, real_volume_index);
1382
1383         // sync volume
1384         volume_index = sync_volume(volume_index, real_volume_index);
1385         original_volume = volume_index;
1386
1387         ad->MENU_TYPE = SETTING_VOLUME_2_DEPTH;
1388
1389         ly = elm_layout_add(ad->nf);
1390         elm_layout_file_set(ly, EDJE_PATH, "setting/2finger_popup/default2");
1391         evas_object_size_hint_weight_set (ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1392         evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
1393
1394         int w,h;
1395         ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
1396         DBG("    ----> width : %d,  height : %d ", w, h);
1397         if ( w==360 && h == 480)
1398         {
1399                 DBG("make long height !!!!!!!!!!!!!!!!!");
1400                 //elm_object_signal_emit(layout, "set,popup,long", "elm.icon.1");       
1401                 elm_object_signal_emit(ly, "set,popup,long", "*");      
1402         }
1403
1404         Evas_Object * spinner = elm_spinner_add(ly);
1405
1406         g_volume_spinner = spinner;
1407
1408         //elm_object_style_set(spinner, "volumestyle");
1409         elm_spinner_editable_set(spinner, EINA_FALSE);
1410         elm_spinner_min_max_set(spinner, 0, 15);
1411
1412         if( get_sound_mode() != SOUND_MODE_SOUND )
1413         {
1414                 edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,min", "elm");
1415                 edje_object_part_drag_value_set(elm_layout_edje_get(spinner), "elm.dragable.slider", 0, 0);
1416
1417                 if( get_sound_mode() == SOUND_MODE_VIBRATE )
1418                 {
1419                         edje_object_signal_emit(elm_layout_edje_get(spinner), "elm,spinner,vibrate", "elm");
1420                 }
1421
1422                 elm_object_disabled_set(spinner, EINA_TRUE);
1423         }
1424         else
1425         {
1426                 elm_spinner_value_set(spinner, volume_index);
1427                 _update_volume_circle(spinner);
1428         }
1429         evas_object_smart_callback_add(spinner, "changed", _on_media_volume_spinner_change_cb, ly);
1430         elm_object_part_content_set(ly, "elm.icon.1", spinner);
1431
1432         btn = elm_button_add(ly);
1433         elm_object_style_set(btn, "popup");
1434         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1435         elm_object_translatable_text_set(btn, "IDS_ST_BUTTON_CANCEL_ABB2");
1436         elm_object_part_content_set(ly, "btn1", btn);
1437         evas_object_smart_callback_add(btn, "clicked", _set_cancel_cb, ad);
1438
1439         btn = elm_button_add(ly);
1440         elm_object_style_set(btn, "popup");
1441         evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1442         elm_object_translatable_text_set(btn, "IDS_WNOTI_BUTTON_OK_ABB2");
1443         elm_object_part_content_set(ly, "btn2", btn);
1444         evas_object_smart_callback_add(btn, "clicked", _set_system_clicked_cb, ad);
1445
1446         Elm_Object_Item * nf_it = elm_naviframe_item_push( ad->nf,
1447                                                                                                            "IDS_ST_BODY_SYSTEM_M_VOLUME_ABB",
1448                                                                                                            NULL, NULL,
1449                                                                                                            ly, NULL );
1450         elm_object_item_domain_text_translatable_set(nf_it, SETTING_PACKAGE, EINA_TRUE);
1451         elm_naviframe_item_pop_cb_set(nf_it, _back_volume_naviframe_cb, ad);
1452
1453         register_vconf_changing(VCONFKEY_PM_STATE, pm_state_vconf_changed_cb_for_volume, NULL);
1454
1455         sound_manager_set_volume_changed_cb(_media_volume_changed_cb, NULL);
1456
1457         /* Unregister sound mode vconf callback */
1458         register_vconf_changing(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, vibrate_vconf_changed_cb, NULL);
1459         register_vconf_changing(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL ,sound_vconf_changed_cb, NULL);
1460 }