ShadowVideoView.java revision 781a29512b5ed5e75a439d5bdb71fd8d7912e4b5
12afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linpackage com.xtremelabs.robolectric.shadows;
22afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
32afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport android.media.MediaPlayer;
42afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport android.net.Uri;
52afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport android.widget.VideoView;
62afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
72afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport com.xtremelabs.robolectric.internal.Implementation;
82afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport com.xtremelabs.robolectric.internal.Implements;
92afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
102afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin@Implements(VideoView.class)
112afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin@SuppressWarnings({"UnusedDeclaration"})
122afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linpublic class ShadowVideoView extends ShadowSurfaceView {
132afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
142afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	private MediaPlayer.OnCompletionListener completionListner;
152afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	private MediaPlayer.OnErrorListener errorListener;
162afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	private MediaPlayer.OnPreparedListener preparedListener;
172afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
182afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	private Uri uri;
192afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
202afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public static final int STOP = 0;
212afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public static final int START = 1;
222afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public static final int SUSPEND = 2;
232afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public static final int PAUSE = 3;
242afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public static final int RESUME = 4;
252afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
262afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	private int currentState = -1;
272afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	private int prevState;
282afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
292afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
302afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
312afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		preparedListener = l;
322afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
332afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
342afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
352afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void setOnErrorListener(MediaPlayer.OnErrorListener l) {
362afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		errorListener = l;
372afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
382afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
392afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
402afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void setOnCompletionListener(MediaPlayer.OnCompletionListener l) {
412afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		completionListner = l;
422afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
432afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
442afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
452afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void setVideoURI(Uri uri) {
462afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		this.uri = uri;
472afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
482afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
492afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
502afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void start() {
512afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		savePrevState();
522afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		currentState = ShadowVideoView.START;
532afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
542afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
552afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
562afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void stopPlayback() {
572afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		savePrevState();
582afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		currentState = ShadowVideoView.STOP;
592afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
602afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
612afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
622afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void suspend() {
632afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		savePrevState();
642afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		currentState = ShadowVideoView.SUSPEND;
652afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
662afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
672afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
682afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void pause() {
692afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		savePrevState();
702afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		currentState = ShadowVideoView.PAUSE;
712afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
722afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
732afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
742afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public void resume() {
752afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		savePrevState();
762afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		currentState = ShadowVideoView.RESUME;
772afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
782afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
792afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	@Implementation
802afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public boolean isPlaying() {
812afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		return (currentState == ShadowVideoView.START);
822afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
83781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin
84781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin	@Implementation
85781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin	public boolean canPause() {
86781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin		return (currentState != ShadowVideoView.PAUSE &&
87781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin				currentState != ShadowVideoView.STOP &&
88781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin				currentState != ShadowVideoView.SUSPEND);
89781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin	}
90781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin
912afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	/**
922afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * Non-Android accessor.
932afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 */
942afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public MediaPlayer.OnPreparedListener getOnPreparedListener() {
952afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		return preparedListener;
962afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
972afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
982afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	/**
992afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * Non-Android accessor.
1002afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * @return
1012afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 */
1022afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public MediaPlayer.OnErrorListener getOnErrorListener() {
1032afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		return errorListener;
1042afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
1052afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
1062afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	/**
1072afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * Non-Android accessor.
1082afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * @return
1092afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 */
1102afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public MediaPlayer.OnCompletionListener getOnCompletionListener() {
1112afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		return completionListner;
1122afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
1132afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
1142afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	/**
1152afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * Non-Android accessor.
1162afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * @return
1172afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 */
1182afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public String getVideoURIString() {
1192afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		return uri.toString();
1202afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
1212afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
1222afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	/**
1232afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * Non-Android accessor.
1242afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * @return
1252afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 */
1262afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public int getCurrentVideoState() {
1272afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		return currentState;
1282afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
1292afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
1302afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	/**
1312afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * Non-Android accessor.
1322afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * @return
1332afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 */
1342afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	public int getPrevVideoState() {
1352afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		return prevState;
1362afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
1372afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
1382afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	/**
1392afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 * Non-Android accessor.
1402afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	 */
1412afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	private void savePrevState() {
1422afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin		prevState = currentState;
1432afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin	}
1442afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin
1452afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin}
146