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
This commit is contained in:
ryanywlin
2018-04-17 18:25:38 +08:00
committed by Ryan Lin
parent a46dd4bd4b
commit 7be15cdd23
2 changed files with 6 additions and 14 deletions

View File

@@ -16,14 +16,13 @@
package com.android.settings.sound; 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.AudioSystem.DEVICE_OUT_USB_HEADSET;
import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.MediaRouter;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
@@ -51,8 +50,7 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
return; return;
} }
if (mAudioManager.isMusicActiveRemotely() || isCastDevice(mMediaRouter)) { if (isStreamFromOutputDevice(STREAM_MUSIC, DEVICE_OUT_REMOTE_SUBMIX)) {
// TODO(76455906): Workaround for cast mode, need a solid way to identify cast mode.
// In cast mode, disable switch entry. // In cast mode, disable switch entry.
preference.setEnabled(false); preference.setEnabled(false);
preference.setSummary(mContext.getText(R.string.media_output_summary_unavailable)); 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 // Setup devices entries, select active connected device
setupPreferenceEntries(mediaOutputs, mediaValues, activeDevice); 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. // If wired headset is plugged in and active, select to default device.
mSelectedIndex = getDefaultDeviceIndex(); mSelectedIndex = getDefaultDeviceIndex();
} }
@@ -108,11 +106,4 @@ public class MediaOutputPreferenceController extends AudioSwitchPreferenceContro
mProfileManager.getA2dpProfile().setActiveDevice(device); 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();
}
} }

View File

@@ -17,6 +17,7 @@
package com.android.settings.sound; 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 android.media.AudioSystem.DEVICE_OUT_USB_HEADSET;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -198,7 +199,7 @@ public class MediaOutputPreferenceControllerTest {
*/ */
@Test @Test
public void updateState_mediaStreamIsCapturedByCast_shouldDisableAndSetDefaultSummary() { public void updateState_mediaStreamIsCapturedByCast_shouldDisableAndSetDefaultSummary() {
mShadowAudioManager.setMusicActiveRemotely(true); mShadowAudioManager.setStream(DEVICE_OUT_REMOTE_SUBMIX);
mController.updateState(mPreference); mController.updateState(mPreference);