2 * Copyright (c) 2009-2015 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.
20 #include <vconf-keys.h>
23 #include "_util_efl.h"
24 #include "_util_log.h"
28 #include "key_event.h"
30 #include "tzsh_volume_service.h"
35 tzsh_volume_service_h volume_service;
37 Evas_Object *ly_outer;
38 Evas_Object *icon_volume;
39 Evas_Object *icon_setting;
41 Evas_Object *warning_popup;
43 Evas_Object *lockscreen_splash;
45 Evas_Object *ao_settings;
47 Eina_Bool is_registered_callback;
48 Eina_Bool is_slider_touching;
49 Eina_Bool is_warning_displayed;
50 sound_type_e pre_sound_type;
52 static struct _view_s_info view_info = {
55 .volume_service = NULL,
61 .warning_popup = NULL,
63 .lockscreen_splash = NULL,
67 .is_registered_callback = EINA_FALSE,
68 .is_slider_touching = EINA_FALSE,
69 .is_warning_displayed = EINA_FALSE,
70 .pre_sound_type = SOUND_TYPE_RINGTONE
73 static void _button_cb(void *data, Evas_Object *obj, void *event_info);
74 static void _button_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
75 static void _app_control_error_check(int ret);
76 static void _hide_launcher(void *data, Evas_Object *obj, const char *emission, const char *source);
77 static void _slider_stop_cb(void *data, Evas_Object *obj, void *event_info);
78 static void _slider_start_cb(void *data, Evas_Object *obj, void *event_info);
79 static void _slider_changed_cb(void *data, Evas_Object *obj, void *event_info);
80 static Evas_Object* _slider_make();
81 static Evas_Object* _volume_icon_make();
82 static Evas_Object* _setting_icon_make();
84 Evas_Object* volume_view_win_get(void)
89 tzsh_h volume_view_tzsh_get(void)
91 return view_info.tzsh;
94 tzsh_volume_service_h volume_view_service_get(void)
96 return view_info.volume_service;
99 Evas_Object* volume_view_evas_get(void)
101 return view_info.evas;
104 Evas_Object* volume_view_outer_layout_get(void)
106 return view_info.ly_outer;
109 Evas_Object* volume_view_icon_volume_get(void)
111 return view_info.icon_volume;
114 Evas_Object* volume_view_icon_setting_get(void)
116 return view_info.icon_setting;
119 Evas_Object* volume_view_slider_get(void)
121 return view_info.slider;
124 Evas_Object* volume_view_warning_popup_get(void)
126 return view_info.warning_popup;
129 Eina_Bool volume_view_is_registered_callback_get(void)
131 return view_info.is_registered_callback;
134 Eina_Bool volume_view_is_slider_touching_get(void)
136 return view_info.is_slider_touching;
139 sound_type_e volume_view_pre_sound_type_get(void)
141 return view_info.pre_sound_type;
144 volume_error_e volume_view_set_default_slider(){
145 Evas_Object *slider = volume_view_slider_get();
146 elm_object_style_set(slider, "default");
147 return VOLUME_ERROR_OK;
150 volume_error_e volume_view_set_warning_slider(){
151 Evas_Object *slider = volume_view_slider_get();
152 elm_object_style_set(slider, "warning");
153 Edje_Message_Float_Set *msg = alloca(sizeof(Edje_Message_Float_Set) + (sizeof(double)));
156 edje_object_message_send(elm_layout_edje_get(slider), EDJE_MESSAGE_FLOAT_SET, 0, msg);
158 return VOLUME_ERROR_OK;
161 int volume_mute_toggle_set()
163 sound_type_e sound_type = volume_control_get_sound_type_at_show();
164 _D("sound type at show : %d", sound_type);
166 int sound = volume_sound_vconf_status_get(TYPE_VCONF_SOUND_STATUS);
167 _D("sound status : %d", sound);
169 int vibration = volume_sound_vconf_status_get(TYPE_VCONF_VIBRATION_STATUS);
170 _E("vibration : %d", vibration);
172 if (sound == 1 || vibration == 1) {
173 volume_sound_vconf_status_set(TYPE_VCONF_SOUND_STATUS, 0);
174 volume_sound_vconf_status_set(TYPE_VCONF_VIBRATION_STATUS, 0);
176 if(VOLUME_ERROR_OK != volume_view_slider_value_set(0))
177 _E("Failed to set slider value");
182 volume_sound_vconf_status_set(TYPE_VCONF_SOUND_STATUS, 1);
183 volume_sound_vconf_status_set(TYPE_VCONF_VIBRATION_STATUS, 0);
185 int val = volume_sound_level_get(sound_type);
186 retv_if(val == -1, 0);
189 if (VOLUME_ERROR_OK != volume_view_slider_value_set(1))
190 _E("Failed to set slider value");
191 volume_sound_level_set(sound_type, 1);
193 if (VOLUME_ERROR_OK != volume_view_slider_value_set(val))
194 _E("Failed to set slider value");
201 volume_error_e volume_view_change_slider_by_type(sound_type_e type, bool bt_opened, int earphone_connected)
203 _D("Slider change for state: %d", type);
207 if (type == SOUND_TYPE_MEDIA && (bt_opened || earphone_connected)) {
208 _D("=Change to warning slider=");
209 elm_object_style_set(view_info.slider, "warning");
211 _D("=Change to normal slider=");
212 elm_object_style_set(view_info.slider, "default");
215 ret = sound_manager_get_max_volume(type, &step);
217 _E("Failed to get max volume for sound_type: %d", type);
218 return VOLUME_ERROR_FAIL;
220 _D("Sound type: %d, max: %d", type, step);
222 elm_slider_min_max_set(view_info.slider, 0, step);
224 view_info.pre_sound_type = type;
226 return VOLUME_ERROR_OK;
229 static void _cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
231 volume_view_destroy_warning_popup();
234 static void _ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
236 _D("Increase button is clicked");
237 volume_control_set_safety_limit(EINA_FALSE);
238 volume_control_set_time_for_safety_limit();
240 volume_view_destroy_warning_popup();
243 volume_error_e volume_view_open_warning_popup(void)
245 Evas_Object *popup = NULL;
246 Evas_Object *cancel_btn = NULL;
247 Evas_Object *ok_btn = NULL;
249 popup = elm_popup_add(view_info.win);
250 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
251 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
252 elm_object_text_set(popup, "Listening at a high volume for a long time may damage your hearing. The volume will be increaed above safe levels.");
254 cancel_btn = elm_button_add(popup);
255 elm_object_style_set(cancel_btn, "popup");
256 elm_object_text_set(cancel_btn, "Cancel");
257 elm_object_part_content_set(popup, "button2", cancel_btn);
258 evas_object_smart_callback_add(cancel_btn, "clicked", _cancel_clicked_cb, popup);
260 ok_btn = elm_button_add(popup);
261 elm_object_style_set(ok_btn, "popup");
262 elm_object_text_set(ok_btn, "Increase");
263 elm_object_part_content_set(popup, "button1", ok_btn);
264 evas_object_smart_callback_add(ok_btn, "clicked", _ok_clicked_cb, popup);
266 view_info.warning_popup = popup;
267 evas_object_show(popup);
269 return VOLUME_ERROR_OK;
272 void volume_view_destroy_warning_popup(void)
274 _D("Destroy warning popup");
275 if (VOLUME_ERROR_OK != volume_view_send_warning_signal(EINA_FALSE)) {
276 _E("Failed to set warning status");
279 evas_object_del(view_info.warning_popup);
280 view_info.warning_popup = NULL;
282 if (VOLUME_ERROR_OK != volume_control_hide_view())
283 _E("Failed to close volume");
284 if (VOLUME_ERROR_OK != volume_control_cache_flush())
285 _E("Failed to flush cache");
288 volume_error_e volume_view_slider_value_set(int val)
290 _D("Slider value set : %d", val);
291 retv_if(view_info.is_slider_touching, VOLUME_ERROR_FAIL);
292 retv_if(val<0, VOLUME_ERROR_FAIL);
294 elm_slider_value_set(view_info.slider, val);
296 return VOLUME_ERROR_OK;
299 void volume_view_volume_icon_set(sound_type_e sound_type, int sound, int vibration, bool bt_opened)
301 _D("Volume icon set");
304 if (sound == -1 || vibration == -1) {
305 img = IMG_VOLUME_ICON_MUTE;
307 elm_image_file_set(view_info.icon_volume, EDJ_APP, img);
313 case SOUND_TYPE_RINGTONE:
315 img = IMG_VOLUME_ICON;
317 img = IMG_VOLUME_ICON_VIB;
319 img = IMG_VOLUME_ICON_MUTE;
321 case SOUND_TYPE_MEDIA:
322 img = IMG_VOLUME_ICON_MEDIA;
324 case SOUND_TYPE_CALL:
326 img = IMG_VOLUME_ICON_CALL;
328 img = IMG_VOLUME_ICON_CALL;
330 case SOUND_TYPE_NOTIFICATION:
332 img = IMG_VOLUME_ICON_NOTI;
334 img = IMG_VOLUME_ICON_NOTI_VIB;
336 img = IMG_VOLUME_ICON_NOTI_MUTE;
338 case SOUND_TYPE_ALARM:
339 img = IMG_VOLUME_ICON_MEDIA;
342 img = IMG_VOLUME_ICON;
347 elm_image_file_set(view_info.icon_volume, EDJ_APP, img);
350 void volume_view_setting_icon_set(const char *file)
352 _D("Setting icon image set");
355 Evas_Object *icon_setting = view_info.icon_setting;
356 ret_if(!icon_setting);
358 if (EINA_TRUE != elm_image_file_set(icon_setting, EDJ_APP, file)) {
359 _E("Failed to set image file : %s, Group", EDJ_APP, file);
363 void volume_view_setting_icon_callback_add(void)
365 _D("Setting callback add");
366 ret_if(view_info.is_registered_callback);
368 Evas_Object *icon_setting = view_info.icon_setting;
369 ret_if(!icon_setting);
371 evas_object_event_callback_add(icon_setting, EVAS_CALLBACK_MOUSE_DOWN, _button_mouse_down_cb, NULL);
372 evas_object_smart_callback_add(icon_setting, "clicked", _button_cb, NULL);
374 view_info.is_registered_callback = EINA_TRUE;
377 void volume_view_setting_icon_callback_del(void)
379 _D("Setting callback del");
380 ret_if(!view_info.is_registered_callback);
382 Evas_Object *icon_setting = view_info.icon_setting;
383 ret_if(!icon_setting);
385 evas_object_smart_callback_del(icon_setting, "clicked", _button_cb );
386 evas_object_event_callback_del(icon_setting, EVAS_CALLBACK_MOUSE_DOWN, _button_mouse_down_cb);
388 view_info.is_registered_callback = EINA_FALSE;
391 Evas_Object *add_slider(Evas_Object *parent, int min, int max, int val)
393 retv_if(!parent, NULL);
394 Evas_Object *slider = elm_slider_add(parent);
395 retvm_if(!slider, NULL, "Failed to add slider");
397 elm_slider_horizontal_set(slider, EINA_TRUE);
398 elm_slider_indicator_show_set(slider, EINA_FALSE);
399 elm_slider_indicator_format_set(slider, "%.0f");
400 evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
401 evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
402 elm_slider_min_max_set(slider, min, max);
403 elm_slider_value_set(slider, val);
408 volume_error_e volume_view_send_warning_signal(Eina_Bool warning)
411 _D("Show warning popup, and hide volume popup");
412 elm_object_signal_emit(view_info.ly_outer, "show,warning", "bg");
414 int current_angle = volume_control_get_current_angle();
415 _D("Current angle: %d", current_angle);
416 switch(current_angle){
419 _D("show,landscape");
420 elm_object_signal_emit(view_info.ly_outer, "show,landscape", "bg");
424 elm_object_signal_emit(view_info.ly_outer, "show,portrait", "bg");
428 return VOLUME_ERROR_OK;
431 volume_error_e volume_view_window_show(sound_type_e type)
433 _D("Volume view window SHOW is [%p]", view_info.win);
435 elm_win_iconified_set(view_info.win, EINA_FALSE);
437 if (type == SOUND_TYPE_CALL) {
438 _D("Sound type is Call");
440 volume_view_setting_icon_callback_add();
443 return VOLUME_ERROR_OK;
446 volume_error_e volume_view_window_hide(void)
448 _D("Volume view window HIDE");
449 elm_win_iconified_set(view_info.win, EINA_TRUE);
450 volume_view_setting_icon_callback_del();
452 return VOLUME_ERROR_OK;
455 Evas_Object *add_layout(Evas_Object *parent, const char *file, const char *group)
457 retvm_if(!parent, NULL, "Invalid argument: parent is NULL\n");
458 retvm_if(!file, NULL, "Invalid argument: file is NULL\n");
459 retvm_if(!group, NULL, "Invalid argument: group is NULL\n");
461 Evas_Object *eo = elm_layout_add(parent);
462 retvm_if(!eo, NULL, "Failed to add layout\n");
465 r = elm_layout_file_set(eo, file, group);
467 _E("Failed to set file[%s]\n", file);
472 evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
473 evas_object_show(eo);
478 void _connect_to_wm(Evas_Object *win)
480 _D("Mack connection with window manager");
484 view_info.tzsh = tzsh_create(TZSH_TOOLKIT_TYPE_EFL);
485 if (!view_info.tzsh) {
486 _E("Failed to get connection to Tizen window manager");
489 tz_win = elm_win_window_id_get(win);
491 _E("Failed to get Tizen window manager");
494 view_info.volume_service = tzsh_volume_service_create(view_info.tzsh, tz_win);
495 if (!view_info.volume_service) {
496 _E("Failed to get volume service");
500 static void _down_for_hide(void *data, Evas_Object *obj, const char* emission, const char* source)
502 LOGD("Down for HIDE");
504 volume_control_hide_view();
507 volume_error_e volume_view_layout_create(Evas_Object *win)
509 LOGD("Layout create");
511 retv_if(!win, VOLUME_ERROR_FAIL);
513 Evas_Object *ly_outer = add_layout(win, EDJ_APP, "volume_layout");
514 retv_if(!ly_outer, VOLUME_ERROR_FAIL);
515 elm_win_resize_object_add(win, ly_outer);
516 elm_object_signal_callback_add(ly_outer, "hide,popup", "event", _hide_launcher, NULL);
517 view_info.ly_outer = ly_outer;
519 /* make setting icon */
520 Evas_Object *icon_setting = _setting_icon_make();
521 retv_if(!icon_setting, VOLUME_ERROR_FAIL);
522 elm_object_part_content_set(ly_outer, "ic_setting", icon_setting);
523 view_info.icon_setting = icon_setting;
525 /* make volume icon */
526 Evas_Object *icon_volume = _volume_icon_make();
527 retv_if(!icon_volume, VOLUME_ERROR_FAIL);
528 elm_object_part_content_set(ly_outer, "ic_sound", icon_volume);
529 view_info.icon_volume = icon_volume;
532 Evas_Object *slider = _slider_make();
533 retv_if(!slider, VOLUME_ERROR_FAIL);
534 view_info.slider = slider;
535 elm_object_part_content_set(ly_outer, "sw.slider", slider);
537 /* add callback for hide */
538 elm_object_signal_callback_add(ly_outer, "hide,volume", "hide", _down_for_hide, NULL);
540 return VOLUME_ERROR_OK;
543 static void _iconified_cb(void *data, Evas_Object *obj, void *event_info)
545 _D("ICONIFIED IS CALLED");
548 Evas_Object *add_volume_window(const char *name)
550 Evas_Object *eo = NULL;
554 eo = elm_win_add(NULL, name, ELM_WIN_NOTIFICATION);
556 evas = evas_object_evas_get(eo);
557 retv_if(!evas, NULL);
558 view_info.evas = evas;
560 elm_win_alpha_set(eo, EINA_TRUE);
561 elm_win_title_set(eo, name);
562 elm_win_borderless_set(eo, EINA_TRUE);
563 ecore_evas_name_class_set(ecore_evas_ecore_evas_get(evas), "SYSTEM_POPUP", "SYSTEM_POPUP");
564 elm_win_prop_focus_skip_set(eo, EINA_TRUE);
565 elm_win_role_set(eo, "no-dim");
567 elm_win_screen_size_get(eo, &x, &y, &w, &h);
568 _D("volume screen size => x: %d, y: %d, w: %d, h: %d", x, y, w, h);
570 evas_object_smart_callback_add(eo, "iconified", _iconified_cb, NULL);
575 static Eina_Bool _key_grab_cb(void *data)
579 Evas_Object *win = data;
581 _D("keygrab window is [%p]", win);
582 ret_up = elm_win_keygrab_set(win, KEY_VOLUMEUP, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
583 _D("Result of volume up keygrab set : %d", ret_up);
584 ret_down = elm_win_keygrab_set(win, KEY_VOLUMEDOWN, 0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
585 _D("Result of volume down keygrab set : %d", ret_down);
590 Evas_Object *volume_view_window_create(void)
592 Evas_Object *win = add_volume_window(PACKAGE);
594 _D("window is [%p]", win);
597 _D("view_info.win is [%p]", view_info.win);
599 evas_object_show(win);
601 ecore_timer_add(1.0f, _key_grab_cb, win);
605 elm_win_iconified_set(win, EINA_TRUE);
610 void _lock_sound_check(void)
612 int lcdoff_source = -1;
616 if (vconf_get_int(VCONFKEY_PM_LCDOFF_SOURCE, &lcdoff_source) < 0) {
617 _E("Failed to get vconfkey : VCONFKEY_PM_LCDOFF_SOURCE");
620 _D("lcd off source : %d", lcdoff_source);
622 if (lcdoff_source != VCONFKEY_PM_LCDOFF_BY_POWERKEY) {
623 _E("Should not play lock sound");
627 if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &lock_sound) < 0) {
628 _E("Failed to get vconfkey : VCONFKEY_SETAPPL_SOUND_LOCK_BOOL");
631 _D("lock sound : %d", lock_sound);
634 if (vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &lock_type) < 0) {
635 _E("Failed to get vconfkey : VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT");
638 _D("lock type : %d", lock_type);
640 feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_LOCK);
644 Evas_Object* show_lockscreen_splash(const char* bg_path)
648 retv_if(bg_path == NULL, NULL);
650 if (view_info.lockscreen_splash) {
651 _E("There is remain fake_bg : remove old one");
652 evas_object_del(view_info.lockscreen_splash);
653 view_info.lockscreen_splash = NULL;
656 /* Check Lock Sound */
659 /* hide volume window */
660 if(VOLUME_ERROR_OK != volume_view_window_hide())
661 _E("Failed to hide window");
663 Evas_Object *win_splash = elm_win_add(NULL,"lockscreen_splash", ELM_WIN_NOTIFICATION);
666 _E("Failed to add splash window");
670 _D("Splash window created");
672 Evas_Object *bg = elm_bg_add(win_splash);
674 _D("Failed to get background");
675 evas_object_del(win_splash);
679 elm_win_resize_object_add(win_splash, bg);
680 elm_bg_file_set(bg, bg_path, NULL);
681 evas_object_show(bg);
683 evas_object_show(win_splash);
685 _D("Splash window shown");
687 view_info.lockscreen_splash = win_splash;
692 volume_error_e hide_lockscreen_splash(void)
696 if (!view_info.lockscreen_splash) {
697 _E("No splash window found");
698 return VOLUME_ERROR_FAIL;
701 evas_object_del(view_info.lockscreen_splash);
702 view_info.lockscreen_splash = NULL;
703 _D("Splash window closed");
705 return VOLUME_ERROR_OK;
707 static void _slider_start_cb(void *data, Evas_Object *obj, void *event_info)
709 view_info.is_slider_touching = EINA_TRUE;
711 volume_timer_del(TYPE_TIMER_POPUP);
713 volume_timer_add(0.2, TYPE_TIMER_SLIDER);
716 static void _slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
718 volume_timer_del(TYPE_TIMER_POPUP);
722 sound_type_e sound_type = volume_control_get_sound_type_at_show();
723 _D("sound type at show : %d", sound_type);
725 val = elm_slider_value_get(view_info.slider);
727 _D("slider value : %d", val);
729 if (view_info.is_slider_touching)
732 volume_sound_change_set((int)val);
734 if (!volume_key_event_is_pressing_get()) {
735 volume_timer_add(3.0, TYPE_TIMER_POPUP);
739 if (!view_info.is_slider_touching) {
740 volume_timer_add(3.0, TYPE_TIMER_POPUP);
745 static void _slider_stop_cb(void *data, Evas_Object *obj, void *event_info)
747 view_info.is_slider_touching = EINA_FALSE;
749 volume_timer_del(TYPE_TIMER_SLIDER);
751 Evas_Object *slider = volume_view_slider_get();
752 ret_if(slider == NULL);
756 val = elm_slider_value_get(slider);
758 _D("slider value : %d", (int)val);
760 volume_sound_change_set((int)val);
762 volume_timer_add(3.0, TYPE_TIMER_POPUP);
765 static void _hide_launcher(void *data, Evas_Object *obj, const char *emission, const char *source)
767 evas_object_hide(view_info.win);
770 static void _button_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
772 elm_object_signal_emit(view_info.ly_outer, "pressed", "setting");
775 static void _app_control_error_check(int ret)
777 if (ret != APP_CONTROL_ERROR_NONE) {
780 case APP_CONTROL_ERROR_INVALID_PARAMETER :
781 _E("error : APP_CONTROL_ERROR_INVALID_PARAMETER");
783 case APP_CONTROL_ERROR_OUT_OF_MEMORY :
784 _E("error : APP_CONTROL_ERROR_OUT_OF_MEMORY");
786 case APP_CONTROL_ERROR_APP_NOT_FOUND :
787 _E("error : APP_CONTROL_ERROR_APP_NOT_FOUND");
789 case APP_CONTROL_ERROR_LAUNCH_REJECTED :
790 _E("error : APP_CONTROL_ERROR_LAUNCH_REJECTED");
793 _E("error : %d", ret);
799 static void _button_cb(void *data, Evas_Object *obj, void *event_info)
801 _D("volume setting is clicked");
805 if (evas_object_visible_get(view_info.win)) {
806 volume_timer_del(TYPE_TIMER_POPUP);
808 ret = app_control_create(&svc);
809 _app_control_error_check(ret);
811 ret = app_control_set_app_id(svc, "org.tizen.setting.volume");
812 _app_control_error_check(ret);
814 ret = app_control_send_launch_request(svc, NULL, NULL);
815 _app_control_error_check(ret);
817 if (VOLUME_ERROR_OK != volume_control_pause())
818 _E("Failed to pause volume");
820 app_control_destroy(svc);
824 static Evas_Object* _setting_icon_make()
826 _D("Setting ICON make");
827 Evas_Object *icon_setting = elm_icon_add(view_info.ly_outer);
828 retv_if(!icon_setting, NULL);
830 evas_object_size_hint_aspect_set(icon_setting, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
831 elm_image_resizable_set(icon_setting, EINA_TRUE, EINA_TRUE);
833 view_info.icon_setting = icon_setting;
835 volume_view_setting_icon_set(IMG_VOLUME_ICON_SETTINGS);
836 evas_object_show(icon_setting);
841 static Evas_Object* _volume_icon_make()
843 Evas_Object *icon_volume = elm_icon_add(view_info.ly_outer);
844 retv_if(!icon_volume, NULL);
846 evas_object_size_hint_aspect_set(icon_volume, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
847 elm_image_resizable_set(icon_volume, EINA_TRUE, EINA_TRUE);
848 evas_object_show(icon_volume);
853 static Evas_Object* _slider_make()
855 _D("Volume Slider Make");
856 sound_type_e sound_type = volume_control_get_sound_type_at_show();
857 _D("sound type at show : %d", sound_type);
859 int sound_step = volume_sound_sound_manager_step_get(sound_type);
860 _D("sound step : %d", sound_step);
862 int sound_val = volume_sound_level_get(sound_type);
863 if (sound_val == -1) {
864 _E("Failed to get volume level");
867 _D("sound value : %d", sound_val);
869 Evas_Object *slider = add_slider(view_info.ly_outer, 0, sound_step, sound_val);
870 retv_if(!slider, NULL);
871 evas_object_smart_callback_add(slider, "slider,drag,start", _slider_start_cb, NULL);
872 evas_object_smart_callback_add(slider, "changed", _slider_changed_cb, NULL);
873 evas_object_smart_callback_add(slider, "slider,drag,stop", _slider_stop_cb, NULL);