From 091894d09d2792ca49730af829055f16cbe7013e Mon Sep 17 00:00:00 2001 From: Jong Wook Kim Date: Wed, 14 Mar 2018 00:56:20 -0700 Subject: [PATCH] Display "MAC address is randomized" in Wifi Preference Page When Connected MAC Randomization is enabled and the device is disconnected, there isn't a valid MAC address to display since we don't know what the device's next MAC address is going to be. Instead of displaying the MAC address used for previous connection, tell users that "MAC address is randomized." Bug: 73663275 Test: make -j40 RunSettingsRoboTests Change-Id: Id5352926f221e3215734d1c198f2072940f82695 --- .../wifi/WifiInfoPreferenceController.java | 15 +++++++-- .../WifiInfoPreferenceControllerTest.java | 31 ++++++++++++++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/wifi/WifiInfoPreferenceController.java b/src/com/android/settings/wifi/WifiInfoPreferenceController.java index ad6ecbad624..c760688321b 100644 --- a/src/com/android/settings/wifi/WifiInfoPreferenceController.java +++ b/src/com/android/settings/wifi/WifiInfoPreferenceController.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.provider.Settings; import android.support.v4.text.BidiFormatter; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; @@ -96,10 +97,18 @@ public class WifiInfoPreferenceController extends AbstractPreferenceController public void updateWifiInfo() { if (mWifiMacAddressPref != null) { final WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); + final int macRandomizationMode = Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0); final String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); - mWifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) - ? macAddress - : mContext.getString(R.string.status_unavailable)); + + if (TextUtils.isEmpty(macAddress)) { + mWifiMacAddressPref.setSummary(R.string.status_unavailable); + } else if (macRandomizationMode == 1 + && WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) { + mWifiMacAddressPref.setSummary(R.string.wifi_status_mac_randomized); + } else { + mWifiMacAddressPref.setSummary(macAddress); + } } if (mWifiIpAddressPref != null) { final String ipAddress = Utils.getWifiIpAddresses(mContext); diff --git a/tests/robotests/src/com/android/settings/wifi/WifiInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiInfoPreferenceControllerTest.java index 8c15d4617d2..eac6886a7b1 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiInfoPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiInfoPreferenceControllerTest.java @@ -28,10 +28,13 @@ import android.arch.lifecycle.LifecycleOwner; import android.content.BroadcastReceiver; import android.content.Context; import android.content.IntentFilter; +import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.provider.Settings; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -55,11 +58,15 @@ public class WifiInfoPreferenceControllerTest { private Preference mIpPreference; @Mock private Preference mMacPreference; + @Mock + private WifiInfo mWifiInfo; private Lifecycle mLifecycle; private LifecycleOwner mLifecycleOwner; private WifiInfoPreferenceController mController; + private static final String TEST_MAC_ADDRESS = "42:0a:23:43:ac:02"; + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -70,6 +77,7 @@ public class WifiInfoPreferenceControllerTest { when(mScreen.findPreference(anyString())) .thenReturn(mMacPreference) .thenReturn(mIpPreference); + when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo); mController = new WifiInfoPreferenceController(mContext, mLifecycle, mWifiManager); } @@ -95,11 +103,32 @@ public class WifiInfoPreferenceControllerTest { @Test public void onResume_shouldUpdateWifiInfo() { when(mWifiManager.getCurrentNetwork()).thenReturn(null); + when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS); mController.displayPreference(mScreen); mController.onResume(); - verify(mMacPreference).setSummary(any()); + verify(mMacPreference).setSummary(TEST_MAC_ADDRESS); verify(mIpPreference).setSummary(any()); } + + @Test + public void testUpdateMacAddress() { + when(mWifiManager.getCurrentNetwork()).thenReturn(null); + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1); + mController.displayPreference(mScreen); + + when(mWifiInfo.getMacAddress()).thenReturn(null); + mController.updateWifiInfo(); + verify(mMacPreference).setSummary(R.string.status_unavailable); + + when(mWifiInfo.getMacAddress()).thenReturn(WifiInfo.DEFAULT_MAC_ADDRESS); + mController.updateWifiInfo(); + verify(mMacPreference).setSummary(R.string.wifi_status_mac_randomized); + + when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS); + mController.updateWifiInfo(); + verify(mMacPreference).setSummary(TEST_MAC_ADDRESS); + } }