4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * JongDong Lee <jongdong.lee@samsung.com>, ChangSun Lee <cs78.lee@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 #include <sound_manager.h>
23 #include <Elementary.h>
25 #include "video-player.h"
28 #include "mp-video-log.h"
29 #include "mp-video-type-define.h"
30 #include "mp-video-value-define.h"
31 #include "mp-video-string-define.h"
32 #include "mp-video-volume-ctrl.h"
34 //#include "mp-video-statistics.h"
36 #define VOLUME_CTRL_HIDE_TIMER_INTERVAL 3.0
37 #define VOLUME_CTRL_DRAG_TIMER_INTERVAL 0.3
40 typedef struct __MpVolumeCtrlData MpVolumeCtrlData;
42 struct __MpVolumeCtrlData{
43 VideoAppData *pAppData;
47 Ecore_Timer *pHideTimer;
48 Ecore_Timer *pDragTimer;
57 static MpVolumeCtrlData *pVolumeData = NULL;
59 static void MpVideoVolumeCtrlUpdateTextValue(void *pUserData)
65 VideoLogError("Volume ctrl data is null.");
71 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
74 snprintf(szVol, 3, "%d", pCtrlData->nCurVol);
76 VideoLogError("%d , %s", pCtrlData->nCurVol, szVol);
78 edje_object_part_text_set(_EDJ(pCtrlData->pLayout), "volume.progress.circle.txt", szVol);
82 static void MpVideoVolumeCtrlUpdateDragValue(void *pUserData)
88 VideoLogError("Volume ctrl data is null.");
94 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
98 fVolPos = ((double)pCtrlData->nCurVol/(double)pCtrlData->nMaxVol);
99 edje_object_part_drag_value_set(_EDJ(pCtrlData->pLayout), "volume.progress.drag", fVolPos, 0.0);
103 static int MpVideoVolumeCtrlGetMaxVolume()
107 int nRet = SOUND_MANAGER_ERROR_NONE;
109 nRet = sound_manager_get_max_volume (SOUND_TYPE_MEDIA, &nMax);
110 if(nRet != SOUND_MANAGER_ERROR_NONE)
112 VideoLogError("Sound manage get max volue fail : %d", nRet);
118 static int MpVideoVolumeCtrlGetCurVolume()
122 int nRet = SOUND_MANAGER_ERROR_NONE;
124 nRet = sound_manager_get_volume (SOUND_TYPE_MEDIA, &nVol);
125 if(nRet != SOUND_MANAGER_ERROR_NONE)
127 VideoLogError("Sound manage get current volue fail : %d", nRet);
134 static void MpVideoVolumeCtrlSetCurVolume(int nVol)
138 int nRet = SOUND_MANAGER_ERROR_NONE;
139 nRet = sound_manager_set_volume (SOUND_TYPE_MEDIA, nVol);
140 if(nRet != SOUND_MANAGER_ERROR_NONE)
142 VideoLogError("Sound manage get current volue fail : %d", nRet);
149 static Eina_Bool MpVideoVolumeCtrlHideTimerCb(void *pUserData)
152 if(pUserData == NULL)
154 VideoLogError("pAppData is null.");
158 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
159 if(pCtrlData->pHideTimer)
161 ecore_timer_del(pCtrlData->pHideTimer);
162 pCtrlData->pHideTimer = NULL;
165 pCtrlData->pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlHideVolume(pCtrlData->pAppData);
171 static Eina_Bool MpVideoVolumeCtrlDragTimerCb(void *pUserData)
174 if(pUserData == NULL)
176 VideoLogError("pAppData is null.");
182 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
184 double fVolPos = 0.0;
186 edje_object_part_drag_value_get(_EDJ(pCtrlData->pLayout), "volume.progress.drag", &fVolPos, NULL);
188 pCtrlData->nCurVol = (int)(pCtrlData->nMaxVol * fVolPos);
190 MpVideoVolumeCtrlSetCurVolume(pCtrlData->nCurVol);
192 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
199 static void MpVideoVolumeCtrlDragStartcb(void *pUserData, Evas_Object *obj, const char *szEmission, const char *szSource)
202 if(pUserData == NULL)
204 VideoLogError("pAppData is null.");
207 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
209 if(pCtrlData->pHideTimer)
211 ecore_timer_del(pCtrlData->pHideTimer);
212 pCtrlData->pHideTimer = NULL;
215 pCtrlData->pDragTimer = ecore_timer_add(VOLUME_CTRL_DRAG_TIMER_INTERVAL, MpVideoVolumeCtrlDragTimerCb, (void *)pCtrlData);
218 static void MpVideoVolumeCtrlDragStopcb(void *pUserData, Evas_Object *obj, const char *szEmission, const char *szSource)
221 if(pUserData == NULL)
223 VideoLogError("pAppData is null.");
226 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
228 if(pCtrlData->pHideTimer)
230 ecore_timer_del(pCtrlData->pHideTimer);
231 pCtrlData->pHideTimer = NULL;
234 pCtrlData->pHideTimer = ecore_timer_add(VOLUME_CTRL_HIDE_TIMER_INTERVAL, MpVideoVolumeCtrlHideTimerCb, (void *)pCtrlData);
236 if(pCtrlData->pDragTimer)
238 ecore_timer_del(pCtrlData->pDragTimer);
239 pCtrlData->pDragTimer = NULL;
242 double fVolPos = 0.0;
243 edje_object_part_drag_value_get(_EDJ(pCtrlData->pLayout), "volume.progress.drag", &fVolPos, NULL);
244 pCtrlData->nCurVol = (int)(pCtrlData->nMaxVol * fVolPos);
246 MpVideoVolumeCtrlSetCurVolume(pCtrlData->nCurVol);
247 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
250 static void MpVideoVolumeCtrlDragcb(void *pUserData, Evas_Object *obj, const char *szEmission, const char *szSource)
254 if(pUserData == NULL)
256 VideoLogError("pAppData is null.");
262 MpVolumeCtrlData *pCtrlData = (MpVolumeCtrlData *)pUserData;
263 double fVolPos = 0.0;
264 edje_object_part_drag_value_get(_EDJ(pCtrlData->pLayout), "volume.progress.drag", &fVolPos, NULL);
265 pCtrlData->nCurVol = (int)(pCtrlData->nMaxVol * fVolPos);
267 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
272 void *MpVideoVolumeCtrlInit(void *pParent, void* pUserData)
274 if(pUserData == NULL)
276 VideoLogError("pAppData is null.");
282 VideoLogError("pParent is null.");
288 MpVolumeCtrlData *pCtrlData = NULL;
289 VideoAppData *pAppData = (VideoAppData *)pUserData;
291 pCtrlData = calloc(1, sizeof(MpVolumeCtrlData));
293 pCtrlData->nMinVol = 0;
294 pCtrlData->nMaxVol = MpVideoVolumeCtrlGetMaxVolume();
295 pCtrlData->nCurVol = MpVideoVolumeCtrlGetCurVolume();
297 Evas_Object *layout = elm_layout_add(pParent);
298 elm_layout_file_set(layout, VIDEO_PLAYER_VOLUME_POPUP_EDJ, VOLUME_EDJ_GROUP);
299 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
300 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
301 evas_object_hide(layout);
303 edje_object_signal_callback_add(_EDJ(layout), "drag,start", "volume.progress.drag", MpVideoVolumeCtrlDragStartcb, (void *)pCtrlData);
304 edje_object_signal_callback_add(_EDJ(layout), "drag,stop", "volume.progress.drag", MpVideoVolumeCtrlDragStopcb, (void *)pCtrlData);
305 edje_object_signal_callback_add(_EDJ(layout), "drag", "volume.progress.drag", MpVideoVolumeCtrlDragcb, (void *)pCtrlData);
307 pCtrlData->pAppData = pAppData;
308 pCtrlData->pLayout = layout;
310 MpVideoVolumeCtrlSetCurVolume(pCtrlData->nCurVol);
311 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
312 MpVideoVolumeCtrlUpdateDragValue((void *)pCtrlData);
314 pVolumeData = pCtrlData;
320 void MpVideoVolumeCtrlDestroy(void)
324 if(pVolumeData == NULL)
326 VideoLogError("Volume Ctrl data is NULL");
330 if(pVolumeData->pLayout)
332 evas_object_del(pVolumeData->pLayout);
333 pVolumeData->pLayout = NULL;
337 if(pVolumeData->pHideTimer)
339 ecore_timer_del(pVolumeData->pHideTimer);
340 pVolumeData->pHideTimer = NULL;
343 if(pVolumeData->pDragTimer)
345 ecore_timer_del(pVolumeData->pDragTimer);
346 pVolumeData->pDragTimer = NULL;
355 void MpVideoVolumeCtrlShow()
359 if(pVolumeData == NULL)
361 VideoLogError("Volume Ctrl data is NULL");
364 MpVolumeCtrlData *pCtrlData = pVolumeData;
366 evas_object_show(pCtrlData->pLayout);
368 if(pCtrlData->pHideTimer)
370 ecore_timer_del(pCtrlData->pHideTimer);
371 pCtrlData->pHideTimer = NULL;
374 pCtrlData->pHideTimer = ecore_timer_add(VOLUME_CTRL_HIDE_TIMER_INTERVAL, MpVideoVolumeCtrlHideTimerCb, (void *)pCtrlData);
378 void MpVideoVolumeCtrlHide()
382 if(pVolumeData == NULL)
384 VideoLogError("Volume Ctrl data is NULL");
388 MpVolumeCtrlData *pCtrlData = pVolumeData;
390 if(pCtrlData->pHideTimer)
392 ecore_timer_del(pCtrlData->pHideTimer);
393 pCtrlData->pHideTimer = NULL;
396 evas_object_hide(pCtrlData->pLayout);
400 void MpVideoVolumeCtrlSetVolume(int nVol)
404 if(pVolumeData == NULL)
406 VideoLogError("Volume Ctrl data is NULL");
409 MpVolumeCtrlData *pCtrlData = pVolumeData;
411 if(nVol > pCtrlData->nMaxVol)
413 nVol = pCtrlData->nMaxVol;
421 MpVideoVolumeCtrlShow();
423 pCtrlData->nCurVol = nVol;
424 MpVideoVolumeCtrlSetCurVolume(nVol);
425 MpVideoVolumeCtrlUpdateTextValue((void *)pCtrlData);
426 MpVideoVolumeCtrlUpdateDragValue((void *)pCtrlData);
430 int MpVideoVolumeCtrlGetVolume()
434 return MpVideoVolumeCtrlGetCurVolume();
437 bool MpVideoVolumeCtrlGetShowStatus()
441 if(pVolumeData == NULL)
443 VideoLogError("Volume Ctrl data is NULL");
446 MpVolumeCtrlData *pCtrlData = pVolumeData;
448 if(pCtrlData->pHideTimer)