Merge "[Wi-Fi] Fix TalkBack focus lost in SavedAccessPointsWifiSettings2" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1e49ff8ba7
@@ -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,14 +84,35 @@ 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.
|
||||||
for (WifiEntry wifiEntry : mWifiEntries) {
|
final List<String> removedPreferenceKeys = new ArrayList<>();
|
||||||
final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry);
|
final int preferenceCount = mPreferenceGroup.getPreferenceCount();
|
||||||
preference.setKey(wifiEntry.getKey());
|
for (int i = 0; i < preferenceCount; i++) {
|
||||||
preference.setOnPreferenceClickListener(this);
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
mPreferenceGroup.addPreference(preference);
|
// 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);
|
||||||
|
|
||||||
|
mPreferenceGroup.addPreference(preference);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user