package com.iwedia.gui.multimedia.pvr.player.controller;
import android.app.Activity;
import android.util.Log;
import com.iwedia.comm.content.Content;
import com.iwedia.comm.content.multimedia.MultimediaContent;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVMultimediaController;
import com.iwedia.gui.components.A4TVMultimediaController.ControlProvider;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.multimedia.MultimediaGridHelper;
import com.iwedia.gui.multimedia.MultimediaHandler;
import com.iwedia.gui.osd.OSDGlobal;
import com.iwedia.gui.osd.OSDHandlerHelper;
import com.iwedia.gui.pvr.PVRHandler;
/**
* @author Milos Milanovic
*/
public class PVRPlayerController extends ControlProvider implements OSDGlobal {
private final String TAG = "PVRPlayerController";
private MultimediaContent mMultimediaControllerContent = null;
private PVRHandler mPvrHandler = null;
private Activity mActivity = null;
private boolean mNextPreviousContent = false;
public PVRPlayerController(PVRHandler pvrHandler, Activity activity) {
this.mPvrHandler = pvrHandler;
this.mActivity = activity;
}
@Override
public void stop(int displayId) {
// Stop MultiMedia PlayBack
A4TVMultimediaController
.setControlRepeatPosition(MULTIMEDIA_CONTROLLER_REPEAT_OFF);
mPvrHandler.pvrStop();
}
@Override
public void setContent(MultimediaContent content) {
mMultimediaControllerContent = content;
}
@Override
public MultimediaContent getContent() {
return mMultimediaControllerContent;
}
@Override
public void rewind(int displayId) {
if (mPvrHandler.pvrRewind()) {
// Set isPlayingFlag
ControlProvider.setFlagPlay(false);
this.setFlagFFREW(true);
}
}
@Override
public void repeatOff(int displayId) {
Log.i(TAG, "Repeat Off");
}
@Override
public void repeatOne(int displayId) {
Log.i(TAG, "Repeat One");
this.setElapsedTime(0);
play(displayId);
((MainActivity) mActivity).getPageCurl().multimediaController(true);
}
@Override
public void repeatAll(int displayId) {
Log.i(TAG, "Repeat All");
Content nextContent = ((MainActivity) mActivity).getMultimediaHandler()
.getMultimediaShowHandler().findNextPvr();
if (nextContent != null) {
setContent((MultimediaContent) nextContent);
play(displayId);
this.setElapsedTime(0);
this.setDuration(0);
String strName;
try {
strName = nextContent.getName();
} catch (Exception e) {
Log.i(TAG, "Method: next strName", e);
strName = "";
}
ControlProvider.setFileName(strName);
((MainActivity) mActivity).getPageCurl().multimediaController(true);
} else {
A4TVToast toast = new A4TVToast(mActivity);
toast.showToast(R.string.dlna_playback_no_next_file);
}
}
@Override
public void previous(int displayId) {
Content previousContent = ((MainActivity) mActivity)
.getMultimediaHandler().getMultimediaShowHandler()
.findPreviousPvr();
if (previousContent != null) {
setContent((MultimediaContent) previousContent);
mNextPreviousContent = true;
PVRHandler.stopPVRPlayBack();
this.setElapsedTime(0);
this.setDuration(0);
String strName;
try {
strName = previousContent.getName();
} catch (Exception e) {
Log.i(TAG, "Method: previous strName", e);
strName = "";
}
ControlProvider.setFileName(strName);
} else {
stop(displayId);
A4TVToast toast = new A4TVToast(mActivity);
toast.showToast(R.string.dlna_playback_no_previous_file);
}
}
@Override
public void play(int displayId) {
try {
MainActivity.service.getContentListControl().goContent(
mMultimediaControllerContent, displayId);
Log.i(TAG, "initControlProviderPVR pvrPlay");
// Set isPlayingFlag
ControlProvider.setFlagPlay(true);
// Hide antenna overlay before every playback
MultimediaGridHelper.hideAntennaOverlay();
} catch (Exception e) {
Log.e(TAG, "GoContent", e);
OSDHandlerHelper.setHandlerState(CURL_HANDLER_STATE_DO_NOTHING);
}
}
@Override
public void pause(int displayId) {
if (mPvrHandler.pvrPause()) {
Log.i(TAG, "initControlProviderPVR pvrPause");
// Set isPlayingFlag
ControlProvider.setFlagPlay(false);
}
}
@Override
public void next(int displayId) {
Content nextContent = ((MainActivity) mActivity).getMultimediaHandler()
.getMultimediaShowHandler().findNextPvr();
if (nextContent != null) {
setContent((MultimediaContent) nextContent);
mNextPreviousContent = true;
PVRHandler.stopPVRPlayBack();
this.setElapsedTime(0);
this.setDuration(0);
String strName;
try {
strName = nextContent.getName();
} catch (Exception e) {
Log.i(TAG, "Method: next strName", e);
strName = "";
}
ControlProvider.setFileName(strName);
} else {
stop(displayId);
A4TVToast toast = new A4TVToast(mActivity);
toast.showToast(R.string.dlna_playback_no_next_file);
}
}
@Override
public void fastForward(int displayId) {
if (mPvrHandler.pvrFastForward()) {
// Set isPlayingFlag
ControlProvider.setFlagPlay(false);
this.setFlagFFREW(true);
}
}
@Override
public void resume(int displayId) {
if (mPvrHandler.pvrPlay()) {
Log.i(TAG, "initControlProviderPVR resume");
// Set isPlayingFlag
ControlProvider.setFlagPlay(true);
}
}
public void prepareStop(int displayId) {
if (mNextPreviousContent) {
mNextPreviousContent = false;
play(displayId);
} else {
if (checkRepeat(displayId)) {
setFileDescription((mActivity).getApplicationContext()
.getString(R.string.stop));
// Set isPlayingFlag
ControlProvider.setFlagPlay(false);
this.setFlagFFREW(false);
this.setElapsedTime(0);
A4TVMultimediaController
.setControlPosition(MULTIMEDIA_CONTROLLER_STOP);
Log.i(TAG, "initControlProviderPVR STOP");
// ////////////////////////////////////////////////////
OSDHandlerHelper.setHandlerState(CURL_HANDLER_STATE_DO_NOTHING);
// Start live stream upon stop
((MainActivity) mActivity).getMediaController()
.startLiveStream(false);
// Show multimedia back to PVR screen
MultimediaHandler.returnMultimediaToPreviousState();
// Show antenna overlay if needed after playback
MultimediaGridHelper.showAntennaOverlay();
// Show Curl
((MainActivity) mActivity).getPageCurl().multimediaController(
true);
}
}
}
public boolean checkRepeat(int displayId) {
switch (A4TVMultimediaController.getControlRepeatPosition()) {
case MULTIMEDIA_CONTROLLER_REPEAT_OFF: {
repeatOff(displayId);
return true;
}
case MULTIMEDIA_CONTROLLER_REPEAT_ONE: {
repeatOne(displayId);
return false;
}
case MULTIMEDIA_CONTROLLER_REPEAT_ALL: {
repeatAll(displayId);
return false;
}
default: {
return true;
}
}
}
}