Add CTS tests for shuffle/repeat commands in MediaSession
Bug: 27317954
Change-Id: I7dd9ef5a378391ad00a252ba209938967b9cd255
diff --git a/tests/tests/media/src/android/media/cts/MediaControllerTest.java b/tests/tests/media/src/android/media/cts/MediaControllerTest.java
index a6da2d9..69247f5 100644
--- a/tests/tests/media/src/android/media/cts/MediaControllerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaControllerTest.java
@@ -21,6 +21,7 @@
import android.media.VolumeProvider;
import android.media.session.MediaController;
import android.media.session.MediaSession;
+import android.media.session.PlaybackState;
import android.media.session.PlaybackState.CustomAction;
import android.net.Uri;
import android.os.Bundle;
@@ -257,6 +258,20 @@
assertTrue(mCallback.mOnPrepareFromUriCalled);
assertEquals(uri, mCallback.mUri);
assertEquals(EXTRAS_VALUE, mCallback.mExtras.getString(EXTRAS_KEY));
+
+ mCallback.reset();
+ final int repeatMode = PlaybackState.REPEAT_MODE_ALL;
+ controls.setRepeatMode(repeatMode);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnSetRepeatModeCalled);
+ assertEquals(repeatMode, mCallback.mRepeatMode);
+
+ mCallback.reset();
+ final boolean shuffleMode = true;
+ controls.setShuffleMode(shuffleMode);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnSetShuffleModeCalled);
+ assertEquals(shuffleMode, mCallback.mShuffleMode);
}
}
@@ -288,6 +303,8 @@
private String mCommand;
private Bundle mExtras;
private ResultReceiver mCommandCallback;
+ private int mRepeatMode;
+ private boolean mShuffleMode;
private boolean mOnPlayCalled;
private boolean mOnPauseCalled;
@@ -308,6 +325,8 @@
private boolean mOnPrepareFromMediaIdCalled;
private boolean mOnPrepareFromSearchCalled;
private boolean mOnPrepareFromUriCalled;
+ private boolean mOnSetRepeatModeCalled;
+ private boolean mOnSetShuffleModeCalled;
public void reset() {
mSeekPosition = -1;
@@ -320,6 +339,8 @@
mExtras = null;
mCommand = null;
mCommandCallback = null;
+ mShuffleMode = false;
+ mRepeatMode = PlaybackState.REPEAT_MODE_NONE;
mOnPlayCalled = false;
mOnPauseCalled = false;
@@ -340,6 +361,8 @@
mOnPrepareFromMediaIdCalled = false;
mOnPrepareFromSearchCalled = false;
mOnPrepareFromUriCalled = false;
+ mOnSetRepeatModeCalled = false;
+ mOnSetShuffleModeCalled = false;
}
@Override
@@ -513,5 +536,23 @@
mWaitLock.notify();
}
}
+
+ @Override
+ public void onSetRepeatMode(int repeatMode) {
+ synchronized (mWaitLock) {
+ mOnSetRepeatModeCalled = true;
+ mRepeatMode = repeatMode;
+ mWaitLock.notify();
+ }
+ }
+
+ @Override
+ public void onSetShuffleMode(boolean shuffleMode) {
+ synchronized (mWaitLock) {
+ mOnSetShuffleModeCalled = true;
+ mShuffleMode = shuffleMode;
+ mWaitLock.notify();
+ }
+ }
}
}
diff --git a/tests/tests/media/src/android/media/cts/MediaSessionTest.java b/tests/tests/media/src/android/media/cts/MediaSessionTest.java
index 3ebe6e4..c812896 100644
--- a/tests/tests/media/src/android/media/cts/MediaSessionTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaSessionTest.java
@@ -208,6 +208,24 @@
mSession.setSessionActivity(pi);
assertEquals(pi, controller.getSessionActivity());
+ // test setRepeatMode
+ mCallback.resetLocked();
+ final int repeatMode = PlaybackState.REPEAT_MODE_ALL;
+ mSession.setRepeatMode(repeatMode);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnRepeatModeChangedCalled);
+ assertEquals(repeatMode, mCallback.mRepeatMode);
+ assertEquals(repeatMode, controller.getRepeatMode());
+
+ // test setShuffleMode
+ mCallback.resetLocked();
+ final boolean shuffleMode = true;
+ mSession.setShuffleMode(shuffleMode);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnShuffleModeChangedCalled);
+ assertEquals(shuffleMode, mCallback.mShuffleMode);
+ assertEquals(shuffleMode, controller.getShuffleMode());
+
// test setActivity
mSession.setActive(true);
assertTrue(mSession.isActive());
@@ -349,6 +367,8 @@
private volatile boolean mOnAudioInfoChangedCalled;
private volatile boolean mOnSessionDestroyedCalled;
private volatile boolean mOnSessionEventCalled;
+ private volatile boolean mOnRepeatModeChangedCalled;
+ private volatile boolean mOnShuffleModeChangedCalled;
private volatile PlaybackState mPlaybackState;
private volatile MediaMetadata mMediaMetadata;
@@ -357,6 +377,8 @@
private volatile String mEvent;
private volatile Bundle mExtras;
private volatile MediaController.PlaybackInfo mPlaybackInfo;
+ private volatile int mRepeatMode;
+ private volatile boolean mShuffleMode;
public void resetLocked() {
mOnPlaybackStateChangedCalled = false;
@@ -367,6 +389,8 @@
mOnAudioInfoChangedCalled = false;
mOnSessionDestroyedCalled = false;
mOnSessionEventCalled = false;
+ mOnRepeatModeChangedCalled = false;
+ mOnShuffleModeChangedCalled = false;
mPlaybackState = null;
mMediaMetadata = null;
@@ -374,6 +398,8 @@
mTitle = null;
mExtras = null;
mPlaybackInfo = null;
+ mRepeatMode = PlaybackState.REPEAT_MODE_NONE;
+ mShuffleMode = false;
}
@Override
@@ -447,5 +473,23 @@
mWaitLock.notify();
}
}
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+ synchronized (mWaitLock) {
+ mOnRepeatModeChangedCalled = true;
+ mRepeatMode = repeatMode;
+ mWaitLock.notify();
+ }
+ }
+
+ @Override
+ public void onShuffleModeChanged(boolean shuffleMode) {
+ synchronized (mWaitLock) {
+ mOnShuffleModeChangedCalled = true;
+ mShuffleMode = shuffleMode;
+ mWaitLock.notify();
+ }
+ }
}
}