diff --git a/src/com/android/settings/media/MediaOutputUtils.java b/src/com/android/settings/media/MediaOutputUtils.java index b31d21f33c0..977c5178165 100644 --- a/src/com/android/settings/media/MediaOutputUtils.java +++ b/src/com/android/settings/media/MediaOutputUtils.java @@ -25,6 +25,9 @@ import androidx.annotation.Nullable; import com.android.settings.sound.MediaOutputPreferenceController; +import java.util.ArrayList; +import java.util.List; + /** * Utilities that can be shared between {@link MediaOutputIndicatorWorker} and * {@link MediaOutputPreferenceController}. @@ -43,6 +46,7 @@ public class MediaOutputUtils { MediaSessionManager mediaSessionManager) { MediaController localController = null; + final List remoteMediaSessionLists = new ArrayList<>(); for (MediaController controller : mediaSessionManager.getActiveSessions(null)) { final MediaController.PlaybackInfo pi = controller.getPlaybackInfo(); if (pi == null) { @@ -69,10 +73,14 @@ public class MediaOutputUtils { controller.getPackageName())) { localController = null; } + if (!remoteMediaSessionLists.contains(controller.getPackageName())) { + remoteMediaSessionLists.add(controller.getPackageName()); + } continue; } if (pi.getPlaybackType() == MediaController.PlaybackInfo.PLAYBACK_TYPE_LOCAL) { - if (localController == null) { + if (localController == null + && !remoteMediaSessionLists.contains(controller.getPackageName())) { localController = controller; } } diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputUtilsTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputUtilsTest.java index 2daf207597d..dea6a2c81ab 100644 --- a/tests/robotests/src/com/android/settings/media/MediaOutputUtilsTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaOutputUtilsTest.java @@ -115,6 +115,33 @@ public class MediaOutputUtilsTest { @Test public void getActiveLocalMediaController_bothHaveRemoteMediaAndLocalMedia_returnNull() { + mMediaControllers.clear(); + final MediaController.PlaybackInfo playbackInfo = new MediaController.PlaybackInfo( + MediaController.PlaybackInfo.PLAYBACK_TYPE_REMOTE, + VolumeProvider.VOLUME_CONTROL_ABSOLUTE, + 100, + 10, + new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build(), + null); + final PlaybackState playbackState = new PlaybackState.Builder() + .setState(PlaybackState.STATE_PLAYING, 0, 1) + .build(); + final MediaController remoteMediaController = mock(MediaController.class); + + mMediaControllers.add(remoteMediaController); + mMediaControllers.add(mMediaController); + initPlayback(); + + when(mMediaController.getPlaybackInfo()).thenReturn(mPlaybackInfo); + when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState); + when(remoteMediaController.getPlaybackInfo()).thenReturn(playbackInfo); + when(remoteMediaController.getPlaybackState()).thenReturn(playbackState); + + assertThat(MediaOutputUtils.getActiveLocalMediaController(mMediaSessionManager)).isNull(); + } + + @Test + public void getActiveLocalMediaController_bothHaveLocalMediaAndRemoteMedia_returnNull() { final MediaController.PlaybackInfo playbackInfo = new MediaController.PlaybackInfo( MediaController.PlaybackInfo.PLAYBACK_TYPE_REMOTE, VolumeProvider.VOLUME_CONTROL_ABSOLUTE,