2 * Copyright 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://www.tizenopensource.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.
22 #include <appcore-efl.h>
23 #include <syspopup_caller.h>
26 #include "mp-video-log.h"
27 #include "mp-video-view-ctrl.h"
28 #include "mp-video-type-define.h"
29 #include "mp-util-media-service.h"
30 #include "mp-video-display-view.h"
31 #include "mp-video-string-define.h"
32 #include "mp-video-streaming-view.h"
34 #define MULTIMEDIA_KEY_LONG_PRESS_INTERVAL 4.0
35 #define DETAIL_POPUP_STR_LEN_MAX 20
37 static Evas_Object *pMainLayout = NULL;
38 static Evas_Object *pBackGround = NULL;
39 static Evas_Object *pNaviFrame = NULL;
41 static Ecore_Event_Handler *pHWKeyEventDownHandler = NULL;
42 static Ecore_Event_Handler *pHWKeyEventUpHandler = NULL;
44 static bool bIsKeyCancle = FALSE;
49 static void MpVideoViewCtrlInfoVideoPopupCb(void *pUserData, Evas_Object *pObject, void *pEventInfo)
52 VideoLogInfo("[ERR]");
58 MpUtilDeletePopupHandle();
61 static void MpVideoViewCtrlInfoCb(void *pUserData, Evas_Object *pObject,
67 VideoLogInfo("[ERR]");
71 VideoAppData *pAppData = (VideoAppData *)pUserData;
73 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
75 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
76 MpUtilDetailPopup(pAppData, dgettext(MP_SYS_STRING, MP_COM_BODY_DETAILS), MpVideoViewCtrlInfoVideoPopupCb);
80 static Eina_Bool MpVideoViewCtrlHardkeyUpCb(void *pUserData, int nType,
86 VideoLogInfo("[ERR]");
90 Ecore_Event_Key *pKeyEvent = (Ecore_Event_Key *) pEvent;
92 VideoAppData *pAppData = (VideoAppData *)pUserData;
94 VideoLogInfo("Key down : %s", pKeyEvent->keyname);
97 VideoLogInfo("KEY CANCLE.");
102 if (!strcmp(pKeyEvent->keyname, END_KEY)) {
103 VideoLogInfo("End key up");
104 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlExit(pAppData);
105 } else if (!strcmp(pKeyEvent->keyname, HOME_KEY)) {
106 VideoLogInfo("Home key up");
107 // if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
108 // VideoLogInfo("Push Home key at Streaming player Player.");
109 // pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlExit(pAppData);
110 // } else if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
111 // VideoLogInfo("Push Home key at video player.");
112 // pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStopByAppPause(pAppData);
114 // MpUtilDeletePopupHandle();
115 } else if (!strcmp(pKeyEvent->keyname, POWER_KEY)) {
116 VideoLogInfo("Power key up");
117 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
118 } else if (!strcmp(pKeyEvent->keyname, PAUSE_KEY)) {
119 VideoLogInfo("Pause key up");
120 if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY || pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
121 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
122 } else if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PAUSE) {
123 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
125 } else if (!strcmp(pKeyEvent->keyname, PLAY_KEY)) {
126 VideoLogInfo("Play key up");
127 if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY || pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
128 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
129 } else if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PAUSE) {
130 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
132 } else if (!strcmp(pKeyEvent->keyname, STOP_KEY)) {
133 VideoLogInfo("Stop key up");
134 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
135 } else if (!strcmp(pKeyEvent->keyname, NEXT_KEY)) {
136 VideoLogInfo("Next key up");
137 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPlayNextMedia(pAppData);
138 } else if (!strcmp(pKeyEvent->keyname, PREV_KEY)) {
139 VideoLogInfo("Prev key up");
140 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPlayPreMedia(pAppData);
141 } else if (!strcmp(pKeyEvent->keyname, FORWARD_KEY)) {
142 VideoLogInfo("Forward key up");
143 } else if (!strcmp(pKeyEvent->keyname, REWIND_KEY)) {
144 VideoLogInfo("Rewind key up");
151 static Eina_Bool MpVideoViewCtrlHardkeyDownCb(void *pUserData, int nType, void *pEvent)
156 VideoLogInfo("[ERR]");
160 Ecore_Event_Key *pKeyEvent = (Ecore_Event_Key *) pEvent;
162 VideoLogInfo("Key down : %s", pKeyEvent->keyname);
164 if (!strcmp(pKeyEvent->keyname, END_KEY)) {
165 VideoLogInfo("Back(End) key");
166 } else if (!strcmp(pKeyEvent->keyname, HOME_KEY)) {
167 VideoLogInfo("Home key");
168 } else if (!strcmp(pKeyEvent->keyname, POWER_KEY)) {
169 VideoLogInfo("Power key Down");
170 MpUtilLcdOffForPowerButton();
171 } else if (!strcmp(pKeyEvent->keyname, PAUSE_KEY)) {
172 VideoLogInfo("Pause key down");
173 } else if (!strcmp(pKeyEvent->keyname, PLAY_KEY)) {
174 VideoLogInfo("Play key down");
175 } else if (!strcmp(pKeyEvent->keyname, STOP_KEY)) {
176 VideoLogInfo("Stop key down");
177 } else if (!strcmp(pKeyEvent->keyname, NEXT_KEY)) {
178 VideoLogInfo("Next key down");
179 } else if (!strcmp(pKeyEvent->keyname, PREV_KEY)) {
180 VideoLogInfo("Prev key down");
181 } else if (!strcmp(pKeyEvent->keyname, FORWARD_KEY)) {
182 VideoLogInfo("Forward key down");
183 } else if (!strcmp(pKeyEvent->keyname, REWIND_KEY)) {
184 VideoLogInfo("Rewind key down");
185 } else if (!strcmp(pKeyEvent->keyname, KEY_CANCLE)) {
195 Evas_Object *MpVideoViewCtrlCreateBg(Evas_Object *pWindow)
197 Evas_Object *pBg = elm_bg_add(pWindow);
198 evas_object_size_hint_weight_set(pBg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
199 elm_win_resize_object_add(pWindow, pBg);
200 evas_object_show(pBg);
205 static Evas_Object *MpVideoViewCtrlCreateMainLayout(Evas_Object *pParent, VideoPlayerType nPlayerType)
210 VideoLogInfo("[ERR]");
215 evas_object_del(pMainLayout);
219 pMainLayout = elm_layout_add(pParent);
220 pBackGround = MpVideoViewCtrlCreateBg(pParent);
222 elm_layout_theme_set(pMainLayout, "layout", "application", "default");
224 evas_object_size_hint_weight_set(pMainLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
226 elm_win_resize_object_add(pParent, pMainLayout);
228 elm_object_style_set(pBackGround, "transparent");
230 evas_object_show(pMainLayout);
235 static Evas_Object *MpVideoViewCtrlCreateNaviFrame(Evas_Object *pParent, MpLaunchingAppType nLaunchingApp)
240 VideoLogInfo("[ERR]");
245 evas_object_del(pNaviFrame);
249 pNaviFrame = elm_naviframe_add(pParent);
251 elm_object_part_content_set(pParent, "elm.swallow.content", pNaviFrame);
253 elm_naviframe_prev_btn_auto_pushed_set(pNaviFrame, EINA_FALSE);
255 evas_object_show(pNaviFrame);
260 void MpVideoViewCtrlDestroyControlBar(VideoPlayerType nCurPlayerType)
265 void MpVideoViewCtrlInitVideoViews(VideoAppData *pAppData, MpLaunchingAppType nLaunchingApp, int nVideoViewSortType)
269 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
271 switch (nLaunchingApp) {
272 case MP_LAUNCH_APP_DEFAULT:
273 case MP_LAUNCH_APP_IMAGE_VIEWER:
274 case MP_LAUNCH_APP_SIMPLE_VIEW:
277 case MP_LAUNCH_APP_GALLERY:
278 if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_FOLDER) {
279 MpUtilMediaSvcGetVideoFileListFromFolder(pAppData->szMediaUri, nVideoViewSortType);
280 } else if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_ALL_FOLDER_GALLERY) {
281 MpUtilMediaSvcGetVideoFileListFromAllFolderOfGallery(nVideoViewSortType);
282 } else if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_TAG_GALLERY) {
283 MpUtilMediaSvcGetVideoFileListByTagName(pAppData->szTagNameForVideoList);
284 } else if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_FAVORITE) {
285 MpUtilMediaSvcGetVideoFileListFromFavorite(nVideoViewSortType);
290 MpUtilMediaSvcGetPreNextVideoUrl(pAppData->szMediaUri, pAppData->szPreMediaUri, pAppData->szNextMediaUri);
293 case MP_LAUNCH_APP_MAX:
298 MpVideoDisplayViewPush((void *)pNaviFrame, (void *)MpVideoViewCtrlInfoCb, nLaunchingApp, (void *)pAppData);
299 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
300 MpVideoStreamingViewPush((void *)pNaviFrame, (void *)MpVideoViewCtrlInfoCb, (void *)pAppData);
304 void MpVideoViewCtrlShowNaviFrame(void)
309 evas_object_show(pNaviFrame);
313 void MpVideoViewCtrlHideNaviFrame(void)
318 evas_object_hide(pNaviFrame);
325 bool MpVideoViewCtrlInit(VideoAppData *pAppData)
330 VideoLogInfo("[ERR]");
334 if (pHWKeyEventDownHandler) {
335 ecore_event_handler_del(pHWKeyEventDownHandler);
336 pHWKeyEventDownHandler = NULL;
339 if (pHWKeyEventUpHandler) {
340 ecore_event_handler_del(pHWKeyEventUpHandler);
341 pHWKeyEventUpHandler = NULL;
344 pHWKeyEventDownHandler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, (void *)MpVideoViewCtrlHardkeyDownCb, (void *)pAppData);
345 pHWKeyEventUpHandler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, (void *)MpVideoViewCtrlHardkeyUpCb, (void *)pAppData);
346 elm_win_indicator_mode_set(pAppData->pMainWindow, ELM_WIN_INDICATOR_SHOW);
347 evas_object_color_set(pAppData->pMainWindow, 0, 0, 0, 0);
348 //elm_win_alpha_set(pAppData->pMainWindow, EINA_TRUE);
349 //elm_win_transparent_set(pAppData->pMainWindow, EINA_TRUE);
350 evas_object_move(pAppData->pMainWindow, 0, 0);
352 MpVideoViewCtrlCreateMainLayout(pAppData->pMainWindow, pAppData->nCurPlayerType);
353 MpVideoViewCtrlCreateNaviFrame(pMainLayout, pAppData->nLaunchingAppType);
355 MpVideoViewCtrlInitVideoViews(pAppData, pAppData->nLaunchingAppType, pAppData->nVideoSortType);
360 void MpVideoViewCtrlDestroy(void *pUserData)
365 VideoLogInfo("[ERR]");
369 VideoAppData *pAppData = (VideoAppData *)pUserData;
371 appcore_unset_rotation_cb();
373 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
374 MpVideoDisplayViewDestroy(pUserData);
375 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
376 MpVideoStreamingViewDestroy(pUserData);
379 if (pHWKeyEventDownHandler) {
380 ecore_event_handler_del(pHWKeyEventDownHandler);
381 pHWKeyEventDownHandler = NULL;
384 if (pHWKeyEventUpHandler) {
385 ecore_event_handler_del(pHWKeyEventUpHandler);
386 pHWKeyEventUpHandler = NULL;
390 evas_object_del(pMainLayout);
395 evas_object_del(pNaviFrame);
400 evas_object_del(pBackGround);
404 bIsKeyCancle = FALSE;
407 void MpVideoViewCtrlInitAfterBeginOfStream(void *pUserData)
412 VideoLogInfo("[ERR]");
416 VideoAppData *pAppData = (VideoAppData *)pUserData;
418 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
419 MpVideoDisplayViewInitAfterBeginOfStream(pUserData);
420 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
421 MpVideoStreamingViewInitAfterBeginOfStream(pUserData);
425 void MpVideoViewCtrlPause(void *pUserData)
430 VideoLogInfo("[ERR]");
434 VideoAppData *pAppData = (VideoAppData *)pUserData;
436 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
437 MpVideoDisplayViewUpdatePauseKey();
438 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
439 MpVideoStreamingViewUpdatePauseKey();
443 void MpVideoViewCtrlResume(void *pUserData)
448 VideoLogInfo("[ERR]");
452 VideoAppData *pAppData = (VideoAppData *)pUserData;
454 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
455 MpVideoDisplayViewUpdateResumeKey();
456 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
457 MpVideoStreamingViewUpdateResumeKey();
461 void MpVideoViewShowLayout(void *pUserData)
466 VideoLogInfo("[ERR]");
470 VideoAppData *pAppData = (VideoAppData *)pUserData;
472 elm_win_indicator_mode_set(pAppData->pMainWindow, ELM_WIN_INDICATOR_SHOW);
473 MpVideoViewCtrlShowNaviFrame();
475 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
476 MpVideoDisplayViewActivate();
477 MpVideoDisplayViewShowControlPanel(pUserData);
478 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
479 MpVideoStreamingViewShowControlPanel(pUserData);
483 void MpVideoViewHideLayout(void *pUserData)
488 VideoLogInfo("[ERR]");
492 VideoAppData *pAppData = (VideoAppData *)pUserData;
494 elm_win_indicator_mode_set(pAppData->pMainWindow, ELM_WIN_INDICATOR_HIDE);
495 MpVideoViewCtrlHideNaviFrame();
497 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
498 MpVideoDisplayViewHideControlPanel(pUserData);
499 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
500 MpVideoStreamingViewHideControlPanel(pUserData);
504 void MpVideoViewSetBufferingRateForStreamingView(int nSetBufferingRate,
510 VideoLogInfo("[ERR]");
514 VideoAppData *pAppData = (VideoAppData *)pUserData;
516 if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
517 if(MpUtilCheckRTSPType(pAppData->szMediaUri)) {
518 if(nSetBufferingRate == 0) {
519 MpVideoStreamingViewSetBufferingRate(-1);
522 MpVideoStreamingViewSetBufferingRate(nSetBufferingRate);
526 if (nSetBufferingRate >= 0) {
527 MpVideoStreamingViewSetBufferingRate(nSetBufferingRate);
533 void MpVideoViewHideSoundpath(void *pUserData)
538 VideoLogInfo("[ERR]");
542 VideoAppData *pAppData = (VideoAppData *)pUserData;
544 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
545 MpVideoDisplayViewHideSoundpath();
549 void MpVideoViewCtrlChangeTitle(void *pUserData)
553 VideoLogInfo("[ERR]");
557 VideoAppData *pAppData = (VideoAppData *)pUserData;
559 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
560 MpVideoDisplayViewChangeNaviFrameTitle(pUserData);
564 void MpVideoViewCtrlUpdateSubtitle(double nDuration,
565 char* szSubtitleString)
569 if (!szSubtitleString) {
570 VideoLogInfo("No Exist szSubtitleString pointer.");
574 if (nDuration <= 0 ) {
575 VideoLogInfo("Duration time 0.");
579 MpVideoDisplayViewUpdateSubtitle(nDuration, szSubtitleString);
582 bool MpVideoViewCtrlIsTopView(void *pUserData)
585 VideoLogInfo("[ERR]");
591 VideoAppData *pAppData = (VideoAppData *)pUserData;
593 bool bIstopView = FALSE;
595 if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
596 VideoLogInfo("VIDEO PLAYER");
597 if (!MpVideoDisplayViewIsTopView()) {
603 } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
604 VideoLogInfo("STREAMING PLAYER");
605 bIstopView = MpVideoStreamingViewIsTopView();
611 void MpVideoViewCtrlShowNocontentImage(void)
615 MpVideoDisplayViewShowNocontentImage();
618 void MpVideoViewCtrlHideNocontentImage(void)
622 MpVideoDisplayViewHideNocontentImage();
625 void MpVideoViewCtrlResetProgressBar(void *pUserData)
627 MpVideoDisplayViewResetProgressBar(pUserData);