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

Commit 854559e5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

Merge "[Wi-Fi] Fix TalkBack focus lost in SavedAccessPointsWifiSettings2" into rvc-dev am: 1e49ff8b am: 800cc2c2

Change-Id: Icc5688817560e1db448357bfd7a62cd184236ef8
parents c0c78129 800cc2c2
Loading
Loading
Loading
Loading
+27 −5
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.wifi.savedaccesspoints2;
package com.android.settings.wifi.savedaccesspoints2;


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


import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.Preference;
@@ -83,9 +84,29 @@ public class SavedAccessPointsPreferenceController2 extends BasePreferenceContro
        return false;
        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() {
    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) {
        for (WifiEntry wifiEntry : mWifiEntries) {
            if (mPreferenceGroup.findPreference(wifiEntry.getKey()) == null) {
                final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry);
                final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry);
                preference.setKey(wifiEntry.getKey());
                preference.setKey(wifiEntry.getKey());
                preference.setOnPreferenceClickListener(this);
                preference.setOnPreferenceClickListener(this);
@@ -94,3 +115,4 @@ public class SavedAccessPointsPreferenceController2 extends BasePreferenceContro
            }
            }
        }
        }
    }
    }
}
+16 −0
Original line number Original line Diff line number Diff line
@@ -103,4 +103,20 @@ public class SavedAccessPointsPreferenceController2Test {
        assertThat(prefs.size()).isEqualTo(1);
        assertThat(prefs.size()).isEqualTo(1);
        assertThat(prefs.get(0).getTitle()).isEqualTo(title);
        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);
    }
}
}