Modify the privacy controller to be selectable in the next updateState()
Listen WifiEntry#onUpdated() to update preference states will be modify
in next CLs.
Bug: 170148009
Test: make RunSettingsRoboTests ROBOTEST_FILTER=WifiPrivacyPreferenceController2Test
Change-Id: I5acf096970431a0b093dd7e0968f30c1959e3b7f
diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
index 76a8c5f..db8bd67 100644
--- a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
+++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
@@ -255,6 +255,11 @@
* API call for refreshing the preferences in this fragment.
*/
public void refreshPreferences() {
+ updatePreferenceStates();
+ displayPreferenceControllers();
+ }
+
+ protected void displayPreferenceControllers() {
final PreferenceScreen screen = getPreferenceScreen();
for (AbstractPreferenceController controller : mControllers) {
// WifiDetailPreferenceController2 gets the callback WifiEntryCallback#onUpdated,
diff --git a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
index a0d4b16..60c1d99 100644
--- a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
@@ -69,12 +69,12 @@
public void updateState(Preference preference) {
final DropDownPreference dropDownPreference = (DropDownPreference) preference;
final int randomizationLevel = getRandomizationValue();
+ final boolean isSelectable = mWifiEntry.canSetPrivacy();
+ preference.setSelectable(isSelectable);
dropDownPreference.setValue(Integer.toString(randomizationLevel));
- updateSummary(dropDownPreference, randomizationLevel);
-
- // Makes preference not selectable, when this is a ephemeral network.
- if (!mWifiEntry.canSetPrivacy()) {
- preference.setSelectable(false);
+ if (isSelectable) {
+ updateSummary(dropDownPreference, randomizationLevel);
+ } else {
dropDownPreference.setSummary(R.string.wifi_privacy_settings_ephemeral_summary);
}
}
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java
index 4b1a8ca..7f03623 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2Test.java
@@ -73,4 +73,46 @@
verify(menuItem).setIcon(com.android.internal.R.drawable.ic_mode_edit);
}
+
+ @Test
+ public void refreshPreferences_shouldUpdatePreferenceStates() {
+ final FakeWifiNetworkDetailsFragment2 fakeFragment = new FakeWifiNetworkDetailsFragment2();
+
+ fakeFragment.refreshPreferences();
+
+ assertThat(fakeFragment.isUpdatePreferenceStatesCalled()).isTrue();
+ }
+
+ @Test
+ public void refreshPreferences_shouldDisplayPreferenceControllers() {
+ final FakeWifiNetworkDetailsFragment2 fakeFragment = new FakeWifiNetworkDetailsFragment2();
+
+ fakeFragment.refreshPreferences();
+
+ assertThat(fakeFragment.isDisplayPreferenceControllersCalled()).isTrue();
+ }
+
+ // Fake WifiNetworkDetailsFragment2 to verify the protected functions
+ public class FakeWifiNetworkDetailsFragment2 extends WifiNetworkDetailsFragment2 {
+
+ private boolean mUpdatePreferenceStatesCalled;
+ private boolean mDisplayPreferenceControllersCalled;
+
+ @Override
+ protected void updatePreferenceStates() {
+ mUpdatePreferenceStatesCalled = true;
+ }
+
+ @Override
+ protected void displayPreferenceControllers() {
+ mDisplayPreferenceControllersCalled = true;
+ }
+
+ public boolean isUpdatePreferenceStatesCalled() {
+ return mUpdatePreferenceStatesCalled;
+ }
+ public boolean isDisplayPreferenceControllersCalled() {
+ return mDisplayPreferenceControllersCalled;
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
index 0414b1c..adf3a07 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
@@ -105,4 +105,38 @@
assertThat(mDropDownPreference.isSelectable()).isFalse();
}
+
+ @Test
+ public void testUpdateState_canSetPrivacyInNextUpdate_shouldBeSelectable() {
+ // Return false in WifiEntry#canSetPrivacy to make preference un-selectable first.
+ when(mMockWifiEntry.canSetPrivacy()).thenReturn(false);
+
+ mPreferenceController.updateState(mDropDownPreference);
+
+ assertThat(mDropDownPreference.isSelectable()).isFalse();
+
+ // Return true in WifiEntry#canSetPrivacy to verify preference back to selectable.
+ when(mMockWifiEntry.canSetPrivacy()).thenReturn(true);
+
+ mPreferenceController.updateState(mDropDownPreference);
+
+ assertThat(mDropDownPreference.isSelectable()).isTrue();
+ }
+
+ @Test
+ public void testUpdateState_canNotSetPrivacyInNextUpdate_shouldNotSelectable() {
+ // Return true in WifiEntry#canSetPrivacy to make preference selectable first.
+ when(mMockWifiEntry.canSetPrivacy()).thenReturn(true);
+
+ mPreferenceController.updateState(mDropDownPreference);
+
+ assertThat(mDropDownPreference.isSelectable()).isTrue();
+
+ // Return false in WifiEntry#canSetPrivacy to verify preference back to un-selectable.
+ when(mMockWifiEntry.canSetPrivacy()).thenReturn(false);
+
+ mPreferenceController.updateState(mDropDownPreference);
+
+ assertThat(mDropDownPreference.isSelectable()).isFalse();
+ }
}