Merge changes Ifda931c3,Ibdfc5d84 into androidx-master-dev
* changes:
Version-compat-test: Move MediaSession2LegacyTest
Version-compat-test: Add RemoteMediaSession2#updatePlayerConnector()
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java
index c74f672..5c12a69 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/MediaTestUtils.java
@@ -97,7 +97,7 @@
.putString(MediaMetadata2.METADATA_KEY_MEDIA_ID, mediaId).build();
}
- private static DataSourceDesc2 createDSD() {
+ public static DataSourceDesc2 createDSD() {
return new FileDataSourceDesc2.Builder(new FileDescriptor()).build();
}
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession2.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession2.java
index dc02669..ca81e8f 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession2.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/RemoteMediaSession2.java
@@ -17,6 +17,18 @@
package androidx.media.test.client;
import static androidx.media.test.lib.CommonConstants.ACTION_MEDIA_SESSION2;
+import static androidx.media.test.lib.CommonConstants.KEY_AUDIO_ATTRIBUTES;
+import static androidx.media.test.lib.CommonConstants.KEY_BUFFERED_POSITION;
+import static androidx.media.test.lib.CommonConstants.KEY_BUFFERING_STATE;
+import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_POSITION;
+import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_VOLUME;
+import static androidx.media.test.lib.CommonConstants.KEY_MAX_VOLUME;
+import static androidx.media.test.lib.CommonConstants.KEY_MEDIA_ITEM;
+import static androidx.media.test.lib.CommonConstants.KEY_METADATA;
+import static androidx.media.test.lib.CommonConstants.KEY_PLAYER_STATE;
+import static androidx.media.test.lib.CommonConstants.KEY_PLAYLIST;
+import static androidx.media.test.lib.CommonConstants.KEY_SPEED;
+import static androidx.media.test.lib.CommonConstants.KEY_VOLUME_CONTROL_TYPE;
import static androidx.media.test.lib.CommonConstants.REMOTE_MEDIA_SESSION2_SERVICE;
import static androidx.media.test.lib.TestUtils.WAIT_TIME_MS;
@@ -36,9 +48,12 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.media.AudioAttributesCompat;
import androidx.media.test.lib.MediaSession2Constants;
import androidx.media2.MediaItem2;
import androidx.media2.MediaMetadata2;
+import androidx.media2.MediaPlayerConnector;
+import androidx.media2.MediaPlaylistAgent;
import androidx.media2.MediaSession2;
import androidx.media2.MediaSession2.CommandButton;
import androidx.media2.MediaSession2.ControllerInfo;
@@ -120,6 +135,69 @@
return mRemotePlaylistAgent;
}
+ /**
+ * Create a {@link Bundle} which represents a configuration of local
+ * {@link MediaPlayerConnector} in order to create a new mock player in the service app.
+ * <p>
+ * The returned value can be used in {@link #updatePlayerConnector(Bundle, Bundle)}.
+ */
+ public static Bundle createMockPlayerConnectorConfig(
+ int state, int buffState, long pos, long buffPos, float speed,
+ @Nullable AudioAttributesCompat attr) {
+ Bundle playerBundle = new Bundle();
+ playerBundle.putInt(KEY_PLAYER_STATE, state);
+ playerBundle.putInt(KEY_BUFFERING_STATE, buffState);
+ playerBundle.putLong(KEY_CURRENT_POSITION, pos);
+ playerBundle.putLong(KEY_BUFFERED_POSITION, buffPos);
+ playerBundle.putFloat(KEY_SPEED, speed);
+ if (attr != null) {
+ playerBundle.putBundle(KEY_AUDIO_ATTRIBUTES, attr.toBundle());
+ }
+ return playerBundle;
+ }
+
+ /**
+ * Create a {@link Bundle} which represents a configuration of remote
+ * {@link MediaPlayerConnector} in order to create a new mock player in the service app.
+ * <p>
+ * The returned value can be used in {@link #updatePlayerConnector(Bundle, Bundle)}.
+ */
+ public static Bundle createMockPlayerConnectorConfig(
+ int volumeControlType, int maxVolume, int currentVolume,
+ @Nullable AudioAttributesCompat attr) {
+ Bundle playerBundle = new Bundle();
+ playerBundle.putInt(KEY_VOLUME_CONTROL_TYPE, volumeControlType);
+ playerBundle.putInt(KEY_MAX_VOLUME, maxVolume);
+ playerBundle.putInt(KEY_CURRENT_VOLUME, currentVolume);
+ if (attr != null) {
+ playerBundle.putBundle(KEY_AUDIO_ATTRIBUTES, attr.toBundle());
+ }
+ return playerBundle;
+ }
+
+ /**
+ * Create a {@link Bundle} which represents a configuration of {@link MediaPlaylistAgent}
+ * in order to create a new mock playlist agent in the service app.
+ * <p>
+ * The returned value can be used in {@link #updatePlayerConnector(Bundle, Bundle)}.
+ */
+ public static Bundle createMockPlaylistAgentConfig(
+ @Nullable List<MediaItem2> playlist, @Nullable MediaItem2 currentItem,
+ @Nullable MediaMetadata2 metadata) {
+ Bundle agentBundle = new Bundle();
+ if (playlist != null) {
+ agentBundle.putParcelableArrayList(KEY_PLAYLIST,
+ MediaTestUtils.playlistToParcelableArrayList(playlist));
+ }
+ if (currentItem != null) {
+ agentBundle.putBundle(KEY_MEDIA_ITEM, currentItem.toBundle());
+ }
+ if (metadata != null) {
+ agentBundle.putBundle(KEY_METADATA, metadata.toBundle());
+ }
+ return agentBundle;
+ }
+
////////////////////////////////////////////////////////////////////////////////
// MediaSession2 methods
////////////////////////////////////////////////////////////////////////////////
@@ -164,6 +242,14 @@
return token;
}
+ public void updatePlayerConnector(@NonNull Bundle playerConfig, @Nullable Bundle agentConfig) {
+ try {
+ mBinder.updatePlayerConnector(mSessionId, playerConfig, agentConfig);
+ } catch (RemoteException ex) {
+ Log.e(TAG, "Failed to call updatePlayerConnector()");
+ }
+ }
+
public void sendCustomCommand(@NonNull SessionCommand2 command, @Nullable Bundle args) {
try {
mBinder.sendCustomCommand(mSessionId, command.toBundle(), args);
@@ -343,12 +429,12 @@
}
}
- public void setPlaylistNewDsd(List<MediaItem2> playlist) {
+ public void setPlaylistWithDummyDsd(List<MediaItem2> playlist) {
try {
- mBinder.setPlaylistWithNewDsd(
+ mBinder.setPlaylistWithDummyDsd(
mSessionId, MediaTestUtils.mediaItem2ListToBundleList(playlist));
} catch (RemoteException ex) {
- Log.e(TAG, "Failed to call setPlaylistNewDsd()");
+ Log.e(TAG, "Failed to call setPlaylistWithDummyDsd()");
}
}
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2CallbackTest.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2CallbackTest.java
index 5da6b01..27d9a5f 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2CallbackTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2CallbackTest.java
@@ -22,16 +22,7 @@
import static androidx.media.test.lib.CommonConstants.DEFAULT_TEST_NAME;
import static androidx.media.test.lib.CommonConstants.INDEX_FOR_NULL_DSD;
import static androidx.media.test.lib.CommonConstants.INDEX_FOR_UNKONWN_DSD;
-import static androidx.media.test.lib.CommonConstants.KEY_AUDIO_ATTRIBUTES;
-import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_VOLUME;
-import static androidx.media.test.lib.CommonConstants.KEY_MAX_VOLUME;
-import static androidx.media.test.lib.CommonConstants.KEY_PLAYER_STATE;
-import static androidx.media.test.lib.CommonConstants.KEY_PLAYLIST;
-import static androidx.media.test.lib.CommonConstants.KEY_VOLUME_CONTROL_TYPE;
import static androidx.media.test.lib.CommonConstants.MOCK_MEDIA_LIBRARY_SERVICE;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands.UPDATE_PLAYER;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands
- .UPDATE_PLAYER_WITH_VOLUME_PROVIDER;
import static androidx.media.test.lib.MediaSession2Constants
.TEST_CONTROLLER_CALLBACK_SESSION_REJECTS;
import static androidx.media2.MediaMetadata2.METADATA_KEY_DURATION;
@@ -218,13 +209,13 @@
}
});
- Bundle args = new Bundle();
- args.putInt(KEY_PLAYER_STATE, testState);
- args.putParcelableArrayList(
- KEY_PLAYLIST, MediaTestUtils.playlistToParcelableArrayList(testPlaylist));
- args.putBundle(KEY_AUDIO_ATTRIBUTES, testAudioAttributes.toBundle());
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ testState, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
+ 0f /* speed */, testAudioAttributes);
+ Bundle agentConfig = RemoteMediaSession2.createMockPlaylistAgentConfig(
+ testPlaylist, null /* currentItem */, null /* metadata */);
- mRemoteSession2.runCustomTestCommands(UPDATE_PLAYER, args);
+ mRemoteSession2.updatePlayerConnector(playerConfig, agentConfig);
assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
}
@@ -233,7 +224,7 @@
prepareLooper();
final int listSize = 5;
final List<MediaItem2> list = MediaTestUtils.createPlaylist(listSize);
- mRemoteSession2.getMockPlaylistAgent().setPlaylistNewDsd(list);
+ mRemoteSession2.getMockPlaylistAgent().setPlaylistWithDummyDsd(list);
final int currentItemIndex = 3;
final MediaItem2 currentItem = list.get(currentItemIndex);
@@ -317,12 +308,9 @@
};
MediaController2 controller = createController(mRemoteSession2.getToken(), true, callback);
- Bundle args = new Bundle();
- args.putInt(KEY_MAX_VOLUME, maxVolume);
- args.putInt(KEY_CURRENT_VOLUME, currentVolume);
- args.putInt(KEY_VOLUME_CONTROL_TYPE, volumeControlType);
- args.putParcelable(KEY_AUDIO_ATTRIBUTES, attrs.toBundle());
- mRemoteSession2.runCustomTestCommands(UPDATE_PLAYER_WITH_VOLUME_PROVIDER, args);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ volumeControlType, maxVolume, currentVolume, attrs);
+ mRemoteSession2.updatePlayerConnector(playerConfig, null);
assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
PlaybackInfo info = controller.getPlaybackInfo();
@@ -376,7 +364,7 @@
final CountDownLatch latch = new CountDownLatch(1);
RemoteMediaSession2.RemoteMockPlaylistAgent agent = mRemoteSession2.getMockPlaylistAgent();
- agent.setPlaylistNewDsd(playlist);
+ agent.setPlaylistWithDummyDsd(playlist);
agent.setCurrentMediaItem(testItemIndex);
RemoteMediaSession2.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
@@ -550,7 +538,7 @@
}
};
- mRemoteSession2.getMockPlaylistAgent().setPlaylistNewDsd(testPlaylist);
+ mRemoteSession2.getMockPlaylistAgent().setPlaylistWithDummyDsd(testPlaylist);
RemoteMediaSession2.RemoteMockPlayer player = mRemoteSession2.getMockPlayer();
player.setBufferedPosition(testBufferingPosition);
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test.java
index a518f4c2..e758798 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaController2Test.java
@@ -22,19 +22,6 @@
import static androidx.media.VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE;
import static androidx.media.VolumeProviderCompat.VOLUME_CONTROL_FIXED;
import static androidx.media.test.lib.CommonConstants.DEFAULT_TEST_NAME;
-import static androidx.media.test.lib.CommonConstants.KEY_AUDIO_ATTRIBUTES;
-import static androidx.media.test.lib.CommonConstants.KEY_BUFFERED_POSITION;
-import static androidx.media.test.lib.CommonConstants.KEY_BUFFERING_STATE;
-import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_POSITION;
-import static androidx.media.test.lib.CommonConstants.KEY_MEDIA_ITEM;
-import static androidx.media.test.lib.CommonConstants.KEY_PLAYER_STATE;
-import static androidx.media.test.lib.CommonConstants.KEY_SPEED;
-import static androidx.media.test.lib.CommonConstants.KEY_STREAM;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands
- .CUSTOM_METHOD_SET_MULTIPLE_VALUES;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands.UPDATE_PLAYER;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands
- .UPDATE_PLAYER_FOR_SETTING_STREAM_TYPE;
import static androidx.media.test.lib.MediaSession2Constants.TEST_GET_SESSION_ACTIVITY;
import static org.junit.Assert.assertEquals;
@@ -53,10 +40,10 @@
import androidx.media.AudioAttributesCompat;
import androidx.media.test.client.MediaTestUtils;
import androidx.media.test.client.RemoteMediaSession2;
-import androidx.media2.MediaPlayerConnector;
import androidx.media2.MediaController2;
import androidx.media2.MediaController2.PlaybackInfo;
import androidx.media2.MediaItem2;
+import androidx.media2.MediaPlayerConnector;
import androidx.test.filters.SdkSuppress;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -143,9 +130,12 @@
return;
}
- Bundle args = new Bundle();
- args.putInt(KEY_STREAM, stream);
- mRemoteSession2.runCustomTestCommands(UPDATE_PLAYER_FOR_SETTING_STREAM_TYPE, args);
+ AudioAttributesCompat attrs = new AudioAttributesCompat.Builder()
+ .setLegacyStreamType(stream).build();
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ 0 /* state */, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
+ 0f /* speed */, attrs);
+ mRemoteSession2.updatePlayerConnector(playerConfig, null);
final int originalVolume = mAudioManager.getStreamVolume(stream);
final int targetVolume = originalVolume == minVolume
@@ -182,9 +172,12 @@
return;
}
- Bundle args = new Bundle();
- args.putInt(KEY_STREAM, stream);
- mRemoteSession2.runCustomTestCommands(UPDATE_PLAYER_FOR_SETTING_STREAM_TYPE, args);
+ AudioAttributesCompat attrs = new AudioAttributesCompat.Builder()
+ .setLegacyStreamType(stream).build();
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ 0 /* state */, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
+ 0f /* speed */, attrs);
+ mRemoteSession2.updatePlayerConnector(playerConfig, null);
final int originalVolume = mAudioManager.getStreamVolume(stream);
final int direction = originalVolume == minVolume
@@ -248,14 +241,11 @@
final long timeDiff = 102;
final MediaItem2 currentMediaItem = MediaTestUtils.createMediaItemWithMetadata();
- Bundle args = new Bundle();
- args.putInt(KEY_PLAYER_STATE, state);
- args.putInt(KEY_BUFFERING_STATE, bufferingState);
- args.putLong(KEY_CURRENT_POSITION, position);
- args.putLong(KEY_BUFFERED_POSITION, bufferedPosition);
- args.putFloat(KEY_SPEED, speed);
- args.putBundle(KEY_MEDIA_ITEM, currentMediaItem.toBundle());
- mRemoteSession2.runCustomTestCommands(CUSTOM_METHOD_SET_MULTIPLE_VALUES, args);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ state, bufferingState, position, bufferedPosition, speed, null /* audioAttrs */);
+ Bundle agentConfig = RemoteMediaSession2.createMockPlaylistAgentConfig(
+ null /* playlist */, currentMediaItem, null /* metadata */);
+ mRemoteSession2.updatePlayerConnector(playerConfig, agentConfig);
MediaController2 controller = createController(mRemoteSession2.getToken());
controller.setTimeDiff(timeDiff);
@@ -273,9 +263,10 @@
.setContentType(CONTENT_TYPE_MUSIC)
.build();
- Bundle args = new Bundle();
- args.putBundle(KEY_AUDIO_ATTRIBUTES, attrs.toBundle());
- mRemoteSession2.runCustomTestCommands(UPDATE_PLAYER, args);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ 0 /* state */, 0 /* buffState */, 0 /* position */, 0 /* buffPosition */,
+ 0f /* speed */, attrs);
+ mRemoteSession2.updatePlayerConnector(playerConfig, null);
final MediaController2 controller = createController(mRemoteSession2.getToken());
PlaybackInfo info = controller.getPlaybackInfo();
diff --git a/media2/src/androidTest/java/androidx/media2/MediaSession2LegacyTest.java b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession2.java
similarity index 69%
rename from media2/src/androidTest/java/androidx/media2/MediaSession2LegacyTest.java
rename to media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession2.java
index ed7a56c..4c3bab7 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaSession2LegacyTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/androidx/media/test/client/tests/MediaControllerCompatCallbackTestWithMediaSession2.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package androidx.media2;
+package androidx.media.test.client.tests;
import static androidx.media2.MediaItem2.FLAG_PLAYABLE;
@@ -25,17 +25,22 @@
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
-import android.os.Process;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
-import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.MediaSessionCompat.QueueItem;
import android.support.v4.media.session.PlaybackStateCompat;
import androidx.media.AudioAttributesCompat;
import androidx.media.VolumeProviderCompat;
-import androidx.media2.MediaSession2.ControllerInfo;
-import androidx.media2.MediaSession2.SessionCallback;
+import androidx.media.test.client.MediaTestUtils;
+import androidx.media.test.client.RemoteMediaSession2;
+import androidx.media.test.lib.TestUtils;
+import androidx.media2.MediaItem2;
+import androidx.media2.MediaMetadata2;
+import androidx.media2.MediaPlayerConnector;
+import androidx.media2.MediaPlaylistAgent;
+import androidx.media2.MediaSession2;
+import androidx.media2.MediaUtils2;
import androidx.test.filters.SdkSuppress;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -55,35 +60,20 @@
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN)
@RunWith(AndroidJUnit4.class)
@SmallTest
-public class MediaSession2LegacyTest extends MediaSession2TestBase {
- private static final String TAG = "MediaSession2LegacyTest";
+public class MediaControllerCompatCallbackTestWithMediaSession2 extends MediaSession2TestBase {
+ private static final String TAG = "MCCCallbackTestWithMS2";
private static final long WAIT_TIME_MS = 1000L;
- private MediaSession2 mSession;
- private MockPlayer mPlayer;
- private MockPlaylistAgent mMockAgent;
+ private RemoteMediaSession2 mSession;
+ private MediaControllerCompat mControllerCompat;
@Before
@Override
public void setUp() throws Exception {
super.setUp();
- mPlayer = new MockPlayer(0);
- mMockAgent = new MockPlaylistAgent();
-
- mSession = new MediaSession2.Builder(mContext)
- .setPlayer(mPlayer)
- .setPlaylistAgent(mMockAgent)
- .setSessionCallback(sHandlerExecutor, new SessionCallback() {
- @Override
- public SessionCommandGroup2 onConnect(MediaSession2 session,
- ControllerInfo controller) {
- if (Process.myUid() == controller.getUid()) {
- return super.onConnect(session, controller);
- }
- return null;
- }
- }).build();
+ mSession = new RemoteMediaSession2(TAG, mContext);
+ mControllerCompat = new MediaControllerCompat(mContext, mSession.getCompatToken());
}
@After
@@ -94,58 +84,43 @@
}
@Test
- public void testRepeatModeChange() throws InterruptedException {
+ public void testRepeatModeChange() throws Exception {
prepareLooper();
final int testRepeatMode = MediaPlaylistAgent.REPEAT_MODE_GROUP;
- final MediaPlaylistAgent agent = new MockPlaylistAgent() {
- @Override
- public int getRepeatMode() {
- return testRepeatMode;
- }
- };
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mSession.updatePlayerConnector(mPlayer, agent);
- agent.notifyRepeatModeChanged();
+ mSession.getMockPlaylistAgent().setRepeatMode(testRepeatMode);
+ mSession.getMockPlaylistAgent().notifyRepeatModeChanged();
assertTrue(controllerCallback.await(WAIT_TIME_MS));
assertTrue(controllerCallback.mOnRepeatModeChangedCalled);
- assertEquals(testRepeatMode, controller.getRepeatMode());
+ assertEquals(testRepeatMode, mControllerCompat.getRepeatMode());
}
@Test
- public void testShuffleModeChange() throws InterruptedException {
+ public void testShuffleModeChange() throws Exception {
prepareLooper();
final int testShuffleMode = MediaPlaylistAgent.SHUFFLE_MODE_GROUP;
- final MediaPlaylistAgent agent = new MockPlaylistAgent() {
- @Override
- public int getShuffleMode() {
- return testShuffleMode;
- }
- };
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mSession.updatePlayerConnector(mPlayer, agent);
- agent.notifyShuffleModeChanged();
+ mSession.getMockPlaylistAgent().setShuffleMode(testShuffleMode);
+ mSession.getMockPlaylistAgent().notifyShuffleModeChanged();
assertTrue(controllerCallback.await(WAIT_TIME_MS));
assertTrue(controllerCallback.mOnShuffleModeChangedCalled);
- assertEquals(testShuffleMode, controller.getShuffleMode());
+ assertEquals(testShuffleMode, mControllerCompat.getShuffleMode());
}
@Test
- public void testClose() throws InterruptedException {
+ public void testClose() throws Exception {
prepareLooper();
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
mSession.close();
assertTrue(controllerCallback.await(WAIT_TIME_MS));
@@ -153,17 +128,16 @@
}
@Test
- public void testUpdatePlayer() throws InterruptedException {
+ public void testUpdatePlayer() throws Exception {
prepareLooper();
final int testState = MediaPlayerConnector.PLAYER_STATE_PLAYING;
final int testBufferingPosition = 1500;
final float testSpeed = 1.5f;
- final List<MediaItem2> testPlaylist = TestUtils.createPlaylist(3);
+ final List<MediaItem2> testPlaylist = MediaTestUtils.createPlaylist(3);
final String testPlaylistTitle = "testPlaylistTitle";
final MediaMetadata2 testPlaylistMetadata = new MediaMetadata2.Builder()
.putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, testPlaylistTitle).build();
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
// TODO: Make each callback method use their own CountDownLatch.
if (Build.VERSION.SDK_INT < 21) {
@@ -174,18 +148,14 @@
// the playback type (local -> local), onAudioInfoChanged will not be called.
controllerCallback.reset(6);
}
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- MockPlayer player = new MockPlayer(0);
- player.mLastPlayerState = testState;
- player.mBufferedPosition = testBufferingPosition;
- player.mPlaybackSpeed = testSpeed;
-
- MockPlaylistAgent agent = new MockPlaylistAgent();
- agent.mPlaylist = testPlaylist;
- agent.mCurrentMediaItem = testPlaylist.get(0);
- agent.mMetadata = testPlaylistMetadata;
- mSession.updatePlayerConnector(player, agent);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ testState, 0 /* buffState */, 0 /* pos */, testBufferingPosition,
+ testSpeed, null /* audioAttrs */);
+ Bundle agentConfig = RemoteMediaSession2.createMockPlaylistAgentConfig(
+ testPlaylist, testPlaylist.get(0), testPlaylistMetadata);
+ mSession.updatePlayerConnector(playerConfig, agentConfig);
assertTrue(controllerCallback.await(WAIT_TIME_MS));
assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
@@ -198,7 +168,7 @@
assertTrue(controllerCallback.mOnMetadataChangedCalled);
assertTrue(controllerCallback.mOnQueueChangedCalled);
assertTrue(controllerCallback.mOnQueueTitleChangedCalled);
- List<QueueItem> queue = controller.getQueue();
+ List<QueueItem> queue = mControllerCompat.getQueue();
assertNotNull(queue);
assertEquals(testPlaylist.size(), queue.size());
for (int i = 0; i < testPlaylist.size(); i++) {
@@ -209,14 +179,13 @@
}
@Test
- public void testUpdatePlayer_playbackTypeChangedToRemote() throws InterruptedException {
+ public void testUpdatePlayer_playbackTypeChangedToRemote() throws Exception {
prepareLooper();
final int controlType = VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE;
- final float maxVolume = 25;
- final float currentVolume = 10;
+ final int maxVolume = 25;
+ final int currentVolume = 10;
final CountDownLatch latch = new CountDownLatch(1);
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCompat.Callback controllerCallback =
new MediaControllerCompat.Callback() {
@Override
@@ -228,32 +197,34 @@
latch.countDown();
}
};
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- MockRemotePlayer remotePlayer = new MockRemotePlayer(controlType, maxVolume, currentVolume);
- mSession.updatePlayerConnector(remotePlayer, null);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ controlType, maxVolume, currentVolume, null);
+ mSession.updatePlayerConnector(playerConfig, null);
assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
- MediaControllerCompat.PlaybackInfo info = controller.getPlaybackInfo();
+ MediaControllerCompat.PlaybackInfo info = mControllerCompat.getPlaybackInfo();
assertEquals(MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_REMOTE,
info.getPlaybackType());
assertEquals(controlType, info.getVolumeControl());
- assertEquals(maxVolume, info.getMaxVolume(), 0.0f);
- assertEquals(currentVolume, info.getCurrentVolume(), 0.0f);
+ assertEquals(maxVolume, info.getMaxVolume());
+ assertEquals(currentVolume, info.getCurrentVolume());
}
@Test
- public void testUpdatePlayer_playbackTypeChangedToLocal() throws InterruptedException {
+ public void testUpdatePlayer_playbackTypeChangedToLocal() throws Exception {
prepareLooper();
- mSession.updatePlayerConnector(
- new MockRemotePlayer(VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, 10, 1), null);
+ Bundle prevPlayerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, 10 /* maxVolume */,
+ 1 /* currentVolume */, null /* audioAttrs */);
+ mSession.updatePlayerConnector(prevPlayerConfig, null);
final int legacyStream = AudioManager.STREAM_RING;
final AudioAttributesCompat attrs = new AudioAttributesCompat.Builder()
.setLegacyStreamType(legacyStream).build();
final CountDownLatch latch = new CountDownLatch(1);
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCompat.Callback controllerCallback =
new MediaControllerCompat.Callback() {
@Override
@@ -265,11 +236,12 @@
}
}
};
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- MockPlayer player = new MockPlayer(0);
- player.setAudioAttributes(attrs);
- mSession.updatePlayerConnector(player, null);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ 0 /* state */, 0 /* buffState */, 0 /* pos */, 0 /* bufferingPosition */,
+ 1.0f /* speed */, attrs);
+ mSession.updatePlayerConnector(playerConfig, null);
// In API 21 and 22, onAudioInfoChanged is not called when playback is changed to local.
if (Build.VERSION.SDK_INT == 21 || Build.VERSION.SDK_INT == 22) {
@@ -278,20 +250,19 @@
assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
}
- MediaControllerCompat.PlaybackInfo info = controller.getPlaybackInfo();
+ MediaControllerCompat.PlaybackInfo info = mControllerCompat.getPlaybackInfo();
assertEquals(MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_LOCAL,
info.getPlaybackType());
assertEquals(legacyStream, info.getAudioStream());
}
@Test
- public void testUpdatePlayer_playbackTypeNotChanged_local() throws InterruptedException {
+ public void testUpdatePlayer_playbackTypeNotChanged_local() throws Exception {
final int legacyStream = AudioManager.STREAM_RING;
final AudioAttributesCompat attrs = new AudioAttributesCompat.Builder()
.setLegacyStreamType(legacyStream).build();
final CountDownLatch latch = new CountDownLatch(1);
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCompat.Callback controllerCallback =
new MediaControllerCompat.Callback() {
@Override
@@ -302,11 +273,12 @@
latch.countDown();
}
};
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- MockPlayer player = new MockPlayer(0);
- player.setAudioAttributes(attrs);
- mSession.updatePlayerConnector(player, null);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ 0 /* state */, 0 /* buffState */, 0 /* pos */, 0 /* bufferingPosition */,
+ 1.0f /* speed */, attrs);
+ mSession.updatePlayerConnector(playerConfig, null);
// In API 21+, onAudioInfoChanged() is not called when playbackType is not changed.
if (Build.VERSION.SDK_INT >= 21) {
@@ -315,23 +287,25 @@
assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
}
- MediaControllerCompat.PlaybackInfo info = controller.getPlaybackInfo();
+ MediaControllerCompat.PlaybackInfo info = mControllerCompat.getPlaybackInfo();
assertEquals(MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_LOCAL,
info.getPlaybackType());
assertEquals(legacyStream, info.getAudioStream());
}
@Test
- public void testUpdatePlayer_playbackTypeNotChanged_remote() throws InterruptedException {
- mSession.updatePlayerConnector(
- new MockRemotePlayer(VolumeProviderCompat.VOLUME_CONTROL_FIXED, 10, 1), null);
+ public void testUpdatePlayer_playbackTypeNotChanged_remote() throws Exception {
+ prepareLooper();
+ Bundle prevPlayerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, 10 /* maxVolume */,
+ 1 /* currentVolume */, null /* audioAttrs */);
+ mSession.updatePlayerConnector(prevPlayerConfig, null);
final int controlType = VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE;
- final float maxVolume = 25;
- final float currentVolume = 10;
+ final int maxVolume = 25;
+ final int currentVolume = 10;
final CountDownLatch latch = new CountDownLatch(1);
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCompat.Callback controllerCallback =
new MediaControllerCompat.Callback() {
@Override
@@ -345,10 +319,11 @@
}
}
};
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- MockRemotePlayer remotePlayer = new MockRemotePlayer(controlType, maxVolume, currentVolume);
- mSession.updatePlayerConnector(remotePlayer, null);
+ Bundle playerConfig = RemoteMediaSession2.createMockPlayerConnectorConfig(
+ controlType, maxVolume, currentVolume, null);
+ mSession.updatePlayerConnector(playerConfig, null);
// In API 21+, onAudioInfoChanged() is not called when playbackType is not changed.
if (Build.VERSION.SDK_INT >= 21) {
@@ -357,7 +332,7 @@
assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
}
- MediaControllerCompat.PlaybackInfo info = controller.getPlaybackInfo();
+ MediaControllerCompat.PlaybackInfo info = mControllerCompat.getPlaybackInfo();
assertEquals(MediaControllerCompat.PlaybackInfo.PLAYBACK_TYPE_REMOTE,
info.getPlaybackType());
assertEquals(controlType, info.getVolumeControl());
@@ -370,12 +345,11 @@
prepareLooper();
final int targetState = MediaPlayerConnector.PLAYER_STATE_PLAYING;
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mPlayer.notifyPlaybackState(targetState);
+ mSession.getMockPlayer().notifyPlayerStateChanged(targetState);
assertTrue(controllerCallback.await(WAIT_TIME_MS));
assertTrue(controllerCallback.mOnSessionReadyCalled);
assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
@@ -388,13 +362,12 @@
prepareLooper();
final float speed = 1.5f;
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mPlayer.setPlaybackSpeed(speed);
- mPlayer.notifyPlaybackSpeedChanged(speed);
+ mSession.getMockPlayer().setPlaybackSpeed(speed);
+ mSession.getMockPlayer().notifyPlaybackSpeedChanged(speed);
assertTrue(controllerCallback.await(WAIT_TIME_MS));
assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
assertEquals(speed, controllerCallback.mPlaybackState.getPlaybackSpeed(), 0.0f);
@@ -403,19 +376,18 @@
@Test
public void testBufferingStateChange() throws Exception {
prepareLooper();
- final List<MediaItem2> testPlaylist = TestUtils.createPlaylist(3);
- final MediaItem2 testItem = testPlaylist.get(0);
+ final List<MediaItem2> testPlaylist = MediaTestUtils.createPlaylist(3);
+ final int testItemIndex = 0;
final int testBufferingState = MediaPlayerConnector.BUFFERING_STATE_BUFFERING_AND_PLAYABLE;
final long testBufferingPosition = 500;
- mSession.setPlaylist(testPlaylist, null);
+ mSession.getMockPlaylistAgent().setPlaylistWithDummyDsd(testPlaylist);
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mPlayer.mBufferedPosition = testBufferingPosition;
- mPlayer.notifyBufferingStateChanged(testItem.getDataSourceDesc(), testBufferingState);
+ mSession.getMockPlayer().setBufferedPosition(testBufferingPosition);
+ mSession.getMockPlayer().notifyBufferingStateChanged(testItemIndex, testBufferingState);
assertTrue(controllerCallback.await(WAIT_TIME_MS));
assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
assertEquals(testBufferingPosition,
@@ -423,34 +395,32 @@
}
@Test
- public void testSeekComplete() throws InterruptedException {
+ public void testSeekComplete() throws Exception {
prepareLooper();
final long testSeekPosition = 1300;
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mPlayer.mCurrentPosition = testSeekPosition;
- mPlayer.mLastPlayerState = MediaPlayerConnector.PLAYER_STATE_PAUSED;
- mPlayer.notifySeekCompleted(testSeekPosition);
+ mSession.getMockPlayer().setCurrentPosition(testSeekPosition);
+ mSession.getMockPlayer().setPlayerState(MediaPlayerConnector.PLAYER_STATE_PAUSED);
+ mSession.getMockPlayer().notifySeekCompleted(testSeekPosition);
assertTrue(controllerCallback.await(TIMEOUT_MS));
assertTrue(controllerCallback.mOnPlaybackStateChangedCalled);
assertEquals(testSeekPosition, controllerCallback.mPlaybackState.getPosition());
}
@Test
- public void testNotifyError() throws InterruptedException {
+ public void testNotifyError() throws Exception {
prepareLooper();
final int errorCode = MediaSession2.ERROR_CODE_NOT_AVAILABLE_IN_REGION;
final Bundle extras = new Bundle();
extras.putString("args", "testNotifyError");
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
mSession.notifyError(errorCode, extras);
assertTrue(controllerCallback.await(TIMEOUT_MS));
@@ -460,26 +430,26 @@
}
@Test
- public void testCurrentMediaItemChange() throws InterruptedException {
+ public void testCurrentMediaItemChange() throws Exception {
prepareLooper();
String displayTitle = "displayTitle";
MediaMetadata2 metadata = new MediaMetadata2.Builder()
.putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, displayTitle).build();
MediaItem2 currentMediaItem = new MediaItem2.Builder(FLAG_PLAYABLE)
- .setMetadata(metadata).setDataSourceDesc(TestUtils.createDSD()).build();
+ .setMetadata(metadata).setDataSourceDesc(MediaTestUtils.createDSD()).build();
- List<MediaItem2> playlist = TestUtils.createPlaylist(5);
- playlist.set(3, currentMediaItem);
- mMockAgent.mPlaylist = playlist;
+ List<MediaItem2> playlist = MediaTestUtils.createPlaylist(5);
+ final int testItemIndex = 3;
+ playlist.set(testItemIndex, currentMediaItem);
+ mSession.getMockPlaylistAgent().setPlaylistWithDummyDsd(playlist);
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mMockAgent.mCurrentMediaItem = currentMediaItem;
- mPlayer.notifyCurrentDataSourceChanged(currentMediaItem.getDataSourceDesc());
+ mSession.getMockPlaylistAgent().setCurrentMediaItem(testItemIndex);
+ mSession.getMockPlayer().notifyCurrentDataSourceChanged(testItemIndex);
assertTrue(controllerCallback.await(TIMEOUT_MS));
assertTrue(controllerCallback.mOnMetadataChangedCalled);
@@ -488,27 +458,26 @@
}
@Test
- public void testPlaylistAndPlaylistMetadataChange() throws InterruptedException {
+ public void testPlaylistAndPlaylistMetadataChange() throws Exception {
prepareLooper();
- final List<MediaItem2> playlist = TestUtils.createPlaylist(5);
+ final List<MediaItem2> playlist = MediaTestUtils.createPlaylist(5);
final String playlistTitle = "playlistTitle";
MediaMetadata2 playlistMetadata = new MediaMetadata2.Builder()
.putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(2);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mMockAgent.mPlaylist = playlist;
- mMockAgent.mMetadata = playlistMetadata;
- mMockAgent.notifyPlaylistChanged();
+ mSession.getMockPlaylistAgent().setPlaylist(playlist);
+ mSession.getMockPlaylistAgent().setPlaylistMetadata(playlistMetadata);
+ mSession.getMockPlaylistAgent().notifyPlaylistChanged();
assertTrue(controllerCallback.await(TIMEOUT_MS));
assertTrue(controllerCallback.mOnQueueChangedCalled);
assertTrue(controllerCallback.mOnQueueTitleChangedCalled);
- List<QueueItem> queue = controller.getQueue();
+ List<QueueItem> queue = mControllerCompat.getQueue();
assertNotNull(queue);
assertEquals(playlist.size(), queue.size());
for (int i = 0; i < playlist.size(); i++) {
@@ -518,19 +487,18 @@
}
@Test
- public void testPlaylistMetadataChange() throws InterruptedException {
+ public void testPlaylistMetadataChange() throws Exception {
prepareLooper();
final String playlistTitle = "playlistTitle";
MediaMetadata2 playlistMetadata = new MediaMetadata2.Builder()
.putText(MediaMetadata2.METADATA_KEY_DISPLAY_TITLE, playlistTitle).build();
- final MediaControllerCompat controller = mSession.getSessionCompat().getController();
final MediaControllerCallback controllerCallback = new MediaControllerCallback();
controllerCallback.reset(1);
- controller.registerCallback(controllerCallback, sHandler);
+ mControllerCompat.registerCallback(controllerCallback, sHandler);
- mMockAgent.mMetadata = playlistMetadata;
- mMockAgent.notifyPlaylistMetadataChanged();
+ mSession.getMockPlaylistAgent().setPlaylistMetadata(playlistMetadata);
+ mSession.getMockPlaylistAgent().notifyPlaylistMetadataChanged();
assertTrue(controllerCallback.await(TIMEOUT_MS));
assertTrue(controllerCallback.mOnQueueTitleChangedCalled);
@@ -555,7 +523,7 @@
private PlaybackStateCompat mPlaybackState;
private MediaMetadataCompat mMediaMetadata;
- private List<MediaSessionCompat.QueueItem> mQueue;
+ private List<QueueItem> mQueue;
private CharSequence mTitle;
private String mEvent;
private Bundle mExtras;
@@ -611,7 +579,7 @@
}
@Override
- public void onQueueChanged(List<MediaSessionCompat.QueueItem> queue) {
+ public void onQueueChanged(List<QueueItem> queue) {
mOnQueueChangedCalled = true;
mQueue = queue;
mLatch.countDown();
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaSession2Service.java b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaSession2Service.java
index b60edda..b75fc03 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaSession2Service.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/androidx/media/test/service/RemoteMediaSession2Service.java
@@ -26,18 +26,11 @@
import static androidx.media.test.lib.CommonConstants.KEY_CURRENT_VOLUME;
import static androidx.media.test.lib.CommonConstants.KEY_MAX_VOLUME;
import static androidx.media.test.lib.CommonConstants.KEY_MEDIA_ITEM;
+import static androidx.media.test.lib.CommonConstants.KEY_METADATA;
import static androidx.media.test.lib.CommonConstants.KEY_PLAYER_STATE;
import static androidx.media.test.lib.CommonConstants.KEY_PLAYLIST;
import static androidx.media.test.lib.CommonConstants.KEY_SPEED;
-import static androidx.media.test.lib.CommonConstants.KEY_STREAM;
import static androidx.media.test.lib.CommonConstants.KEY_VOLUME_CONTROL_TYPE;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands
- .CUSTOM_METHOD_SET_MULTIPLE_VALUES;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands.UPDATE_PLAYER;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands
- .UPDATE_PLAYER_FOR_SETTING_STREAM_TYPE;
-import static androidx.media.test.lib.MediaSession2Constants.CustomCommands
- .UPDATE_PLAYER_WITH_VOLUME_PROVIDER;
import static androidx.media.test.lib.MediaSession2Constants
.TEST_CONTROLLER_CALLBACK_SESSION_REJECTS;
import static androidx.media.test.lib.MediaSession2Constants.TEST_GET_SESSION_ACTIVITY;
@@ -54,6 +47,8 @@
import android.support.mediacompat.testlib.IRemoteMediaSession2;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.media.AudioAttributesCompat;
import androidx.media.test.lib.MockActivity;
import androidx.media.test.lib.TestUtils.SyncHandler;
@@ -61,6 +56,8 @@
import androidx.media2.FileDataSourceDesc2;
import androidx.media2.MediaItem2;
import androidx.media2.MediaMetadata2;
+import androidx.media2.MediaPlayerConnector;
+import androidx.media2.MediaPlaylistAgent;
import androidx.media2.MediaSession2;
import androidx.media2.MediaSession2.ControllerInfo;
import androidx.media2.SessionCommand2;
@@ -179,56 +176,6 @@
throws RemoteException {
MediaSession2 session2 = mSession2Map.get(sessionId);
args.setClassLoader(MediaSession2.class.getClassLoader());
-
- switch (command) {
- case UPDATE_PLAYER: {
- MockPlayerConnector newPlayer = new MockPlayerConnector(0);
- newPlayer.mLastPlayerState = args.getInt(KEY_PLAYER_STATE);
- newPlayer.setAudioAttributes(AudioAttributesCompat.fromBundle(
- (Bundle) args.getParcelable(KEY_AUDIO_ATTRIBUTES)));
-
- MockPlaylistAgent newAgent = new MockPlaylistAgent();
- newAgent.mPlaylist = MediaTestUtils.playlistFromParcelableList(
- args.getParcelableArrayList(KEY_PLAYLIST), false /* createDsd */);
-
- session2.updatePlayerConnector(newPlayer, newAgent);
- break;
- }
- case UPDATE_PLAYER_FOR_SETTING_STREAM_TYPE: {
- // Set stream of the session.
- final int stream = args.getInt(KEY_STREAM);
- AudioAttributesCompat attrs = new AudioAttributesCompat.Builder()
- .setLegacyStreamType(stream)
- .build();
- MockPlayerConnector newPlayer = new MockPlayerConnector(0);
- newPlayer.setAudioAttributes(attrs);
- session2.updatePlayerConnector(newPlayer, null);
- break;
- }
- case UPDATE_PLAYER_WITH_VOLUME_PROVIDER: {
- MockRemotePlayerConnector remotePlayer = new MockRemotePlayerConnector(
- args.getInt(KEY_VOLUME_CONTROL_TYPE),
- args.getInt(KEY_MAX_VOLUME),
- args.getInt(KEY_CURRENT_VOLUME));
- remotePlayer.setAudioAttributes(AudioAttributesCompat.fromBundle(
- (Bundle) args.getParcelable(KEY_AUDIO_ATTRIBUTES)));
- session2.updatePlayerConnector(remotePlayer, null);
- break;
- }
- case CUSTOM_METHOD_SET_MULTIPLE_VALUES: {
- MockPlaylistAgent agent = (MockPlaylistAgent) session2.getPlaylistAgent();
- MockPlayerConnector player =
- (MockPlayerConnector) session2.getPlayerConnector();
-
- player.mLastPlayerState = args.getInt(KEY_PLAYER_STATE);
- player.mLastBufferingState = args.getInt(KEY_BUFFERING_STATE);
- player.mCurrentPosition = args.getLong(KEY_CURRENT_POSITION);
- player.mBufferedPosition = args.getLong(KEY_BUFFERED_POSITION);
- player.mPlaybackSpeed = args.getFloat(KEY_SPEED);
- agent.mCurrentMediaItem = MediaItem2.fromBundle(args.getBundle(KEY_MEDIA_ITEM));
- break;
- }
- }
}
////////////////////////////////////////////////////////////////////////////////
@@ -238,14 +185,62 @@
@Override
public Bundle getToken(String sessionId) throws RemoteException {
MediaSession2 session2 = mSession2Map.get(sessionId);
- return session2 != null ? session2.getToken().toBundle() : null;
+ return session2.getToken().toBundle();
}
@Override
public Bundle getCompatToken(String sessionId) throws RemoteException {
MediaSession2 session2 = mSession2Map.get(sessionId);
- return session2 != null ? session2.getSessionCompat().getSessionToken().toBundle()
- : null;
+ return session2.getSessionCompat().getSessionToken().toBundle();
+ }
+
+ @Override
+ public void updatePlayerConnector(String sessionId, @NonNull Bundle playerConfig,
+ @Nullable Bundle agentConfig) throws RemoteException {
+ playerConfig.setClassLoader(MediaSession2.class.getClassLoader());
+ if (agentConfig != null) {
+ agentConfig.setClassLoader(MediaSession2.class.getClassLoader());
+ }
+ MediaSession2 session2 = mSession2Map.get(sessionId);
+ session2.updatePlayerConnector(
+ createMockPlayerConnector(playerConfig),
+ createMockPlaylistAgent(agentConfig));
+ }
+
+ private MediaPlayerConnector createMockPlayerConnector(Bundle playerConfig) {
+ MediaPlayerConnector playerConnector;
+ if (playerConfig.containsKey(KEY_VOLUME_CONTROL_TYPE)) {
+ // Remote player
+ playerConnector = new MockRemotePlayerConnector(
+ playerConfig.getInt(KEY_VOLUME_CONTROL_TYPE),
+ playerConfig.getInt(KEY_MAX_VOLUME),
+ playerConfig.getInt(KEY_CURRENT_VOLUME));
+ } else {
+ // Local player
+ MockPlayerConnector localPlayer = new MockPlayerConnector(0);
+ localPlayer.mLastPlayerState = playerConfig.getInt(KEY_PLAYER_STATE);
+ localPlayer.mLastBufferingState = playerConfig.getInt(KEY_BUFFERING_STATE);
+ localPlayer.mCurrentPosition = playerConfig.getLong(KEY_CURRENT_POSITION);
+ localPlayer.mBufferedPosition = playerConfig.getLong(KEY_BUFFERED_POSITION);
+ localPlayer.mPlaybackSpeed = playerConfig.getFloat(KEY_SPEED);
+ playerConnector = localPlayer;
+ }
+ playerConnector.setAudioAttributes(
+ AudioAttributesCompat.fromBundle(
+ playerConfig.getBundle(KEY_AUDIO_ATTRIBUTES)));
+ return playerConnector;
+ }
+
+ private MediaPlaylistAgent createMockPlaylistAgent(Bundle agentConfig) {
+ if (agentConfig == null) {
+ return null;
+ }
+ MockPlaylistAgent agent = new MockPlaylistAgent();
+ agent.mPlaylist = MediaTestUtils.playlistFromParcelableList(
+ agentConfig.getParcelableArrayList(KEY_PLAYLIST), false /* createDsd */);
+ agent.mCurrentMediaItem = MediaItem2.fromBundle(agentConfig.getBundle(KEY_MEDIA_ITEM));
+ agent.mMetadata = MediaMetadata2.fromBundle(agentConfig.getBundle(KEY_METADATA));
+ return agent;
}
@Override
@@ -419,7 +414,7 @@
}
@Override
- public void setPlaylistWithNewDsd(String sessionId, List<Bundle> playlist)
+ public void setPlaylistWithDummyDsd(String sessionId, List<Bundle> playlist)
throws RemoteException {
MediaSession2 session2 = mSession2Map.get(sessionId);
MockPlaylistAgent agent = (MockPlaylistAgent) session2.getPlaylistAgent();
diff --git a/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession2.aidl b/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession2.aidl
index a972291..96bdac9 100644
--- a/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession2.aidl
+++ b/media/version-compat-tests/lib/src/main/aidl/android/support/mediacompat/testlib/IRemoteMediaSession2.aidl
@@ -27,6 +27,7 @@
// MediaSession2 Methods
Bundle getToken(String sessionId);
Bundle getCompatToken(String sessionId);
+ void updatePlayerConnector(String sessionId, in Bundle playerBundle, in Bundle agentBundle);
void sendCustomCommand(String sessionId, in Bundle command, in Bundle args);
void sendCustomCommand2(String sessionId, in Bundle controller, in Bundle command,
in Bundle args, in ResultReceiver receiver);
@@ -51,7 +52,7 @@
// MockPlaylistAgent Methods
void setPlaylist(String sessionId, in List<Bundle> playlist);
- void setPlaylistWithNewDsd(String sessionId, in List<Bundle> playlist);
+ void setPlaylistWithDummyDsd(String sessionId, in List<Bundle> playlist);
void setPlaylistMetadata(String sessionId, in Bundle metadata);
void setShuffleMode(String sessionId, int shuffleMode);
void setRepeatMode(String sessionId, int repeatMode);
diff --git a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java
index 2dbb5e4..ed6b02d 100644
--- a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java
+++ b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/CommonConstants.java
@@ -56,6 +56,7 @@
public static final String KEY_BUFFERING_STATE = "bufferingState";
public static final String KEY_SPEED = "speed";
public static final String KEY_MEDIA_ITEM = "mediaItem";
+ public static final String KEY_METADATA = "metadata";
public static final String KEY_ARGUMENTS = "arguments";
public static final String KEY_RESULT_RECEIVER = "resultReceiver";
public static final String KEY_MAX_VOLUME = "maxVolume";
diff --git a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSession2Constants.java b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSession2Constants.java
index 3a1b3a0..e982cdc 100644
--- a/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSession2Constants.java
+++ b/media/version-compat-tests/lib/src/main/java/androidx/media/test/lib/MediaSession2Constants.java
@@ -32,10 +32,6 @@
* Constants for test-specific custom command which will be run in the service app.
*/
public static class CustomCommands {
- public static final int UPDATE_PLAYER = 1000;
- public static final int UPDATE_PLAYER_FOR_SETTING_STREAM_TYPE = 1001;
- public static final int UPDATE_PLAYER_WITH_VOLUME_PROVIDER = 1002;
- public static final int CUSTOM_METHOD_SET_MULTIPLE_VALUES = 1900;
private CustomCommands() {
}