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

Commit 1e49ff8b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Wi-Fi] Fix TalkBack focus lost in SavedAccessPointsWifiSettings2" into rvc-dev

parents 05cb60b2 067757f8
Loading
Loading
Loading
Loading
+27 −5
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.wifi.savedaccesspoints2;

import android.content.Context;
import android.text.TextUtils;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -83,9 +84,29 @@ public class SavedAccessPointsPreferenceController2 extends BasePreferenceContro
        return false;
    }

    /**
     * mPreferenceGroup is not in a RecyclerView. To keep TalkBack focus, this method should not
     * mPreferenceGroup.removeAll() then mPreferenceGroup.addPreference for mWifiEntries.
     */
    private void updatePreference() {
        mPreferenceGroup.removeAll();
        // Remove the Preference of removed WifiEntry.
        final List<String> removedPreferenceKeys = new ArrayList<>();
        final int preferenceCount = mPreferenceGroup.getPreferenceCount();
        for (int i = 0; i < preferenceCount; i++) {
            final String key = mPreferenceGroup.getPreference(i).getKey();
            if (mWifiEntries.stream().filter(wifiEntry ->
                    TextUtils.equals(key, wifiEntry.getKey())).count() == 0) {
                removedPreferenceKeys.add(key);
            }
        }
        for (String removedPreferenceKey : removedPreferenceKeys) {
            mPreferenceGroup.removePreference(
                    mPreferenceGroup.findPreference(removedPreferenceKey));
        }

        // Add the Preference of new added WifiEntry.
        for (WifiEntry wifiEntry : mWifiEntries) {
            if (mPreferenceGroup.findPreference(wifiEntry.getKey()) == null) {
                final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry);
                preference.setKey(wifiEntry.getKey());
                preference.setOnPreferenceClickListener(this);
@@ -94,3 +115,4 @@ public class SavedAccessPointsPreferenceController2 extends BasePreferenceContro
            }
        }
    }
}
+16 −0
Original line number Diff line number Diff line
@@ -103,4 +103,20 @@ public class SavedAccessPointsPreferenceController2Test {
        assertThat(prefs.size()).isEqualTo(1);
        assertThat(prefs.get(0).getTitle()).isEqualTo(title);
    }

    @Test
    public void displayPreference_noAccessPoint_shouldRemoveIt() {
        final String title = "ssid_title";
        final String key = "key";
        final WifiEntry mockWifiEntry = mock(WifiEntry.class);
        when(mockWifiEntry.getTitle()).thenReturn(title);
        when(mockWifiEntry.getKey()).thenReturn(key);
        final WifiEntryPreference preference = new WifiEntryPreference(mContext, mockWifiEntry);
        preference.setKey(key);
        mPreferenceCategory.addPreference(preference);

        mController.displayPreference(mPreferenceScreen, new ArrayList<>());

        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(0);
    }
}