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
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index e77db82..d37c29b 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1051,6 +1051,9 @@
     <!-- About phone, status item value if the actual value is not available. -->
     <string name="status_unavailable">Unavailable</string>
 
+    <!-- About phone, status value for MAC address when MAC randomization feature is enabled and the device is disconnected. -->
+    <string name="wifi_status_mac_randomized">MAC is randomized</string>
+
     <!-- Summary to show how many devices are connected in wifi hotspot [CHAR LIMIT=NONE] -->
     <plurals name="wifi_tether_connected_summary">
         <item quantity="one">%1$d device connected</item>
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java
index d57b64f..2a86993 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.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 @@
     @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 d546f11..b7bc661 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 @@
 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.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 @@
     @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 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 @@
                 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