From 7be15cdd236bd9f5ee4bbbe451d22593dcee50b7 Mon Sep 17 00:00:00 2001 From: ryanywlin Date: Tue, 17 Apr 2018 18:25:38 +0800 Subject: [PATCH] Identify cast mode properly in audio switch - Use STREAM_MUSIC to idetify cast mode - Use STREAM_MUSIC to detect wired headset Bug: 78141750 Test: make RunSettingsRoboTests ROBOTEST_FILTER="MediaOutputPreferenceControllerTest" -j40 Change-Id: I92273d41d3debfc3d6327c4ca09143a2dd9b1cb6 --- .../sound/MediaOutputPreferenceController.java | 17 ++++------------- .../MediaOutputPreferenceControllerTest.java | 3 ++- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/sound/MediaOutputPreferenceController.java b/src/com/android/settings/sound/MediaOutputPreferenceController.java index 74c77cd23f7..df07dc5fa68 100644 --- a/src/com/android/settings/sound/MediaOutputPreferenceController.java +++ b/src/com/android/settings/sound/MediaOutputPreferenceController.java @@ -16,14 +16,13 @@ package com.android.settings.sound; -import static android.media.AudioManager.STREAM_VOICE_CALL; +import static android.media.AudioManager.STREAM_MUSIC; +import static android.media.AudioSystem.DEVICE_OUT_REMOTE_SUBMIX; import static android.media.AudioSystem.DEVICE_OUT_USB_HEADSET; -import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.media.AudioManager; -import android.media.MediaRouter; import android.support.v7.preference.Preference; import com.android.internal.util.ArrayUtils; @@ -51,8 +50,7 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro return; } - if (mAudioManager.isMusicActiveRemotely() || isCastDevice(mMediaRouter)) { - // TODO(76455906): Workaround for cast mode, need a solid way to identify cast mode. + if (isStreamFromOutputDevice(STREAM_MUSIC, DEVICE_OUT_REMOTE_SUBMIX)) { // In cast mode, disable switch entry. preference.setEnabled(false); preference.setSummary(mContext.getText(R.string.media_output_summary_unavailable)); @@ -93,7 +91,7 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro // Setup devices entries, select active connected device setupPreferenceEntries(mediaOutputs, mediaValues, activeDevice); - if (isStreamFromOutputDevice(STREAM_VOICE_CALL, DEVICE_OUT_USB_HEADSET)) { + if (isStreamFromOutputDevice(STREAM_MUSIC, DEVICE_OUT_USB_HEADSET)) { // If wired headset is plugged in and active, select to default device. mSelectedIndex = getDefaultDeviceIndex(); } @@ -108,11 +106,4 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro mProfileManager.getA2dpProfile().setActiveDevice(device); } } - - private static boolean isCastDevice(MediaRouter mediaRouter) { - final MediaRouter.RouteInfo selected = mediaRouter.getSelectedRoute( - ROUTE_TYPE_REMOTE_DISPLAY); - return selected != null && selected.getPresentationDisplay() != null - && selected.getPresentationDisplay().isValid(); - } } diff --git a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java index 4da5f2711e2..1c7c1c4c7b6 100644 --- a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.sound; +import static android.media.AudioSystem.DEVICE_OUT_REMOTE_SUBMIX; import static android.media.AudioSystem.DEVICE_OUT_USB_HEADSET; import static com.google.common.truth.Truth.assertThat; @@ -198,7 +199,7 @@ public class MediaOutputPreferenceControllerTest { */ @Test public void updateState_mediaStreamIsCapturedByCast_shouldDisableAndSetDefaultSummary() { - mShadowAudioManager.setMusicActiveRemotely(true); + mShadowAudioManager.setStream(DEVICE_OUT_REMOTE_SUBMIX); mController.updateState(mPreference);