Merge "Fix MediaPlayer device-aware session id configuration." into main
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 1ee5aa3..8e9c079 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -931,8 +931,7 @@
* @return a MediaPlayer object, or null if creation failed
*/
public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder) {
- int s = AudioSystem.newAudioSessionId();
- return create(context, uri, holder, null, s > 0 ? s : 0);
+ return create(context, uri, holder, null, AudioSystem.AUDIO_SESSION_ALLOCATE);
}
/**
@@ -994,8 +993,7 @@
* @return a MediaPlayer object, or null if creation failed
*/
public static MediaPlayer create(Context context, int resid) {
- int s = AudioSystem.newAudioSessionId();
- return create(context, resid, null, s > 0 ? s : 0);
+ return create(context, resid, null, AudioSystem.AUDIO_SESSION_ALLOCATE);
}
/**
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerUnitTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerUnitTest.java
index f812d5f..f27a568 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerUnitTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaPlayerUnitTest.java
@@ -30,6 +30,7 @@
import android.companion.virtual.VirtualDeviceManager;
import android.content.Context;
+import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.test.mock.MockContext;
@@ -37,6 +38,8 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.mediaframeworktest.R;
+
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -45,6 +48,8 @@
public class MediaPlayerUnitTest {
private static final int TEST_VIRTUAL_DEVICE_ID = 42;
+ private static final AudioAttributes AUDIO_ATTRIBUTES_MEDIA =
+ new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build();
@Test
public void testConstructionWithContext_virtualDeviceDefaultAudioPolicy() {
@@ -89,6 +94,49 @@
assertEquals(anotherSessionId, mediaPlayer.getAudioSessionId());
}
+ @Test
+ public void testCreateFromResource_virtualDeviceDefaultAudioPolicy() {
+ int vdmPlaybackSessionId = getContext().getSystemService(
+ AudioManager.class).generateAudioSessionId();
+ VirtualDeviceManager mockVdm = getMockVirtualDeviceManager(TEST_VIRTUAL_DEVICE_ID,
+ vdmPlaybackSessionId, DEVICE_POLICY_DEFAULT);
+ Context virtualDeviceContext = getVirtualDeviceMockContext(TEST_VIRTUAL_DEVICE_ID, mockVdm);
+
+ MediaPlayer mediaPlayer = MediaPlayer.create(virtualDeviceContext, R.raw.testmp3);
+
+ assertNotEquals(vdmPlaybackSessionId, mediaPlayer.getAudioSessionId());
+ assertTrue(mediaPlayer.getAudioSessionId() > 0);
+ }
+
+ @Test
+ public void testCreateFromResource_virtualDeviceCustomAudioPolicy() {
+ int vdmPlaybackSessionId = getContext().getSystemService(
+ AudioManager.class).generateAudioSessionId();
+ VirtualDeviceManager mockVdm = getMockVirtualDeviceManager(TEST_VIRTUAL_DEVICE_ID,
+ vdmPlaybackSessionId, DEVICE_POLICY_CUSTOM);
+ Context virtualDeviceContext = getVirtualDeviceMockContext(TEST_VIRTUAL_DEVICE_ID, mockVdm);
+
+ MediaPlayer mediaPlayer = MediaPlayer.create(virtualDeviceContext, R.raw.testmp3);
+
+ assertEquals(vdmPlaybackSessionId, mediaPlayer.getAudioSessionId());
+ }
+
+ @Test
+ public void testCreateFromResource_explicitSessionIdOverridesContext() {
+ int vdmPlaybackSessionId = getContext().getSystemService(
+ AudioManager.class).generateAudioSessionId();
+ int anotherSessionId = getContext().getSystemService(
+ AudioManager.class).generateAudioSessionId();
+ VirtualDeviceManager mockVdm = getMockVirtualDeviceManager(TEST_VIRTUAL_DEVICE_ID,
+ vdmPlaybackSessionId, DEVICE_POLICY_CUSTOM);
+ Context virtualDeviceContext = getVirtualDeviceMockContext(TEST_VIRTUAL_DEVICE_ID, mockVdm);
+
+ MediaPlayer mediaPlayer = MediaPlayer.create(virtualDeviceContext, R.raw.testmp3,
+ AUDIO_ATTRIBUTES_MEDIA, anotherSessionId);
+
+ assertEquals(anotherSessionId, mediaPlayer.getAudioSessionId());
+ }
+
private Context getContext() {
return InstrumentationRegistry.getInstrumentation().getContext();
}
@@ -98,6 +146,7 @@
when(mockContext.getDeviceId()).thenReturn(deviceId);
when(mockContext.getSystemService(VirtualDeviceManager.class)).thenReturn(vdm);
when(mockContext.getAttributionSource()).thenReturn(getContext().getAttributionSource());
+ when(mockContext.getResources()).thenReturn(getContext().getResources());
return mockContext;
}