package com.xtremelabs.robolectric.shadows; import static org.junit.Assert.assertThat; import android.media.MediaPlayer; import android.net.Uri; import android.widget.VideoView; import com.xtremelabs.robolectric.internal.Implementation; import com.xtremelabs.robolectric.internal.Implements; @Implements(VideoView.class) @SuppressWarnings({"UnusedDeclaration"}) public class ShadowVideoView extends ShadowSurfaceView { private MediaPlayer.OnCompletionListener completionListner; private MediaPlayer.OnErrorListener errorListener; private MediaPlayer.OnPreparedListener preparedListener; private Uri uri; private String path; public static final int STOP = 0; public static final int START = 1; public static final int SUSPEND = 2; public static final int PAUSE = 3; public static final int RESUME = 4; private int currentState = -1; private int prevState; @Implementation public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) { preparedListener = l; } @Implementation public void setOnErrorListener(MediaPlayer.OnErrorListener l) { errorListener = l; } @Implementation public void setOnCompletionListener(MediaPlayer.OnCompletionListener l) { completionListner = l; } @Implementation public void setVideoPath(String path) { this.path = path; } @Implementation public void setVideoURI(Uri uri) { this.uri = uri; } @Implementation public void start() { savePrevState(); currentState = ShadowVideoView.START; } @Implementation public void stopPlayback() { savePrevState(); currentState = ShadowVideoView.STOP; } @Implementation public void suspend() { savePrevState(); currentState = ShadowVideoView.SUSPEND; } @Implementation public void pause() { savePrevState(); currentState = ShadowVideoView.PAUSE; } @Implementation public void resume() { savePrevState(); currentState = ShadowVideoView.RESUME; } @Implementation public boolean isPlaying() { return (currentState == ShadowVideoView.START); } @Implementation public boolean canPause() { return (currentState != ShadowVideoView.PAUSE && currentState != ShadowVideoView.STOP && currentState != ShadowVideoView.SUSPEND); } /** * Non-Android accessor. */ public MediaPlayer.OnPreparedListener getOnPreparedListener() { return preparedListener; } /** * Non-Android accessor. * @return */ public MediaPlayer.OnErrorListener getOnErrorListener() { return errorListener; } /** * Non-Android accessor. * @return */ public MediaPlayer.OnCompletionListener getOnCompletionListener() { return completionListner; } /** * Non-Android accessor. * @return */ public String getVideoPath() { return path; } /** * Non-Android accessor. * @return */ public String getVideoURIString() { return uri == null ? null : uri.toString(); } /** * Non-Android accessor. * @return */ public int getCurrentVideoState() { return currentState; } /** * Non-Android accessor. * @return */ public int getPrevVideoState() { return prevState; } /** * Non-Android accessor. */ private void savePrevState() { prevState = currentState; } }