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

Commit 7f851709 authored by Haijie Hong's avatar Haijie Hong
Browse files

Fix audio sharing volume slider removal issue

Test: local tested
Flag: com.android.settingslib.widget.theme.flags.is_expressive_design_enabled
Bug: 409185858
Change-Id: Ie138adaad1e86ed64052958382c26c4b1451eda3
parent cce6ef49
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() {