diff options
3 files changed, 45 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 066bfc5c588d..1522cc490b43 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -165,6 +165,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private boolean mShowSafetyWarning; private long mLastToggledRingerOn; private boolean mDeviceInteractive = true; + boolean mInAudioSharing = false; private VolumePolicy mVolumePolicy; @GuardedBy("this") @@ -295,6 +296,9 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mJavaAdapter.alwaysCollectFlow( mAudioSharingInteractor.getVolume(), this::handleAudioSharingStreamVolumeChanges); + mJavaAdapter.alwaysCollectFlow( + mAudioSharingInteractor.isInAudioSharing(), + inSharing -> mInAudioSharing = inSharing); } } @@ -510,11 +514,18 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa // Since their values overlap with DEVICE_OUT_EARPIECE and DEVICE_OUT_SPEAKER. // Anyway, we can check BLE devices by using just DEVICE_OUT_BLE_HEADSET. final boolean routedToBluetooth = - (mAudio.getDevicesForStream(AudioManager.STREAM_MUSIC) & - (AudioManager.DEVICE_OUT_BLUETOOTH_A2DP | - AudioManager.DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | - AudioManager.DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | - AudioManager.DEVICE_OUT_BLE_HEADSET)) != 0; + // TODO(b/359737651): Need audio support to return broadcast mask. + // For now, mAudio.getDevicesForStream(AudioManager.STREAM_MUSIC) will return + // AudioManager.DEVICE_NONE, so we also need to check if the device is in audio + // sharing here. + mInAudioSharing + || (mAudio.getDevicesForStream(AudioManager.STREAM_MUSIC) + & (AudioManager.DEVICE_OUT_BLUETOOTH_A2DP + | AudioManager + .DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES + | AudioManager.DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER + | AudioManager.DEVICE_OUT_BLE_HEADSET)) + != 0; changed |= updateStreamRoutedToBluetoothW(stream, routedToBluetooth); } else if (stream == AudioManager.STREAM_VOICE_CALL) { final boolean routedToBluetooth = @@ -813,6 +824,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa ss.dynamic = true; ss.levelMin = mAudioSharingInteractor.getVolumeMin(); ss.levelMax = mAudioSharingInteractor.getVolumeMax(); + ss.routedToBluetooth = true; if (ss.level != volume) { ss.level = volume; } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index e56f6b32c085..2468449fb859 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -1892,8 +1892,8 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable, .equals(ss.remoteLabel)) { addRow( stream, - R.drawable.ic_volume_media, - R.drawable.ic_volume_media_mute, + R.drawable.ic_volume_media_bt, + R.drawable.ic_volume_media_bt_mute, true, false, true); diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index 8b7d921a1c5b..4ea1a0ca9f2b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -229,6 +229,32 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { } @Test + public void testVolumeChangeW_inAudioSharing_doStateChanged() { + ArgumentCaptor<VolumeDialogController.State> stateCaptor = + ArgumentCaptor.forClass(VolumeDialogController.State.class); + mVolumeController.setDeviceInteractive(false); + when(mWakefullnessLifcycle.getWakefulness()) + .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE); + // For now, mAudioManager.getDevicesForStream returns DEVICE_NONE during audio sharing + when(mAudioManager.getDevicesForStream(AudioManager.STREAM_MUSIC)) + .thenReturn(AudioManager.DEVICE_NONE); + + mVolumeController.mInAudioSharing = true; + mVolumeController.onVolumeChangedW(AudioManager.STREAM_MUSIC, AudioManager.FLAG_SHOW_UI); + verify(mCallback).onStateChanged(stateCaptor.capture()); + assertThat(stateCaptor.getValue().states.contains(AudioManager.STREAM_MUSIC)).isTrue(); + assertThat(stateCaptor.getValue().states.get(AudioManager.STREAM_MUSIC).routedToBluetooth) + .isTrue(); + + mVolumeController.mInAudioSharing = false; + mVolumeController.onVolumeChangedW(AudioManager.STREAM_MUSIC, AudioManager.FLAG_SHOW_UI); + verify(mCallback, times(2)).onStateChanged(stateCaptor.capture()); + assertThat(stateCaptor.getValue().states.contains(AudioManager.STREAM_MUSIC)).isTrue(); + assertThat(stateCaptor.getValue().states.get(AudioManager.STREAM_MUSIC).routedToBluetooth) + .isFalse(); + } + + @Test public void testOnRemoteVolumeChanged_newStream_noNullPointer() { MediaSession.Token token = new MediaSession.Token(Process.myUid(), null); mVolumeController.mMediaSessionsCallbacksW.onRemoteVolumeChanged(token, 0); |