Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 97ed709f authored by Yiyi Shen's avatar Yiyi Shen
Browse files

[Audiosharing] Use media bt icon for volume bars in sharing

Test: atest
Bug: 336716411
Flag: com.android.settingslib.flags.volume_dialog_audio_sharing_fix
Change-Id: Iffb313401fdd250eb1215cf2969d242ef90d940a
parent c4936066
Loading
Loading
Loading
Loading
+17 −5
Original line number Original line Diff line number Diff line
@@ -165,6 +165,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
    private boolean mShowSafetyWarning;
    private boolean mShowSafetyWarning;
    private long mLastToggledRingerOn;
    private long mLastToggledRingerOn;
    private boolean mDeviceInteractive = true;
    private boolean mDeviceInteractive = true;
    boolean mInAudioSharing = false;


    private VolumePolicy mVolumePolicy;
    private VolumePolicy mVolumePolicy;
    @GuardedBy("this")
    @GuardedBy("this")
@@ -295,6 +296,9 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
            mJavaAdapter.alwaysCollectFlow(
            mJavaAdapter.alwaysCollectFlow(
                    mAudioSharingInteractor.getVolume(),
                    mAudioSharingInteractor.getVolume(),
                    this::handleAudioSharingStreamVolumeChanges);
                    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.
            //       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.
            //       Anyway, we can check BLE devices by using just DEVICE_OUT_BLE_HEADSET.
            final boolean routedToBluetooth =
            final boolean routedToBluetooth =
                    (mAudio.getDevicesForStream(AudioManager.STREAM_MUSIC) &
                    // TODO(b/359737651): Need audio support to return broadcast mask.
                            (AudioManager.DEVICE_OUT_BLUETOOTH_A2DP |
                    // For now, mAudio.getDevicesForStream(AudioManager.STREAM_MUSIC) will return
                            AudioManager.DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
                    // AudioManager.DEVICE_NONE, so we also need to check if the device is in audio
                            AudioManager.DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER |
                    // sharing here.
                            AudioManager.DEVICE_OUT_BLE_HEADSET)) != 0;
                    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);
            changed |= updateStreamRoutedToBluetoothW(stream, routedToBluetooth);
        } else if (stream == AudioManager.STREAM_VOICE_CALL) {
        } else if (stream == AudioManager.STREAM_VOICE_CALL) {
            final boolean routedToBluetooth =
            final boolean routedToBluetooth =
@@ -813,6 +824,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
                ss.dynamic = true;
                ss.dynamic = true;
                ss.levelMin = mAudioSharingInteractor.getVolumeMin();
                ss.levelMin = mAudioSharingInteractor.getVolumeMin();
                ss.levelMax = mAudioSharingInteractor.getVolumeMax();
                ss.levelMax = mAudioSharingInteractor.getVolumeMax();
                ss.routedToBluetooth = true;
                if (ss.level != volume) {
                if (ss.level != volume) {
                    ss.level = volume;
                    ss.level = volume;
                }
                }
+2 −2
Original line number Original line Diff line number Diff line
@@ -1892,8 +1892,8 @@ public class VolumeDialogImpl implements VolumeDialog, Dumpable,
                                .equals(ss.remoteLabel)) {
                                .equals(ss.remoteLabel)) {
                    addRow(
                    addRow(
                            stream,
                            stream,
                            R.drawable.ic_volume_media,
                            R.drawable.ic_volume_media_bt,
                            R.drawable.ic_volume_media_mute,
                            R.drawable.ic_volume_media_bt_mute,
                            true,
                            true,
                            false,
                            false,
                            true);
                            true);
+26 −0
Original line number Original line Diff line number Diff line
@@ -228,6 +228,32 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase {
        verify(mCallback, never()).onStateChanged(any());
        verify(mCallback, never()).onStateChanged(any());
    }
    }


    @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
    @Test
    public void testOnRemoteVolumeChanged_newStream_noNullPointer() {
    public void testOnRemoteVolumeChanged_newStream_noNullPointer() {
        MediaSession.Token token = new MediaSession.Token(Process.myUid(), null);
        MediaSession.Token token = new MediaSession.Token(Process.myUid(), null);