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