From 0c3904eb5a54da2f3c375d4b1e5d9269619846ea Mon Sep 17 00:00:00 2001 From: Jong Wook Kim Date: Wed, 14 Mar 2018 11:16:06 -0700 Subject: [PATCH] Display that MAC is randomized in About Phones 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. In such cases, display "MAC address is randomized" instead of an invalid MAC address in About Phones page. Bug: 73663275 Test: make RunSettingsLibRoboTests -j40 Change-Id: I0a4df2b1b0823632b26f90e097c26f47dd5a0a67 --- packages/SettingsLib/res/values/strings.xml | 3 +++ ...ractWifiMacAddressPreferenceController.java | 14 ++++++++++---- ...WifiMacAddressPreferenceControllerTest.java | 18 ++++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index e77db82a520c6..d37c29b4a104c 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -1051,6 +1051,9 @@ Unavailable + + MAC is randomized + %1$d device connected diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java index d57b64f0c0cb4..2a86993124f65 100644 --- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java +++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java @@ -21,6 +21,7 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.provider.Settings; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; @@ -78,11 +79,16 @@ public abstract class AbstractWifiMacAddressPreferenceController @Override protected void updateConnectivity() { WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); - String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); - if (!TextUtils.isEmpty(macAddress)) { - mWifiMacAddress.setSummary(macAddress); - } else { + final int macRandomizationMode = Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0); + final String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); + + if (TextUtils.isEmpty(macAddress)) { mWifiMacAddress.setSummary(R.string.status_unavailable); + } else if (macRandomizationMode == 1 && WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) { + mWifiMacAddress.setSummary(R.string.wifi_status_mac_randomized); + } else { + mWifiMacAddress.setSummary(macAddress); } } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java index d546f11d9998d..b7bc661116e94 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java @@ -19,6 +19,7 @@ package com.android.settingslib.deviceinfo; import static com.google.common.truth.Truth.assertWithMessage; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.annotation.SuppressLint; @@ -26,6 +27,7 @@ import android.content.Context; import android.net.ConnectivityManager; 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; @@ -54,6 +56,8 @@ public class WifiMacAddressPreferenceControllerTest { @Mock private Preference mPreference; + private static final String TEST_MAC_ADDRESS = "00:11:22:33:44:55"; + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -80,7 +84,6 @@ public class WifiMacAddressPreferenceControllerTest { public void testWifiMacAddress() { final WifiManager wifiManager = mock(WifiManager.class); final WifiInfo wifiInfo = mock(WifiInfo.class); - doReturn("00:11:22:33:44:55").when(wifiInfo).getMacAddress(); doReturn(null).when(wifiManager).getConnectionInfo(); doReturn(wifiManager).when(mContext).getSystemService(WifiManager.class); @@ -89,14 +92,21 @@ public class WifiMacAddressPreferenceControllerTest { new ConcreteWifiMacAddressPreferenceController(mContext, mLifecycle); wifiMacAddressPreferenceController.displayPreference(mScreen); - verify(mPreference).setSummary(R.string.status_unavailable); doReturn(wifiInfo).when(wifiManager).getConnectionInfo(); - + doReturn(TEST_MAC_ADDRESS).when(wifiInfo).getMacAddress(); wifiMacAddressPreferenceController.displayPreference(mScreen); + verify(mPreference).setSummary(TEST_MAC_ADDRESS); - verify(mPreference).setSummary("00:11:22:33:44:55"); + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1); + wifiMacAddressPreferenceController.displayPreference(mScreen); + verify(mPreference, times(2)).setSummary(TEST_MAC_ADDRESS); + + doReturn(WifiInfo.DEFAULT_MAC_ADDRESS).when(wifiInfo).getMacAddress(); + wifiMacAddressPreferenceController.displayPreference(mScreen); + verify(mPreference).setSummary(R.string.wifi_status_mac_randomized); } private static class ConcreteWifiMacAddressPreferenceController