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

Commit 563a81ab authored by Haijie Hong's avatar Haijie Hong Committed by Android (Google) Code Review
Browse files

Merge "Fix audio sharing volume slider removal issue" into main

parents 8463937b 7f851709
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -306,20 +306,20 @@ public class AudioSharingDeviceVolumeGroupController extends AudioSharingBasePre

    @Override
    public void onDeviceRemoved(Preference preference) {
        if (!(preference instanceof AudioSharingDeviceVolumePreference)) {
        if (!(preference instanceof AudioSharingDeviceVolumePreference
                || preference instanceof AudioSharingDeviceVolumeSliderPreference)) {
            Log.d(TAG, "Skip onDeviceRemoved, invalid preference type");
            return;
        }
        var volumePref = (AudioSharingDeviceVolumePreference) preference;
        if (mVolumePreferences.contains(volumePref)) {
            mVolumePreferences.remove(volumePref);
        if (mVolumePreferences.contains(preference)) {
            mVolumePreferences.remove(preference);
        }
        String address = volumePref.getCachedDevice().getDevice() == null ? "null"
                : volumePref.getCachedDevice().getDevice().getAnonymizedAddress();
        String address = getCachedDevice(preference).getDevice() == null ? "null"
                : getCachedDevice(preference).getDevice().getAnonymizedAddress();
        Log.d(TAG, "onDeviceRemoved: " + address);
        AudioSharingUtils.postOnMainThread(mContext, () -> {
            if (mPreferenceGroup != null) {
                mPreferenceGroup.removePreference(volumePref);
                mPreferenceGroup.removePreference(preference);
                if (mPreferenceGroup.getPreferenceCount() == 0) {
                    mPreferenceGroup.setVisible(false);
                }
+25 −0
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ public class AudioSharingDeviceVolumeGroupControllerTest {
    @Mock private AudioSharingDeviceVolumePreference mPreference1;
    @Mock private AudioSharingDeviceVolumePreference mPreference2;
    @Mock private AudioSharingDeviceVolumeSliderPreference mSliderPreference1;
    @Mock private AudioSharingDeviceVolumeSliderPreference mSliderPreference2;
    @Mock private AudioManager mAudioManager;
    @Mock private PreferenceManager mPreferenceManager;
    @Mock private ContentResolver mContentResolver;
@@ -188,6 +189,7 @@ public class AudioSharingDeviceVolumeGroupControllerTest {
        doReturn(mDevice2).when(mCachedDevice2).getDevice();
        doReturn(ImmutableSet.of()).when(mCachedDevice2).getMemberDevice();
        when(mPreference2.getCachedDevice()).thenReturn(mCachedDevice2);
        when(mSliderPreference2.getCachedDevice()).thenReturn(mCachedDevice2);
        doNothing().when(mDevicePreferenceCallback).onDeviceAdded(any(Preference.class));
        doNothing().when(mDevicePreferenceCallback).onDeviceRemoved(any(Preference.class));
        when(mScreen.getContext()).thenReturn(mContext);
@@ -484,6 +486,29 @@ public class AudioSharingDeviceVolumeGroupControllerTest {
        assertThat(mPreferenceGroup.isVisible()).isFalse();
    }

    @Test
    @EnableFlags(com.android.settings.flags.Flags.FLAG_ENABLE_BLUETOOTH_SETTINGS_EXPRESSIVE_DESIGN)
    public void onDeviceRemoved_enableExpressiveDesign_notLastDevice_isVisible() {
        mPreferenceGroup.addPreference(mSliderPreference2);
        mPreferenceGroup.addPreference(mSliderPreference1);
        mController.setPreferenceGroup(mPreferenceGroup);
        mController.onDeviceRemoved(mSliderPreference1);
        verify(mPreferenceGroup, never()).setVisible(false);
        assertThat(mPreferenceGroup.isVisible()).isTrue();
    }

    @Test
    @EnableFlags(com.android.settings.flags.Flags.FLAG_ENABLE_BLUETOOTH_SETTINGS_EXPRESSIVE_DESIGN)
    public void onDeviceRemoved_enableExpressiveDesign_lastDevice_updateVisibility() {
        mPreferenceGroup.addPreference(mSliderPreference1);
        mController.setPreferenceGroup(mPreferenceGroup);
        mController.onDeviceRemoved(mSliderPreference1);
        shadowOf(Looper.getMainLooper()).idle();

        verify(mPreferenceGroup).setVisible(false);
        assertThat(mPreferenceGroup.isVisible()).isFalse();
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING)
    public void updateVisibility_emptyPreferenceGroup_doNothing() {