2 * Copyright (c) [2012] Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 <sound_manager.h>
18 #include <Elementary.h>
20 #include "video-player.h"
23 #include "mp-video-log.h"
24 #include "mp-video-type-define.h"
25 #include "mp-video-value-define.h"
26 #include "mp-video-string-define.h"
27 #include "mp-video-volume-ctrl.h"
29 //#include "mp-video-statistics.h"
31 #define VOLUME_CTRL_HIDE_TIMER_INTERVAL 3.0
32 #define VOLUME_CTRL_DRAG_TIMER_INTERVAL 0.3
35 typedef struct __MpVolumeCtrlData MpVolumeCtrlData;
37 struct __MpVolumeCtrlData{
38 VideoAppData *pAppData;
42 Ecore_Timer *pHideTimer;
43 Ecore_Timer *pDragTimer;
52 static MpVolumeCtrlData *pVolumeData = NULL;
54 static void MpVideoVolumeCtrlUpdateTextValue(void *pUserData)
60 VideoLogError("Volume ctrl data is null.");
66 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
69 snprintf(szVol, 3, "%d", pCtrlData->nCurVol);
71 VideoLogError("%d , %s", pCtrlData->nCurVol, szVol);
73 edje_object_part_text_set(_EDJ(pCtrlData->pLayout), "volume.progress.circle.txt", szVol);
77 static void MpVideoVolumeCtrlUpdateDragValue(void *pUserData)
83 VideoLogError("Volume ctrl data is null.");
89 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
93 fVolPos = ((double)pCtrlData->nCurVol/(double)pCtrlData->nMaxVol);
94 edje_object_part_drag_value_set(_EDJ(pCtrlData->pLayout), "volume.progress.drag", fVolPos, 0.0);
98 static int MpVideoVolumeCtrlGetMaxVolume()
102 int nRet = SOUND_MANAGER_ERROR_NONE;
104 nRet = sound_manager_get_max_volume (SOUND_TYPE_MEDIA, &nMax);
105 if(nRet != SOUND_MANAGER_ERROR_NONE)
107 VideoLogError("Sound manage get max volue fail : %d", nRet);
113 static int MpVideoVolumeCtrlGetCurVolume()
117 int nRet = SOUND_MANAGER_ERROR_NONE;
119 nRet = sound_manager_get_volume (SOUND_TYPE_MEDIA, &nVol);
120 if(nRet != SOUND_MANAGER_ERROR_NONE)
122 VideoLogError("Sound manage get current volue fail : %d", nRet);
129 static void MpVideoVolumeCtrlSetCurVolume(int nVol)
133 int nRet = SOUND_MANAGER_ERROR_NONE;
134 nRet = sound_manager_set_volume (SOUND_TYPE_MEDIA, nVol);
135 if(nRet != SOUND_MANAGER_ERROR_NONE)
137 VideoLogError("Sound manage get current volue fail : %d", nRet);
144 static Eina_Bool MpVideoVolumeCtrlHideTimerCb(void *pUserData)
147 if(pUserData == NULL)
149 VideoLogError("pAppData is null.");
153 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
154 if(pCtrlData->pHideTimer)
156 ecore_timer_del(pCtrlData->pHideTimer);
157 pCtrlData->pHideTimer = NULL;
160 pCtrlData->pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlHideVolume(pCtrlData->pAppData);
166 static Eina_Bool MpVideoVolumeCtrlDragTimerCb(void *pUserData)
169 if(pUserData == NULL)
171 VideoLogError("pAppData is null.");
177 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
179 double fVolPos = 0.0;
181 edje_object_part_drag_value_get(_EDJ(pCtrlData->pLayout), "volume.progress.drag", &fVolPos, NULL);
183 pCtrlData->nCurVol = (int)(pCtrlData->nMaxVol * fVolPos);
185 MpVideoVolumeCtrlSetCurVolume(pCtrlData->nCurVol);
187 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
194 static void MpVideoVolumeCtrlDragStartcb(void *pUserData, Evas_Object *obj, const char *szEmission, const char *szSource)
197 if(pUserData == NULL)
199 VideoLogError("pAppData is null.");
202 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
204 if(pCtrlData->pHideTimer)
206 ecore_timer_del(pCtrlData->pHideTimer);
207 pCtrlData->pHideTimer = NULL;
210 pCtrlData->pDragTimer = ecore_timer_add(VOLUME_CTRL_DRAG_TIMER_INTERVAL, MpVideoVolumeCtrlDragTimerCb, (void *)pCtrlData);
213 static void MpVideoVolumeCtrlDragStopcb(void *pUserData, Evas_Object *obj, const char *szEmission, const char *szSource)
216 if(pUserData == NULL)
218 VideoLogError("pAppData is null.");
221 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
223 if(pCtrlData->pHideTimer)
225 ecore_timer_del(pCtrlData->pHideTimer);
226 pCtrlData->pHideTimer = NULL;
229 pCtrlData->pHideTimer = ecore_timer_add(VOLUME_CTRL_HIDE_TIMER_INTERVAL, MpVideoVolumeCtrlHideTimerCb, (void *)pCtrlData);
231 if(pCtrlData->pDragTimer)
233 ecore_timer_del(pCtrlData->pDragTimer);
234 pCtrlData->pDragTimer = NULL;
237 double fVolPos = 0.0;
238 edje_object_part_drag_value_get(_EDJ(pCtrlData->pLayout), "volume.progress.drag", &fVolPos, NULL);
239 pCtrlData->nCurVol = (int)(pCtrlData->nMaxVol * fVolPos);
241 MpVideoVolumeCtrlSetCurVolume(pCtrlData->nCurVol);
242 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
245 static void MpVideoVolumeCtrlDragcb(void *pUserData, Evas_Object *obj, const char *szEmission, const char *szSource)
249 if(pUserData == NULL)
251 VideoLogError("pAppData is null.");
257 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
258 double fVolPos = 0.0;
259 edje_object_part_drag_value_get(_EDJ(pCtrlData->pLayout), "volume.progress.drag", &fVolPos, NULL);
260 pCtrlData->nCurVol = (int)(pCtrlData->nMaxVol * fVolPos);
262 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
267 void *MpVideoVolumeCtrlInit(void *pParent, void* pUserData)
269 if(pUserData == NULL)
271 VideoLogError("pAppData is null.");
277 VideoLogError("pParent is null.");
283 MpVolumeCtrlData *pCtrlData = NULL;
284 VideoAppData *pAppData = (VideoAppData *)pUserData;
286 pCtrlData = calloc(1, sizeof(MpVolumeCtrlData));
288 pCtrlData->nMinVol = 0;
289 pCtrlData->nMaxVol = MpVideoVolumeCtrlGetMaxVolume();
290 pCtrlData->nCurVol = MpVideoVolumeCtrlGetCurVolume();
292 Evas_Object *layout = elm_layout_add(pParent);
293 elm_layout_file_set(layout, VIDEO_PLAYER_VOLUME_POPUP_EDJ, VOLUME_EDJ_GROUP);
294 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
295 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
296 evas_object_hide(layout);
298 edje_object_signal_callback_add(_EDJ(layout), "drag,start", "volume.progress.drag", MpVideoVolumeCtrlDragStartcb, (void *)pCtrlData);
299 edje_object_signal_callback_add(_EDJ(layout), "drag,stop", "volume.progress.drag", MpVideoVolumeCtrlDragStopcb, (void *)pCtrlData);
300 edje_object_signal_callback_add(_EDJ(layout), "drag", "volume.progress.drag", MpVideoVolumeCtrlDragcb, (void *)pCtrlData);
302 pCtrlData->pAppData = pAppData;
303 pCtrlData->pLayout = layout;
305 MpVideoVolumeCtrlSetCurVolume(pCtrlData->nCurVol);
306 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
307 MpVideoVolumeCtrlUpdateDragValue((void *)pCtrlData);
309 pVolumeData = pCtrlData;
315 void MpVideoVolumeCtrlDestroy(void)
319 if(pVolumeData == NULL)
321 VideoLogError("Volume Ctrl data is NULL");
325 if(pVolumeData->pLayout)
327 evas_object_del(pVolumeData->pLayout);
328 pVolumeData->pLayout = NULL;
332 if(pVolumeData->pHideTimer)
334 ecore_timer_del(pVolumeData->pHideTimer);
335 pVolumeData->pHideTimer = NULL;
338 if(pVolumeData->pDragTimer)
340 ecore_timer_del(pVolumeData->pDragTimer);
341 pVolumeData->pDragTimer = NULL;
350 void MpVideoVolumeCtrlShow()
354 if(pVolumeData == NULL)
356 VideoLogError("Volume Ctrl data is NULL");
359 MpVolumeCtrlData *pCtrlData = pVolumeData;
361 evas_object_show(pCtrlData->pLayout);
363 if(pCtrlData->pHideTimer)
365 ecore_timer_del(pCtrlData->pHideTimer);
366 pCtrlData->pHideTimer = NULL;
369 pCtrlData->pHideTimer = ecore_timer_add(VOLUME_CTRL_HIDE_TIMER_INTERVAL, MpVideoVolumeCtrlHideTimerCb, (void *)pCtrlData);
373 void MpVideoVolumeCtrlHide()
377 if(pVolumeData == NULL)
379 VideoLogError("Volume Ctrl data is NULL");
383 MpVolumeCtrlData *pCtrlData = pVolumeData;
385 if(pCtrlData->pHideTimer)
387 ecore_timer_del(pCtrlData->pHideTimer);
388 pCtrlData->pHideTimer = NULL;
391 evas_object_hide(pCtrlData->pLayout);
395 void MpVideoVolumeCtrlSetVolume(int nVol)
399 if(pVolumeData == NULL)
401 VideoLogError("Volume Ctrl data is NULL");
404 MpVolumeCtrlData *pCtrlData = pVolumeData;
406 if(nVol > pCtrlData->nMaxVol)
408 nVol = pCtrlData->nMaxVol;
416 MpVideoVolumeCtrlShow();
418 pCtrlData->nCurVol = nVol;
419 MpVideoVolumeCtrlSetCurVolume(nVol);
420 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
421 MpVideoVolumeCtrlUpdateDragValue((void *)pCtrlData);
425 int MpVideoVolumeCtrlGetVolume()
429 return MpVideoVolumeCtrlGetCurVolume();
432 bool MpVideoVolumeCtrlGetShowStatus()
436 if(pVolumeData == NULL)
438 VideoLogError("Volume Ctrl data is NULL");
441 MpVolumeCtrlData *pCtrlData = pVolumeData;
443 if(pCtrlData->pHideTimer)