MediaSession2: Send session info when a controller is connected
Bug: 72547163
Test: Run all tests once
Change-Id: I55730536cce6a938f8117abb433b492ac8e36bfc
diff --git a/packages/MediaComponents/test/AndroidManifest.xml b/packages/MediaComponents/test/AndroidManifest.xml
index 30bac87..48e4292 100644
--- a/packages/MediaComponents/test/AndroidManifest.xml
+++ b/packages/MediaComponents/test/AndroidManifest.xml
@@ -20,14 +20,7 @@
<application android:label="Media API Test">
<uses-library android:name="android.test.runner" />
- <activity android:name="android.widget2.VideoView2TestActivity"
- android:configChanges="keyboardHidden|orientation|screenSize"
- android:label="VideoView2TestActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
- </intent-filter>
- </activity>
+ <activity android:name="android.media.MockActivity" />
<!-- Keep the test services synced together with the TestUtils.java -->
<service android:name="android.media.MockMediaSessionService2">
diff --git a/packages/MediaComponents/test/src/android/media/MediaController2Test.java b/packages/MediaComponents/test/src/android/media/MediaController2Test.java
index f1fdf2e..139cc65 100644
--- a/packages/MediaComponents/test/src/android/media/MediaController2Test.java
+++ b/packages/MediaComponents/test/src/android/media/MediaController2Test.java
@@ -16,7 +16,9 @@
package android.media;
+import android.app.PendingIntent;
import android.content.Context;
+import android.content.Intent;
import android.media.MediaPlayerInterface.PlaybackListener;
import android.media.MediaSession2.Command;
import android.media.MediaSession2.ControllerInfo;
@@ -56,7 +58,9 @@
@FlakyTest
public class MediaController2Test extends MediaSession2TestBase {
private static final String TAG = "MediaController2Test";
+ private static final int DEFAULT_RATING_TYPE = Rating2.RATING_5_STARS;
+ PendingIntent mIntent;
MediaSession2 mSession;
MediaController2 mController;
MockPlayer mPlayer;
@@ -65,10 +69,15 @@
@Override
public void setUp() throws Exception {
super.setUp();
+ final Intent sessionActivity = new Intent(mContext, MockActivity.class);
// Create this test specific MediaSession2 to use our own Handler.
+ mIntent = PendingIntent.getActivity(mContext, 0, sessionActivity, 0);
+
mPlayer = new MockPlayer(1);
mSession = new MediaSession2.Builder(mContext, mPlayer)
.setSessionCallback(sHandlerExecutor, new SessionCallback(mContext))
+ .setRatingType(DEFAULT_RATING_TYPE)
+ .setSessionActivity(mIntent)
.setId(TAG).build();
mController = createController(mSession.getToken());
TestServiceRegistry.getInstance().setHandler(sHandler);
@@ -199,6 +208,18 @@
}
@Test
+ public void testGetRatingType() throws InterruptedException {
+ assertEquals(DEFAULT_RATING_TYPE, mController.getRatingType());
+ }
+
+ @Test
+ public void testGetSessionActivity() throws InterruptedException {
+ PendingIntent sessionActivity = mController.getSessionActivity();
+ assertEquals(mContext.getPackageName(), sessionActivity.getCreatorPackage());
+ assertEquals(Process.myUid(), sessionActivity.getCreatorUid());
+ }
+
+ @Test
public void testGetSetPlaylistParams() throws Exception {
final PlaylistParams params = new PlaylistParams(mContext,
PlaylistParams.REPEAT_MODE_ALL,
diff --git a/packages/MediaComponents/test/src/android/media/MediaSession2Test.java b/packages/MediaComponents/test/src/android/media/MediaSession2Test.java
index 43a6c2c..b00633b 100644
--- a/packages/MediaComponents/test/src/android/media/MediaSession2Test.java
+++ b/packages/MediaComponents/test/src/android/media/MediaSession2Test.java
@@ -27,6 +27,9 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.MediaController2.PlaybackInfo;
import android.media.MediaPlayerInterface.PlaybackListener;
import android.media.MediaSession2.Builder;
import android.media.MediaSession2.Command;
@@ -99,17 +102,15 @@
@Test
public void testSetPlayer() throws Exception {
- sHandler.postAndSync(() -> {
- MockPlayer player = new MockPlayer(0);
- // Test if setPlayer doesn't crash with various situations.
- mSession.setPlayer(mPlayer);
- mSession.setPlayer(player);
- mSession.close();
- });
+ MockPlayer player = new MockPlayer(0);
+ // Test if setPlayer doesn't crash with various situations.
+ mSession.setPlayer(mPlayer);
+ mSession.setPlayer(player);
+ mSession.close();
}
@Test
- public void testSetPlayerWithVolumeProvider() throws Exception {
+ public void testSetPlayer_playbackInfo() throws Exception {
MockPlayer player = new MockPlayer(0);
AudioAttributes attrs = new AudioAttributes.Builder()
.setContentType(CONTENT_TYPE_MUSIC)
@@ -125,7 +126,7 @@
final CountDownLatch latch = new CountDownLatch(1);
final TestControllerCallbackInterface callback = new TestControllerCallbackInterface() {
@Override
- public void onPlaybackInfoChanged(MediaController2.PlaybackInfo info) {
+ public void onPlaybackInfoChanged(PlaybackInfo info) {
assertEquals(MediaController2.PlaybackInfo.PLAYBACK_TYPE_REMOTE,
info.getPlaybackType());
assertEquals(attrs, info.getAudioAttributes());
@@ -136,18 +137,30 @@
}
};
+ mSession.setPlayer(player);
+
final MediaController2 controller = createController(mSession.getToken(), true, callback);
- assertNull(controller.getPlaybackInfo());
+ PlaybackInfo info = controller.getPlaybackInfo();
+ assertNotNull(info);
+ assertEquals(PlaybackInfo.PLAYBACK_TYPE_LOCAL, info.getPlaybackType());
+ assertEquals(attrs, info.getAudioAttributes());
+ AudioManager manager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ int localVolumeControlType = manager.isVolumeFixed()
+ ? VolumeProvider2.VOLUME_CONTROL_FIXED : VolumeProvider2.VOLUME_CONTROL_ABSOLUTE;
+ assertEquals(localVolumeControlType, info.getControlType());
+ assertEquals(manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), info.getMaxVolume());
+ assertEquals(manager.getStreamVolume(AudioManager.STREAM_MUSIC), info.getCurrentVolume());
mSession.setPlayer(player, volumeProvider);
assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
- MediaController2.PlaybackInfo infoOut = controller.getPlaybackInfo();
- assertEquals(MediaController2.PlaybackInfo.PLAYBACK_TYPE_REMOTE, infoOut.getPlaybackType());
- assertEquals(attrs, infoOut.getAudioAttributes());
- assertEquals(volumeControlType, infoOut.getPlaybackType());
- assertEquals(maxVolume, infoOut.getMaxVolume());
- assertEquals(currentVolume, infoOut.getCurrentVolume());
+ info = controller.getPlaybackInfo();
+ assertNotNull(info);
+ assertEquals(PlaybackInfo.PLAYBACK_TYPE_REMOTE, info.getPlaybackType());
+ assertEquals(attrs, info.getAudioAttributes());
+ assertEquals(volumeControlType, info.getControlType());
+ assertEquals(maxVolume, info.getMaxVolume());
+ assertEquals(currentVolume, info.getCurrentVolume());
}
@Test
diff --git a/packages/MediaComponents/test/src/android/media/MockActivity.java b/packages/MediaComponents/test/src/android/media/MockActivity.java
new file mode 100644
index 0000000..4627530
--- /dev/null
+++ b/packages/MediaComponents/test/src/android/media/MockActivity.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.app.Activity;
+
+public class MockActivity extends Activity {
+}