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
This commit is contained in:
Weng Su
2020-10-18 16:21:20 +08:00
parent 031b364e40
commit f71149911b
4 changed files with 86 additions and 5 deletions

View File

@@ -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,

View File

@@ -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));
if (isSelectable) {
updateSummary(dropDownPreference, randomizationLevel);
// Makes preference not selectable, when this is a ephemeral network.
if (!mWifiEntry.canSetPrivacy()) {
preference.setSelectable(false);
} else {
dropDownPreference.setSummary(R.string.wifi_privacy_settings_ephemeral_summary);
}
}

View File

@@ -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;
}
}
}

View File

@@ -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();
}
}