From f71149911b933b4ad78f2e9b5422d033455c3e9b Mon Sep 17 00:00:00 2001 From: Weng Su Date: Sun, 18 Oct 2020 16:21:20 +0800 Subject: [PATCH] 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 --- .../details2/WifiNetworkDetailsFragment2.java | 5 +++ .../WifiPrivacyPreferenceController2.java | 10 ++--- .../WifiNetworkDetailsFragment2Test.java | 42 +++++++++++++++++++ .../WifiPrivacyPreferenceController2Test.java | 34 +++++++++++++++ 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java index 76a8c5f9749..db8bd67a53f 100644 --- a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java +++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java @@ -255,6 +255,11 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements * 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 a0d4b16d57a..60c1d995769 100644 --- a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java +++ b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java @@ -69,12 +69,12 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i 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 4b1a8ca617e..7f036235e75 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 @@ public class WifiNetworkDetailsFragment2Test { 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 0414b1c9e8e..adf3a07816b 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 @@ public class WifiPrivacyPreferenceController2Test { 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(); + } }