summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java26
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);