2 * Copyright (c) 2014 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.
17 #include <Elementary.h>
19 #include <media/sound_manager.h>
24 #define TIME_INTERVAL 3.0
34 static void _set_mute(struct volume_data *data, Eina_Bool mute)
39 if (data->mute == mute)
43 r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol);
48 data->mute = EINA_TRUE;
50 sound_manager_set_volume(SOUND_TYPE_MEDIA, data->volume);
51 data->mute = EINA_FALSE;
55 static void _handle_volume(struct volume_data *data, enum volume_val val)
65 _set_mute(data, EINA_FALSE);
67 r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol);
68 if (r != SOUND_MANAGER_ERROR_NONE) {
69 _ERR("get volume error");
75 sound_manager_set_volume(SOUND_TYPE_MEDIA, vol);
78 _set_mute(data, !data->mute);
85 static void _update_volume_bar(struct volume_data *data)
95 r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol);
96 if (r != SOUND_MANAGER_ERROR_NONE) {
97 _ERR("get volume error");
101 if (vol == 0 || data->mute) {
102 elm_object_signal_emit(data->ly, SIG_VOLUME_MUTE, "base");
105 elm_object_signal_emit(data->ly, SIG_VOLUME_UNMUTE, "base");
109 elm_progressbar_value_set(data->bar, val);
111 snprintf(buf, sizeof(buf), "%d", vol);
112 elm_object_part_text_set(data->ly, PART_VOLUME_VALUE, buf);
115 static Eina_Bool _volume_timer_cb(void *dt)
117 struct volume_data *data;
120 return ECORE_CALLBACK_CANCEL;
122 data = (volume_data *)dt;
124 evas_object_hide(data->ly);
127 return ECORE_CALLBACK_CANCEL;
130 void volume_handle_key(struct volume_data *data, enum volume_val val)
136 data->timer = ecore_timer_add(TIME_INTERVAL,
137 _volume_timer_cb, data);
138 evas_object_show(data->ly);
140 ecore_timer_reset(data->timer);
143 _handle_volume(data, val);
144 _update_volume_bar(data);
147 void volume_hide_bar(struct volume_data *data)
152 evas_object_hide(data->ly);
153 ecore_timer_del(data->timer);
157 Eina_Bool volume_add_bar(struct volume_data *data, Evas_Object *base)
163 _ERR("failed to get base object");
167 ly = elm_layout_add(base);
173 elm_layout_file_set(ly, EDJEFILE, GRP_VOLUME);
174 elm_win_resize_object_add(base, ly);
175 evas_object_hide(ly);
177 bar = elm_progressbar_add(ly);
179 _ERR("failed to create progressbar");
185 evas_object_size_hint_weight_set(bar, EVAS_HINT_EXPAND,
187 elm_progressbar_horizontal_set(bar, EINA_TRUE);
188 elm_object_style_set(bar, STYLE_VOLUME_BAR);
189 elm_object_part_content_set(ly, PART_VOLUME_BAR, bar);
190 evas_object_show(bar);
198 void volume_fini(struct volume_data *data)
200 ecore_timer_del(data->timer);
204 struct volume_data *volume_init(void)
206 struct volume_data *data;
208 data = (volume_data *)calloc(1, sizeof(*data));
210 _ERR("allocation fail");
214 sound_manager_set_session_type(SOUND_SESSION_TYPE_EXCLUSIVE);