From b521bd6225a4a5628ce51260b2b632ea92ecb578 Mon Sep 17 00:00:00 2001 From: cosmohsieh Date: Thu, 24 Jan 2019 13:39:51 +0800 Subject: [PATCH] [Mac Randomization] Change order of Privacy setting in "Add network" page For better UX, making the default option 'Use randomized MAC (default)' as the first option item in "add network" page. Bug: 123160090 Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi Change-Id: Ifdba5a323df21c8d3442f394acdebd1c3f259c69 --- .../settings/wifi/WifiConfigController.java | 15 +++-- .../WifiPrivacyPreferenceController.java | 32 +++++++--- .../wifi/WifiConfigControllerTest.java | 59 +++++++++++++++++++ 3 files changed, 93 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index b0d09e4c12a..a679d372919 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -63,6 +63,7 @@ import androidx.annotation.VisibleForTesting; import com.android.settings.ProxySelector; import com.android.settings.R; +import com.android.settings.wifi.details.WifiPrivacyPreferenceController; import com.android.settingslib.Utils; import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.wifi.AccessPoint; @@ -251,8 +252,6 @@ public class WifiConfigController implements TextWatcher, com.android.settings.core.FeatureFlags.WIFI_MAC_RANDOMIZATION)) { View privacySettingsLayout = mView.findViewById(R.id.privacy_settings_fields); privacySettingsLayout.setVisibility(View.VISIBLE); - // Set default value - mPrivacySettingsSpinner.setSelection(WifiConfiguration.RANDOMIZATION_PERSISTENT); } mHiddenSettingsSpinner.setOnItemSelectedListener(this); mHiddenWarningView = mView.findViewById(R.id.hidden_settings_warning); @@ -281,7 +280,12 @@ public class WifiConfigController implements TextWatcher, mHiddenSettingsSpinner.setSelection(config.hiddenSSID ? HIDDEN_NETWORK : NOT_HIDDEN_NETWORK); - mPrivacySettingsSpinner.setSelection(config.macRandomizationSetting); + + final int prefMacValue = + WifiPrivacyPreferenceController.translateMacRandomizedValueToPrefValue( + config.macRandomizationSetting); + mPrivacySettingsSpinner.setSelection(prefMacValue); + if (config.getIpAssignment() == IpAssignment.STATIC) { mIpSettingsSpinner.setSelection(STATIC_IP); showAdvancedFields = true; @@ -766,7 +770,10 @@ public class WifiConfigController implements TextWatcher, } if (mPrivacySettingsSpinner != null) { - config.macRandomizationSetting = mPrivacySettingsSpinner.getSelectedItemPosition(); + final int macValue = + WifiPrivacyPreferenceController.translatePrefValueToMacRandomizedValue( + mPrivacySettingsSpinner.getSelectedItemPosition()); + config.macRandomizationSetting = macValue; } return config; diff --git a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java index 3bcdc5fad9c..a20adc9b2ee 100644 --- a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java @@ -85,15 +85,29 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im return WifiConfiguration.RANDOMIZATION_PERSISTENT; } - private final int PREF_RANDOMIZATION_PERSISTENT = 0; - private final int PREF_RANDOMIZATION_NONE = 1; - @VisibleForTesting - protected int translateMacRandomizedValueToPrefValue(int macRandomized) { - if (macRandomized == WifiConfiguration.RANDOMIZATION_PERSISTENT) { - return PREF_RANDOMIZATION_PERSISTENT; - } else { - return PREF_RANDOMIZATION_NONE; - } + private static final int PREF_RANDOMIZATION_PERSISTENT = 0; + private static final int PREF_RANDOMIZATION_NONE = 1; + + /** + * Returns preference index value. + * + * @param macRandomized is mac randomized value + * @return index value of preference + */ + public static int translateMacRandomizedValueToPrefValue(int macRandomized) { + return (macRandomized == WifiConfiguration.RANDOMIZATION_PERSISTENT) + ? PREF_RANDOMIZATION_PERSISTENT : PREF_RANDOMIZATION_NONE; + } + + /** + * Returns mac randomized value. + * + * @param prefMacRandomized is preference index value + * @return mac randomized value + */ + public static int translatePrefValueToMacRandomizedValue(int prefMacRandomized) { + return (prefMacRandomized == PREF_RANDOMIZATION_PERSISTENT) + ? WifiConfiguration.RANDOMIZATION_PERSISTENT : WifiConfiguration.RANDOMIZATION_NONE; } private void updateSummary(DropDownPreference preference, int macRandomized) { diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java index 7ebb18e8004..fd25f7d9bb8 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.ServiceSpecificException; import android.security.KeyStore; @@ -39,6 +40,7 @@ import android.widget.TextView; import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowConnectivityManager; +import com.android.settings.wifi.details.WifiPrivacyPreferenceController; import com.android.settingslib.wifi.AccessPoint; import org.junit.Before; @@ -386,4 +388,61 @@ public class WifiConfigControllerTest { @Override KeyStore getKeyStore() { return mKeyStore; } } + + @Test + public void loadMacRandomizedValue_shouldPersistentAsDefault() { + final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); + final int prefPersist = + WifiPrivacyPreferenceController.translateMacRandomizedValueToPrefValue( + WifiConfiguration.RANDOMIZATION_PERSISTENT); + + assertThat(privacySetting.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(privacySetting.getSelectedItemPosition()).isEqualTo(prefPersist); + } + + @Test + public void loadSavedMacRandomizedPersistentValue_shouldCorrectMacValue() { + checkSavedMacRandomizedValue(WifiConfiguration.RANDOMIZATION_PERSISTENT); + } + + @Test + public void loadSavedMacRandomizedNoneValue_shouldCorrectMacValue() { + checkSavedMacRandomizedValue(WifiConfiguration.RANDOMIZATION_NONE); + } + + private void checkSavedMacRandomizedValue(int macRandomizedValue) { + when(mAccessPoint.isSaved()).thenReturn(true); + final WifiConfiguration mockWifiConfig = mock(WifiConfiguration.class); + when(mAccessPoint.getConfig()).thenReturn(mockWifiConfig); + mockWifiConfig.macRandomizationSetting = macRandomizedValue; + mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, + WifiConfigUiBase.MODE_CONNECT); + + final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); + final int expectedPrefValue = + WifiPrivacyPreferenceController.translateMacRandomizedValueToPrefValue( + macRandomizedValue); + + assertThat(privacySetting.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(privacySetting.getSelectedItemPosition()).isEqualTo(expectedPrefValue); + } + + @Test + public void saveMacRandomizedValue_noChanged_shouldPersistentAsDefault() { + WifiConfiguration config = mController.getConfig(); + assertThat(config.macRandomizationSetting).isEqualTo( + WifiConfiguration.RANDOMIZATION_PERSISTENT); + } + + @Test + public void saveMacRandomizedValue_ChangedToNone_shouldGetNone() { + final Spinner privacySetting = mView.findViewById(R.id.privacy_settings); + final int prefMacNone = + WifiPrivacyPreferenceController.translateMacRandomizedValueToPrefValue( + WifiConfiguration.RANDOMIZATION_NONE); + privacySetting.setSelection(prefMacNone); + + WifiConfiguration config = mController.getConfig(); + assertThat(config.macRandomizationSetting).isEqualTo(WifiConfiguration.RANDOMIZATION_NONE); + } }