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;
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();
}
}

View File

@@ -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);