package com.iwedia.gui.callbacks; import android.os.Handler; import android.os.Message; import android.os.RemoteException; import android.util.Log; import com.iwedia.comm.IPvrCallback; import com.iwedia.comm.system.external_and_local_storage.IExternalLocalStorageSettings; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVMultimediaController.ControlProvider; import com.iwedia.gui.components.A4TVProgressBarPVR; import com.iwedia.gui.components.A4TVProgressBarPVR.ControlProviderPVR; import com.iwedia.gui.components.A4TVVideoView; import com.iwedia.gui.components.dialogs.PVRSettingsDialog; import com.iwedia.gui.config_handler.ConfigHandler; import com.iwedia.gui.dual_video.DualVideoManager; import com.iwedia.gui.listeners.MainKeyListener; import com.iwedia.gui.osd.OSDGlobal; import com.iwedia.gui.osd.OSDHandlerHelper; import com.iwedia.gui.osd.infobanner.InfoBannerHandler; import com.iwedia.gui.pvr.PVRHandler; /** * Handle OneTouchRecord, TimeShift and SmartRecord CallBacks. */ public class PVRCallBack extends IPvrCallback.Stub implements OSDGlobal { private static final String TAG = "PVRCallback"; /** Messages */ private static final int MESSAGE_USB_SPEED = 0; private static final int MESSAGE_TIMESHIFT_STOP = 1; private static final int MESSAGE_PLAYBACK_STOP = 2; private static final int MESSAGE_RECORD_ADD = 3; private static final int MESSAGE_RECORD_REMOVE = 4; private static final int MESSAGE_RECORD_POSITION = 5; private static final int MESSAGE_RECORD_START = 6; private static final int MESSAGE_RECORD_STOP = 7; /** Instance of MainActivity */ private MainActivity mActivity = null; /** Instance of CallBack Handler. */ private CallBackHandler mCallBackHandler = null; /** UI Handler */ private Handler mHandler = null; /** Fields */ private int mTimeShiftRecordTime = 0; private int mTimeShiftPlayBackTime = 0; public PVRCallBack(CallBackHandler callBackHandler, MainActivity activity) { mCallBackHandler = callBackHandler; mActivity = activity; initializeHandler(); } @Override public void eventUSBMediaStorageFull() throws RemoteException { mCallBackHandler.showToastMessage(R.string.usb_media_storage_is_full); } @Override public void eventUsbSpeed(final int speed) throws RemoteException { Log.i(TAG, "speed = " + speed); Message.obtain(mHandler, MESSAGE_USB_SPEED, speed).sendToTarget(); } @Override public void timeshiftFastForward(int timeshiftSpeed) throws RemoteException { /** FF */ Log.i(TAG, "TimeShift FF - timeshiftSpeed: " + timeshiftSpeed); ControlProviderPVR.setFileDescription(mCallBackHandler .getStringFromRes(R.string.fast_forward_timeshift) + " " + timeshiftSpeed + "X"); OSDHandlerHelper.setHandlerState(PVR_STATE_FF_TIME_SHIFT); } @Override public void timeshiftPause() throws RemoteException { /** Pause */ Log.i(TAG, "TimeShift Pause"); ControlProviderPVR.setFileDescription(mCallBackHandler .getStringFromRes(R.string.pause_timeshift)); OSDHandlerHelper.setHandlerState(PVR_STATE_PAUSE_TIME_SHIFT); } @Override public void timeshiftPosition(int recordTime, int playbackTime, int endTime) throws RemoteException { Log.i(TAG, "TimeShift Position"); if (mTimeShiftRecordTime != recordTime) { PVRHandler.updatePVRTime(recordTime, endTime, PVR_STATE_RECORDING); mTimeShiftRecordTime = recordTime; } if (mTimeShiftPlayBackTime != playbackTime) { PVRHandler.updatePVRTime(playbackTime, endTime, CURL_HANDLER_STATE_DO_NOTHING); mTimeShiftPlayBackTime = playbackTime; } } @Override public void timeshiftRewind(int timeshiftSpeed) throws RemoteException { /** REW */ Log.i(TAG, "TimeShift REW - timeshiftSpeed: " + timeshiftSpeed); ControlProviderPVR.setFileDescription(mCallBackHandler .getStringFromRes(R.string.rewind_timeshift) + " " + timeshiftSpeed + "X"); OSDHandlerHelper.setHandlerState(PVR_STATE_REW_TIME_SHIFT); } @Override public void timeshiftPlay() throws RemoteException { /** PlayBack started */ Log.i(TAG, "TimeShift PlayBack Started"); ControlProviderPVR.setFileDescription(mCallBackHandler .getStringFromRes(R.string.play_timeshift)); ControlProviderPVR.setFlagPlay(true); OSDHandlerHelper.setHandlerState(PVR_STATE_PLAY_TIME_SHIFT); } @Override public void timeshiftStart() throws RemoteException { /** Start */ Log.i(TAG, "TimeShift Start"); mTimeShiftRecordTime = 0; mTimeShiftPlayBackTime = 0; PVRHandler.prepareRecord(); ControlProviderPVR.setFileDescription(mCallBackHandler .getStringFromRes(R.string.pause_timeshift)); OSDHandlerHelper.setHandlerState(PVR_STATE_PAUSE_TIME_SHIFT); } @Override public void timeshiftStop() throws RemoteException { Message.obtain(mHandler, MESSAGE_TIMESHIFT_STOP).sendToTarget(); } @Override public void playbackFastForward(int speed) throws RemoteException { /** FF */ Log.i(TAG, "FF - playbackFastForward: " + speed); ControlProvider.setFileDescription(mCallBackHandler .getStringFromRes(R.string.fast_forward) + " " + speed + "X"); OSDHandlerHelper.setHandlerState(PVR_STATE_FF_PLAY_BACK); } @Override public void playbackPause() throws RemoteException { /** Pause */ Log.i(TAG, "Pause"); ControlProvider.setFileDescription(mCallBackHandler .getStringFromRes(R.string.pause)); OSDHandlerHelper.setHandlerState(PVR_STATE_PAUSE_PLAY_BACK); } @Override public void playbackPlay() throws RemoteException { if (MainKeyListener.getAppState() == MainKeyListener.MULTIMEDIA_PLAYBACK) { /** PlayBack started */ Log.i(TAG, "PlayBack Started"); ControlProvider.setFlagPlay(true); ControlProvider.setFileDescription(mCallBackHandler .getStringFromRes(R.string.play)); OSDHandlerHelper.setHandlerState(PVR_STATE_PLAY_PLAY_BACK); } } @Override public void playbackPosition(int playTime) throws RemoteException { Log.i(TAG, "playTimeChanged: elasped = " + playTime); PVRHandler.updatePVRTime(playTime, 0, CURL_HANDLER_STATE_DO_NOTHING); } @Override public void playbackRewind(int speed) throws RemoteException { /** REW */ Log.i(TAG, "REW - playbackRewind: " + speed); ControlProvider.setFileDescription(mCallBackHandler .getStringFromRes(R.string.rewind) + " " + speed + "X"); OSDHandlerHelper.setHandlerState(PVR_STATE_REW_PLAY_BACK); } @Override public void playbackStop() throws RemoteException { /** Stopped */ Message.obtain(mHandler, MESSAGE_PLAYBACK_STOP).sendToTarget(); } @Override public void recordAdd() throws RemoteException { Log.i(TAG, "recordAdd"); Message.obtain(mHandler, MESSAGE_RECORD_ADD).sendToTarget(); } @Override public void recordRemove() throws RemoteException { Log.i(TAG, "recordRemove"); Message.obtain(mHandler, MESSAGE_RECORD_REMOVE).sendToTarget(); } @Override public void recordPosition(int recordTime, int endTime) throws RemoteException { Log.i(TAG, "recordPosition: recordTime = " + recordTime + " endTime = " + endTime); Message.obtain(mHandler, MESSAGE_RECORD_POSITION).sendToTarget(); if (mActivity.getPageCurl().getCurrentState() != STATE_MULTIMEDIA_CONTROLLER) { PVRHandler.updatePVRTime(recordTime, endTime, PVR_STATE_RECORDING); } } @Override public void recordStart() throws RemoteException { Log.i(TAG, "recordStart"); Message.obtain(mHandler, MESSAGE_RECORD_START).sendToTarget(); } @Override public void recordStop() throws RemoteException { Log.i(TAG, "recordStop"); Message.obtain(mHandler, MESSAGE_RECORD_STOP); } private void initializeHandler() { mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_USB_SPEED: { PVRSettingsDialog.setUsbSpeed((Integer) msg.obj); break; } case MESSAGE_TIMESHIFT_STOP: { Log.i(TAG, "TimeShift Stopped"); A4TVProgressBarPVR.getControlProviderPVR() .prepareStop(); try { mActivity.service.getContentListControl() .startVideoPlayback(); } catch (RemoteException e) { Log.e(TAG, "There was an error in Starting Live Stream.", e); } break; } case MESSAGE_PLAYBACK_STOP: { if (MainKeyListener.getAppState() == MainKeyListener.MULTIMEDIA_PLAYBACK) { // TODO: Applies on primary channel only final int mDisplayId = 0; if (mActivity.getPageCurl() .getPvrPlayerController() != null) { mActivity.getPageCurl() .getPvrPlayerController() .prepareStop(mDisplayId); } // Blank Screen try { mActivity.service.getVideoControl().videoBlank( 0, true); } catch (Exception e) { Log.i(TAG, "Can not video blank!", e); } } else { if (mActivity.getSecondaryVideoView().getPlayMode() == A4TVVideoView.PAP_DISPLAY_MODE) { if (mActivity.getPrimaryMultimediaVideoView() == null) mActivity.getPrimaryVideoView().setScaling( 0, 0, 1920, 1080); } mActivity.getSecondaryVideoView().hide(); try { mActivity.service.getContentListControl() .setActiveContent(null, 1); } catch (RemoteException e) { e.printStackTrace(); } /** Notify pvr had stoped */ DualVideoManager.syncPVRHandle.sendEmptyMessage(1); } break; } case MESSAGE_RECORD_ADD: { final int command = 0; final String param = "EXIT"; try { if (mActivity.service.getHbbTvControl() .notifyAppMngr(command, param)) { mActivity.webDialog.getHbbTVView().setAlpha( (float) 0.00); mActivity.setKeySet(0); } } catch (RemoteException e) { e.printStackTrace(); } OSDHandlerHelper.setHandlerState(PVR_STATE_RECORDING); PVRHandler.prepareRecord(); ControlProviderPVR.setFileDescription(mCallBackHandler .getStringFromRes(R.string.shedule_record)); mActivity.getPageCurl().multimediaControllerPVR(false); break; } case MESSAGE_RECORD_REMOVE: { A4TVProgressBarPVR.getControlProviderPVR() .prepareStop(); final int command = 0; final String param = "EXIT"; try { if (mActivity.service.getHbbTvControl() .notifyAppMngr(command, param)) { mActivity.webDialog.getHbbTVView().setAlpha( (float) 0.00); mActivity.setKeySet(0); } } catch (RemoteException e) { e.printStackTrace(); } break; } case MESSAGE_RECORD_POSITION: { try { if (A4TVProgressBarPVR.getControlProviderPVR() != null) { if (!A4TVProgressBarPVR.getControlProviderPVR() .isDiskNearlyFull()) { IExternalLocalStorageSettings lStorage = mActivity.service .getSystemControl() .getExternalLocalStorageControl(); if (lStorage.isExternalMemoryFull()) { A4TVProgressBarPVR .getControlProviderPVR() .setFlagDiskNearlyFull(true); mActivity.getPageCurl() .multimediaControllerPVR(true); } } } } catch (Exception e) { Log.e(TAG, "Could not getExternalLocalStorageControl", e); } break; } case MESSAGE_RECORD_START: { if (!A4TVProgressBarPVR .getControlProviderPVR() .getFileDescription() .equals(mCallBackHandler .getStringFromRes(R.string.shedule_record))) { if (A4TVProgressBarPVR .getControlProviderPVR() .getFileDescription() .equals(mCallBackHandler .getStringFromRes(R.string.prepare_timeshift))) { ControlProviderPVR .setFileDescription("Timeshift Recording"); } else { if (A4TVProgressBarPVR .getControlProviderPVR() .getFileDescription() .equals(mCallBackHandler .getStringFromRes(R.string.prepare_record))) { ControlProviderPVR .setFileDescription(mCallBackHandler .getStringFromRes(R.string.record)); } } } /** This is added for Schedule Record */ PVRHandler.prepareRecord(); break; } case MESSAGE_RECORD_STOP: { mActivity.getPageCurl().multimediaControllerPVR(true); A4TVProgressBarPVR.getControlProviderPVR() .prepareStop(); if (mActivity.getPageCurl() instanceof InfoBannerHandler) { mActivity.getPageCurl().multimediaControllerPVR( true); } break; } default: { break; } } } }; } }