From 5cbd97f4ea83ce6e978404b226abf73561b5bb68 Mon Sep 17 00:00:00 2001 From: cosmohsieh Date: Tue, 29 Jan 2019 14:50:43 +0800 Subject: [PATCH] [Mac Randomization] Fix MAC randomization option does not work when ephemeral newtork WifiConfiguration is only available when saved network. So ephemeral newtork could not have wifi config to config wifi setting. In this situation, making option be not selectable. Bug: 122919564 Test: atest WifiPrivacyPreferenceControllerTest Change-Id: I8a2a1c36ec6d41a6f912da29a8b17bc2e43d9a27 --- res/values/strings.xml | 2 ++ .../wifi/details/WifiNetworkDetailsFragment.java | 1 + .../details/WifiPrivacyPreferenceController.java | 12 ++++++++++++ .../WifiPrivacyPreferenceControllerTest.java | 16 ++++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 92819794fd1..110fe472ea6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2102,6 +2102,8 @@ IP settings Privacy + + Randomized MAC Add a device diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java index ec43b0ffb24..225ddbcf77c 100644 --- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java +++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java @@ -141,6 +141,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment { WifiPrivacyPreferenceController preferenceController = new WifiPrivacyPreferenceController( context); preferenceController.setWifiConfiguration(mAccessPoint.getConfig()); + preferenceController.setIsEphemeral(mAccessPoint.isEphemeral()); controllers.add(preferenceController); return controllers; diff --git a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java index a20adc9b2ee..b79f2d49749 100644 --- a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java @@ -25,6 +25,7 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.DropDownPreference; import androidx.preference.Preference; +import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.FeatureFlags; import com.android.settingslib.core.AbstractPreferenceController; @@ -39,6 +40,7 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im private static final String KEY_WIFI_PRIVACY = "privacy"; private WifiConfiguration mWifiConfiguration; private WifiManager mWifiManager; + private boolean mIsEphemeral = false; public WifiPrivacyPreferenceController(Context context) { super(context, KEY_WIFI_PRIVACY); @@ -50,6 +52,10 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im mWifiConfiguration = wifiConfiguration; } + public void setIsEphemeral(boolean isEphemeral) { + mIsEphemeral = isEphemeral; + } + @Override public int getAvailabilityStatus() { return FeatureFlagUtils.isEnabled(mContext, FeatureFlags.WIFI_MAC_RANDOMIZATION) @@ -62,6 +68,12 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im final int randomizationLevel = getRandomizationValue(); dropDownPreference.setValue(Integer.toString(randomizationLevel)); updateSummary(dropDownPreference, randomizationLevel); + + // Makes preference not selectable, when this is a ephemeral network. + if (mIsEphemeral) { + preference.setSelectable(false); + dropDownPreference.setSummary(R.string.wifi_privacy_settings_ephemeral_summary); + } } @Override diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java index 1e2e718a1dd..a1af8bf272c 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java @@ -93,4 +93,20 @@ public class WifiPrivacyPreferenceControllerTest { mPreferenceController.getRandomizationValue(); mPreferenceController.onPreferenceChange(mDropDownPreference, "1"); } + + @Test + public void testUpdateState_isNotEphemeralNetwork_shouldBeSelectable() { + mPreferenceController.setIsEphemeral(false); + mPreferenceController.updateState(mDropDownPreference); + + assertThat(mDropDownPreference.isSelectable()).isTrue(); + } + + @Test + public void testUpdateState_isEphemeralNetwork_shouldNotSelectable() { + mPreferenceController.setIsEphemeral(true); + mPreferenceController.updateState(mDropDownPreference); + + assertThat(mDropDownPreference.isSelectable()).isFalse(); + } }