package com.iwedia.gui.pvr;
import android.os.RemoteException;
import android.util.Log;
import com.iwedia.comm.content.Content;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVMultimediaController;
import com.iwedia.gui.components.A4TVProgressBarPVR;
import com.iwedia.gui.components.A4TVProgressBarPVR.ControlProviderPVR;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.config_handler.ConfigHandler;
import com.iwedia.gui.listeners.MainKeyListener;
import com.iwedia.gui.osd.Conversions;
import com.iwedia.gui.osd.OSDGlobal;
import com.iwedia.gui.osd.OSDHandlerHelper;
import com.iwedia.gui.util.DateTimeConversions;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Handle PVR Functions.
*
* @author Milos Milanovic
*/
public class PVRHandler implements OSDGlobal {
private static final String TAG = "PVRHandler";
private static String pvrCurrentTime = "";
private static int pvrEndTime = 0;
// TODO: Applies on main display only
private final int mDisplayId = 0;
public static void updatePVRTime(int elapsedTime, int endTime, int type) {
if(!ConfigHandler.TVPLATFORM){
elapsedTime*=1000;
//endTime*=1000; //TODO
}
if (MainActivity.activity.getPageCurl().getCurrentState() == STATE_PVR) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date;
long currentMSec = 0;
int nextMSec;
try {
date = sdf.parse(pvrCurrentTime);
currentMSec = date.getTime();
} catch (Exception e) {
Log.i(TAG, "Method: updatePVRTime, rawMilliseconds");
e.printStackTrace();
}
if (type == PVR_STATE_RECORDING) {
/** Add to description that disk is nearly full */
if (A4TVProgressBarPVR.getControlProviderPVR()
.isDiskNearlyFull()
&& OSDHandlerHelper.getHandlerState() == PVR_STATE_RECORDING) {
ControlProviderPVR.setFileDescription(MainActivity.activity
.getString(R.string.pvr_low_disk_space));
}
pvrEndTime = endTime;
int progressValue = Conversions.getPVRPassedPercent(
(elapsedTime), endTime);
A4TVProgressBarPVR.getControlProviderPVR()
.setSecondaryProgressValue(progressValue);
nextMSec = (int) (currentMSec + (pvrEndTime));
A4TVProgressBarPVR.getControlProviderPVR().setElapsedTime(
(int) currentMSec);
A4TVProgressBarPVR.getControlProviderPVR().setSecondTime(
elapsedTime);
A4TVProgressBarPVR.getControlProviderPVR()
.setDuration(nextMSec);
MainActivity.activity.getPageCurl()
.updatePlayingTime((int) currentMSec, nextMSec,
elapsedTime, progressValue);
} else {
switch (OSDHandlerHelper.getHandlerState()) {
case PVR_STATE_REW_TIME_SHIFT:
case PVR_STATE_PAUSE_TIME_SHIFT:
case PVR_STATE_FF_TIME_SHIFT:
case PVR_STATE_PLAY_TIME_SHIFT: {
if (pvrEndTime != 0) {
A4TVProgressBarPVR.getControlProviderPVR()
.setProgressValue(
Conversions.getPVRPassedPercent(
(elapsedTime % pvrEndTime),
pvrEndTime));
}
A4TVProgressBarPVR.getControlProviderPVR()
.setFirstTime(elapsedTime);
MainActivity.activity.getPageCurl()
.updateTimeShiftPlayingTime(
elapsedTime,
Conversions.getPVRPassedPercent(
(elapsedTime % pvrEndTime),
pvrEndTime));
break;
}
default: {
break;
}
}
}
} else if (MainActivity.activity.getPageCurl().getCurrentState() == STATE_MULTIMEDIA_CONTROLLER) {
switch (OSDHandlerHelper.getHandlerState()) {
case PVR_STATE_REW_PLAY_BACK:
case PVR_STATE_PAUSE_PLAY_BACK:
case PVR_STATE_FF_PLAY_BACK:
case PVR_STATE_PLAY_PLAY_BACK: {
A4TVMultimediaController.getControlProvider()
.setElapsedTime(elapsedTime);
A4TVMultimediaController.getControlProvider().setDuration(
(Integer.valueOf(A4TVMultimediaController
.getControlProvider().getContent()
.getDurationTime())) * 1000);
int progressValue = Conversions.getPVRPassedPercent(
elapsedTime, endTime);
MainActivity.activity.getPageCurl().updatePlayingTime(0,
endTime, elapsedTime, progressValue);
break;
}
default: {
break;
}
}
}
}
public boolean pvrStop() {
Log.d(TAG,
"pvrStop, handlerState: " + OSDHandlerHelper.getHandlerState());
/* set screensaver */
MainActivity.screenSaverDialog
.setScreenSaverCause(MainActivity.screenSaverDialog.LIVE);
MainActivity.screenSaverDialog.updateScreensaverTimer();
switch (OSDHandlerHelper.getHandlerState()) {
case PVR_STATE_RECORDING: {
try {
/*
* MainActivity.service.getPvrControl().destroyRecord(
* MainActivity.service.getContentListControl()
* .getActiveContent(mDisplayId) .getIndexInMasterList());
*/
MainActivity.service.getPvrControl().destroyRecord(0);
OSDHandlerHelper.setHandlerState(PVR_STATE_STOP_TIME_SHIFT);
// } else {
// return false;
// }
} catch (Exception e) {
Log.e(TAG, "StopRecord", e);
}
break;
}
case PVR_STATE_REW_TIME_SHIFT:
case PVR_STATE_FF_TIME_SHIFT:
case PVR_STATE_PLAY_TIME_SHIFT:
case PVR_STATE_PAUSE_TIME_SHIFT: {
try {
/** Save Current Subtitle State */
saveCurrentSubtitleState();
MainActivity.service.getPvrControl().stopTimeshift(false);
// Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_STOP_TIME_SHIFT);
/*
* } else { return false; }
*/
// MainActivity.service.getPvrControl().stopTimeshift(false);
// CurlHandler.setCurlHandlerState(PVR_STATE_STOP_TIME_SHIFT);
} catch (Exception e) {
Log.e(TAG, "StopTimeShift", e);
return false;
}
break;
}
case PVR_STATE_REW_PLAY_BACK:
case PVR_STATE_FF_PLAY_BACK:
case PVR_STATE_PLAY_PLAY_BACK:
case PVR_STATE_PAUSE_PLAY_BACK: {
try {
Log.i(TAG, "PVR_STATE_STOP_PLAY_BACK");
MainActivity.service.getPvrControl().stopPlayback();
// Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_STOP_PLAY_BACK);
// } else {
// return false;
// }
} catch (Exception e) {
Log.e(TAG, "StopPlayback", e);
return false;
}
break;
}
default: {
Log.i(TAG, "PVR STOP FALSE");
return false;
// break;
}
}
Log.i(TAG, "PVR STOP TRUE");
return true;
}
public boolean pvrFastForward() {
Log.d(TAG, "pvrFF, handlerState: " + OSDHandlerHelper.getHandlerState());
switch (OSDHandlerHelper.getHandlerState()) {
case PVR_STATE_FF_TIME_SHIFT:
case PVR_STATE_REW_TIME_SHIFT:
case PVR_STATE_PAUSE_TIME_SHIFT:
case PVR_STATE_PLAY_TIME_SHIFT: {
try {
MainActivity.service.getPvrControl().fastForward();
// // Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_FF_TIME_SHIFT);
/*
* } else { return false; }
*/
// MainActivity.service.getPvrControl()
// .fastForwardTimeshift(false);
// CurlHandler.setCurlHandlerState(PVR_STATE_FF_TIME_SHIFT);
Log.i(TAG,
"Current State: "
+ OSDHandlerHelper.getHandlerState());
} catch (Exception e) {
Log.e(TAG, "fastForwardTimeshift", e);
return false;
}
break;
}
case PVR_STATE_FF_PLAY_BACK:
case PVR_STATE_PLAY_PLAY_BACK: {
try {
MainActivity.service.getPvrControl().fastForward();
// // Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_FF_PLAY_BACK);
/*
* } else { return false; }
*/
} catch (Exception e) {
Log.e(TAG, "fastForwardPlayback", e);
return false;
}
break;
}
default: {
return false;
// break;
}
}
return true;
}
public boolean pvrRewind() {
Log.d(TAG, "pvrRW, handlerState: " + OSDHandlerHelper.getHandlerState());
switch (OSDHandlerHelper.getHandlerState()) {
case PVR_STATE_REW_TIME_SHIFT:
case PVR_STATE_FF_TIME_SHIFT:
case PVR_STATE_PAUSE_TIME_SHIFT:
case PVR_STATE_PLAY_TIME_SHIFT: {
try {
MainActivity.service.getPvrControl().rewind();
// // Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_REW_TIME_SHIFT);
/*
* } else { return false; }
*/
// MainActivity.service.getPvrControl()
// .fastForwardTimeshift(false);
// CurlHandler.setCurlHandlerState(PVR_STATE_FF_TIME_SHIFT);
Log.i(TAG,
"Current State: "
+ OSDHandlerHelper.getHandlerState());
} catch (Exception e) {
Log.e(TAG, "rewindTimeshift", e);
return false;
}
break;
}
case PVR_STATE_REW_PLAY_BACK:
case PVR_STATE_PLAY_PLAY_BACK: {
try {
MainActivity.service.getPvrControl().rewind();
// // Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_REW_PLAY_BACK);
/*
* } else { return false; }
*/
} catch (Exception e) {
Log.e(TAG, "rewindPlayback", e);
return false;
}
break;
}
default: {
return false;
// break;
}
}
return true;
}
public boolean pvrRecord() {
Log.d(TAG, "pvrRecord " + OSDHandlerHelper.getHandlerState());
switch (OSDHandlerHelper.getHandlerState()) {
case STATE_INFO_BANNER_HIDDEN:
case STATE_INFO_BANNER_SHOWN:
case CURL_HANDLER_STATE_DO_NOTHING:
case PVR_STATE_STOP_PLAY_BACK:
case PVR_STATE_STOP_TIME_SHIFT: {
try {
Log.d(TAG, "pvrRecord: createOneTouchRecord");
MainActivity.service.getPvrControl().createOnTouchRecord(
MainActivity.service.getContentListControl()
.getActiveContent(mDisplayId)
.getIndexInMasterList());
// Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_RECORDING);
/*
* } else { return false; }
*/
} catch (Exception e) {
Log.e(TAG, "createOneTouchRecord", e);
return false;
}
break;
}
default: {
return false;
}
}
return true;
}
public boolean pvrPlay() {
Log.d(TAG,
"pvrPlay, handlerState: " + OSDHandlerHelper.getHandlerState());
/* set screensaver */
MainActivity.screenSaverDialog
.setScreenSaverCause(MainActivity.screenSaverDialog.LIVE);
MainActivity.screenSaverDialog.updateScreensaverTimer();
switch (OSDHandlerHelper.getHandlerState()) {
case PVR_STATE_REW_TIME_SHIFT:
case PVR_STATE_FF_TIME_SHIFT:
case PVR_STATE_PAUSE_TIME_SHIFT: {
try {
MainActivity.service.getPvrControl().pause(false);
/** Return Previous Subtitle State */
setPreviousSubtitleState();
// Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_PLAY_TIME_SHIFT);
/*
* } else { return false; }
*/
// MainActivity.service.getPvrControl().pauseTimeshift(false);
// CurlHandler.setCurlHandlerState(PVR_STATE_PLAY_TIME_SHIFT);
} catch (Exception e) {
Log.e(TAG, "pauseTimeshift", e);
return false;
}
break;
}
case PVR_STATE_REW_PLAY_BACK:
case PVR_STATE_FF_PLAY_BACK:
case PVR_STATE_PAUSE_PLAY_BACK: {
try {
MainActivity.service.getPvrControl().pause(false);
// Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_PLAY_PLAY_BACK);
/*
* } else { return false; }
*/
} catch (Exception e) {
Log.e(TAG, "pausePlayback", e);
return false;
}
break;
}
default: {
return false;
// break;
}
}
return true;
}
public boolean pvrPause() {
Log.d(TAG,
"pvrPause, handlerState: " + OSDHandlerHelper.getHandlerState());
/* set screensaver */
MainActivity.screenSaverDialog
.setScreenSaverCause(MainActivity.screenSaverDialog.PAUSE);
MainActivity.screenSaverDialog.updateScreensaverTimer();
switch (OSDHandlerHelper.getHandlerState()) {
case STATE_INFO_BANNER_HIDDEN:
case STATE_INFO_BANNER_SHOWN:
case CURL_HANDLER_STATE_DO_NOTHING:
case PVR_STATE_STOP_PLAY_BACK:
case PVR_STATE_STOP_TIME_SHIFT: {
try {
/** Save Current Subtitle State */
saveCurrentSubtitleState();
MainActivity.service.getPvrControl().startTimeshift();
// Set Flag for CurlEffect
OSDHandlerHelper
.setHandlerState(PVR_STATE_PAUSE_TIME_SHIFT);
/*
* } else { return false; }
*/
// MainActivity.service.getPvrControl().startTimeshift();
// // Set Flag for CurlEffect
// CurlHandler.setCurlHandlerState(PVR_STATE_PAUSE_TIME_SHIFT);
} catch (Exception e) {
Log.e(TAG, "startTimeshift", e);
return false;
}
break;
}
case PVR_STATE_REW_TIME_SHIFT:
case PVR_STATE_FF_TIME_SHIFT:
case PVR_STATE_PLAY_TIME_SHIFT: {
try {
/** Save Current Subtitle State */
saveCurrentSubtitleState();
MainActivity.service.getPvrControl().pause(true);
// Set Flag for CurlEffect
OSDHandlerHelper
.setHandlerState(PVR_STATE_PAUSE_TIME_SHIFT);
/*
* } else { return false; }
*/
// MainActivity.service.getPvrControl().pauseTimeshift(true);
// CurlHandler.setCurlHandlerState(PVR_STATE_PAUSE_TIME_SHIFT);
} catch (Exception e) {
Log.e(TAG, "pauseTimeshift", e);
return false;
}
break;
}
case PVR_STATE_PLAY_PLAY_BACK: {
try {
MainActivity.service.getPvrControl().pause(true);
// Set Flag for CurlEffect
OSDHandlerHelper.setHandlerState(PVR_STATE_PAUSE_PLAY_BACK);
/*
* } else { return false; }
*/
} catch (Exception e) {
Log.e(TAG, "pausePlayback", e);
return false;
}
break;
}
default: {
return false;
// break;
}
}
return true;
}
public static void stopPVRPlayBack() {
try {
/* set screensaver */
MainActivity.screenSaverDialog
.setScreenSaverCause(MainActivity.screenSaverDialog.LIVE);
MainActivity.screenSaverDialog.updateScreensaverTimer();
MainActivity.service.getPvrControl().stopPlayback();
} catch (Exception e) {
Log.i(TAG, "Can not Stop PVR PlayBack!", e);
}
}
public static void prepareRecord() {
// Hide all dialogs when pvr recording start
if (MainKeyListener.getAppState() != MainKeyListener.CLEAN_SCREEN
&& MainKeyListener.getAppState() != MainKeyListener.PVR) {
MainActivity.activity.getDialogManager().hideAllDialogs();
new A4TVToast(MainActivity.activity)
.showToast(R.string.pvr_schedule_start_message);
}
if (A4TVProgressBarPVR.getControlProviderPVR() != null) {
A4TVProgressBarPVR.getControlProviderPVR().setFlagDiskFull(false);
A4TVProgressBarPVR.getControlProviderPVR().setFlagDiskNearlyFull(
false);
if (!A4TVProgressBarPVR.getControlProviderPVR().isFlagRecord()) {
A4TVProgressBarPVR.getControlProviderPVR().setFlagRecord(true);
setStringsForRecord();
/** This is added for Schedule Record */
if (OSDHandlerHelper.getHandlerState() != PVR_STATE_RECORDING) {
OSDHandlerHelper.setHandlerState(PVR_STATE_RECORDING);
MainActivity.activity.getPageCurl()
.multimediaControllerPVR(false);
}
}
}
}
public static void setStringsForRecord() {
if (A4TVProgressBarPVR.getControlProviderPVR() != null) {
try {
pvrCurrentTime = getCurrentTimeFromStream();
} catch (Exception e) {
Log.i(TAG, "Method: startPVR strTime");
e.printStackTrace();
pvrCurrentTime = "00:00:00";
}
// Set KeyListener State for OneTouch,Schedule and TimeShift
MainKeyListener.setAppState(MainKeyListener.PVR);
Content curChannelContent = MainActivity.activity.getPageCurl()
.getChannelChangeHandler().getCurrentChannelContent();
if (curChannelContent != null) {
String strName = curChannelContent.getName();
// String strName = MainActivity.activity.getPageCurl()
// .getChannelChangeHandler().getActiveContent().getName();
ControlProviderPVR.setFileName(strName);
}
}
}
/** Get Time from Stream */
private static String getCurrentTimeFromStream() throws RemoteException {
String strTime;
strTime = DateTimeConversions.getTimeSting(MainActivity.service
.getSystemControl().getDateAndTimeControl().getTimeDate()
.getCalendar().getTime());
return strTime;
}
/** Check if usb is mounted */
public static boolean detectUSB() {
// String usbPath = "/mnt/media";
// try {
// IExternalLocalStorageSettings lStorage = MainActivity.service
// .getSystemControl()
// .getExternalLocalStorageControl();
// usbPath = lStorage.getExternalStoragePath();
// } catch (RemoteException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// File mFile = new File(usbPath);
// if (mFile.exists()) {
// if (mFile.isDirectory()) {
// String[] mFiles = mFile.list();
// if (mFiles.length > 0) {
// // Usb found
// return true;
// }
// }
// }
// NO Usb Drive
return false;
}
private void saveCurrentSubtitleState() {
try {
/****************************/
/** Save Previous State of Subtitle */
/*
* if
* (!MainActivity.service.getSubtitleControl().getSubtitleEnabled())
* { int index = MainActivity.service.getSubtitleControl()
* .getCurrentSubtitleTrackIndex(); if (index > -1) { // Store title
* track index MainActivity.subtitleTitleTrackIndex = index;
* MainActivity.showSubtitleWhenTeletextHide = true; } }
*/
Log.e(TAG, "NO need to saveCurrentSubtitleState!!!");
/****************************/
} catch (Exception e) {
Log.e(TAG, "There was problem Getting Current Subtitle State!", e);
}
}
public static void setPreviousSubtitleState() {
/*********************************/
/** Set Previous State of Subtitle */
try {
/*
* if (MainActivity.showSubtitleWhenTeletextHide) {
* MainActivity.service.getSubtitleControl()
* .setCurrentSubtitleTrack( MainActivity.subtitleTitleTrackIndex);
* MainActivity.subtitleTitleTrackIndex = -1;
* MainActivity.showSubtitleWhenTeletextHide = false; }
*/
Log.e(TAG, "NO need to setPreviousSubtitleState!!!");
} catch (Exception e) {
e.printStackTrace();
}
/*********************************/
}
}