1package com.xtremelabs.robolectric.shadows;
2
3import static org.junit.Assert.assertThat;
4import android.media.MediaPlayer;
5import android.net.Uri;
6import android.widget.VideoView;
7
8import com.xtremelabs.robolectric.internal.Implementation;
9import com.xtremelabs.robolectric.internal.Implements;
10
11@Implements(VideoView.class)
12@SuppressWarnings({"UnusedDeclaration"})
13public class ShadowVideoView extends ShadowSurfaceView {
14
15	private MediaPlayer.OnCompletionListener completionListner;
16	private MediaPlayer.OnErrorListener errorListener;
17	private MediaPlayer.OnPreparedListener preparedListener;
18
19	private Uri uri;
20	private String path;
21
22	public static final int STOP = 0;
23	public static final int START = 1;
24	public static final int SUSPEND = 2;
25	public static final int PAUSE = 3;
26	public static final int RESUME = 4;
27
28	private int currentState = -1;
29	private int prevState;
30
31	@Implementation
32	public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {
33		preparedListener = l;
34	}
35
36	@Implementation
37	public void setOnErrorListener(MediaPlayer.OnErrorListener l) {
38		errorListener = l;
39	}
40
41	@Implementation
42	public void setOnCompletionListener(MediaPlayer.OnCompletionListener l) {
43		completionListner = l;
44	}
45
46	@Implementation
47	public void setVideoPath(String path) {
48		this.path = path;
49	}
50
51	@Implementation
52	public void setVideoURI(Uri uri) {
53		this.uri = uri;
54	}
55
56	@Implementation
57	public void start() {
58		savePrevState();
59		currentState = ShadowVideoView.START;
60	}
61
62	@Implementation
63	public void stopPlayback() {
64		savePrevState();
65		currentState = ShadowVideoView.STOP;
66	}
67
68	@Implementation
69	public void suspend() {
70		savePrevState();
71		currentState = ShadowVideoView.SUSPEND;
72	}
73
74	@Implementation
75	public void pause() {
76		savePrevState();
77		currentState = ShadowVideoView.PAUSE;
78	}
79
80	@Implementation
81	public void resume() {
82		savePrevState();
83		currentState = ShadowVideoView.RESUME;
84	}
85
86	@Implementation
87	public boolean isPlaying() {
88		return (currentState == ShadowVideoView.START);
89	}
90
91	@Implementation
92	public boolean canPause() {
93		return (currentState != ShadowVideoView.PAUSE &&
94				currentState != ShadowVideoView.STOP &&
95				currentState != ShadowVideoView.SUSPEND);
96	}
97
98	/**
99	 * Non-Android accessor.
100	 */
101	public MediaPlayer.OnPreparedListener getOnPreparedListener() {
102		return preparedListener;
103	}
104
105	/**
106	 * Non-Android accessor.
107	 * @return
108	 */
109	public MediaPlayer.OnErrorListener getOnErrorListener() {
110		return errorListener;
111	}
112
113	/**
114	 * Non-Android accessor.
115	 * @return
116	 */
117	public MediaPlayer.OnCompletionListener getOnCompletionListener() {
118		return completionListner;
119	}
120
121	/**
122	 * Non-Android accessor.
123	 * @return
124	 */
125	public String getVideoPath() {
126		return path;
127	}
128
129	/**
130	 * Non-Android accessor.
131	 * @return
132	 */
133	public String getVideoURIString() {
134		return uri == null ? null : uri.toString();
135	}
136
137	/**
138	 * Non-Android accessor.
139	 * @return
140	 */
141	public int getCurrentVideoState() {
142		return currentState;
143	}
144
145	/**
146	 * Non-Android accessor.
147	 * @return
148	 */
149	public int getPrevVideoState() {
150		return prevState;
151	}
152
153	/**
154	 * Non-Android accessor.
155	 */
156	private void savePrevState() {
157		prevState = currentState;
158	}
159
160}
161