blob: 2451bdfb0b23c3b24e06755371e52f61048bfa05 [file] [log] [blame]
package com.android.onemedia.playback;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
/**
* TODO: Insert description here. (generated by epastern)
*/
public abstract class Renderer {
public static final String FEATURE_SET_CONTENT = "com.android.media.SET_CONTENT";
public static final String FEATURE_SET_NEXT_CONTENT = "com.android.media.SET_NEXT_CONTENT";
public static final String FEATURE_PLAY = "com.android.media.PLAY";
public static final String FEATURE_PAUSE = "com.android.media.PAUSE";
public static final String FEATURE_NEXT = "com.android.media.NEXT";
public static final String FEATURE_PREVIOUS = "com.android.media.PREVIOUS";
public static final String FEATURE_SEEK_TO = "com.android.media.SEEK_TO";
public static final String FEATURE_STOP = "com.android.media.STOP";
// TODO move states somewhere else
public static final int STATE_ERROR = 0;
/**
* The state MediaPlayerManager starts in before any action has been
* performed.
*/
public static final int STATE_INIT = 1 << 0;
/**
* Indicates the source has been set and it is being prepared/buffered
* before starting playback.
*/
public static final int STATE_PREPARING = 1 << 1;
/**
* The media is ready and playback can be started.
*/
public static final int STATE_READY = 1 << 2;
/**
* The media is currently playing.
*/
public static final int STATE_PLAYING = 1 << 3;
/**
* The media is currently paused.
*/
public static final int STATE_PAUSED = 1 << 4;
/**
* The service has been stopped and cannot be started again until a new
* source has been set.
*/
public static final int STATE_STOPPED = 1 << 5;
/**
* The playback has reached the end. It can be restarted by calling play().
*/
public static final int STATE_ENDED = 1 << 6;
// TODO decide on proper way of describing features
protected List<String> mFeatures = new ArrayList<String>();
protected List<Listener> mListeners = new ArrayList<Listener>();
public Renderer(Context context, Bundle params) {
onCreate(params);
initFeatures(params);
}
abstract public void setContent(Bundle request);
public void onCreate(Bundle params) {
// Do nothing by default
}
public void setNextContent(Bundle request) {
throw new UnsupportedOperationException("setNextContent() is not supported.");
}
public List<String> getFeatures() {
return mFeatures;
}
public boolean onPlay() {
throw new UnsupportedOperationException("play is not supported.");
}
public boolean onPause() {
throw new UnsupportedOperationException("pause is not supported.");
}
public boolean onNext() {
throw new UnsupportedOperationException("next is not supported.");
}
public boolean onPrevious() {
throw new UnsupportedOperationException("previous is not supported.");
}
public boolean onStop() {
throw new UnsupportedOperationException("stop is not supported.");
}
public boolean onSeekTo(int time) {
throw new UnsupportedOperationException("seekTo is not supported.");
}
public long getSeekPosition() {
throw new UnsupportedOperationException("getSeekPosition is not supported.");
}
public long getDuration() {
throw new UnsupportedOperationException("getDuration is not supported.");
}
public int getPlayState() {
throw new UnsupportedOperationException("getPlayState is not supported.");
}
public void onDestroy() {
// Do nothing by default
}
public void registerListener(Listener listener) {
if (!mListeners.contains(listener)) {
mListeners.add(listener);
}
}
public void unregisterListener(Listener listener) {
mListeners.remove(listener);
}
protected void initFeatures(Bundle params) {
mFeatures.add(FEATURE_SET_CONTENT);
}
protected void pushOnError(int type, int extra, Bundle extras, Throwable error) {
for (Listener listener : mListeners) {
listener.onError(type, extra, extras, error);
}
}
protected void pushOnStateChanged(int newState) {
for (Listener listener : mListeners) {
listener.onStateChanged(newState);
}
}
protected void pushOnBufferingUpdate(int percent) {
for (Listener listener : mListeners) {
listener.onBufferingUpdate(percent);
}
}
protected void pushOnFocusLost() {
for (Listener listener : mListeners) {
listener.onFocusLost();
}
}
protected void pushOnNextStarted() {
for (Listener listener : mListeners) {
listener.onNextStarted();
}
}
public interface Listener {
public static final int ERROR_LOAD_FAILED = 1770;
public static final int ERROR_PREPARE_ERROR = 1771;
public static final int ERROR_PLAYBACK_FAILED = 1772;
/**
* When an error occurs onError will be called but not onStateChanged.
* The Manager will remain in the error state until
* {@link #setContent()} is called again.
*/
public void onError(int type, int extra, Bundle extras,
Throwable error);
/**
* onStateChanged will be called whenever the state of the manager
* transitions except to an error state.
*/
public void onStateChanged(int newState);
/**
* This is a passthrough of
* {@link MediaPlayer.OnBufferingUpdateListener}.
*/
public void onBufferingUpdate(int percent);
/**
* Called when audio focus is lost and it is not transient or ducking.
*/
public void onFocusLost();
/**
* Called when the next item was started playing. Only called if a next
* item has been set and the current item has ended.
*/
public void onNextStarted();
}
}