Retrieve p2p dev address from config store when bootup completed

Bug: 260966589
Test: atest WifiP2pServiceImplTest
Test: manually verified it from log when disabling p2p mac randomization
Change-Id: I9f883ed1e317be68f414744c518d050a2d6aed54
diff --git a/service/java/com/android/server/wifi/WifiSettingsConfigStore.java b/service/java/com/android/server/wifi/WifiSettingsConfigStore.java
index 75e5557..1b7e5b3 100644
--- a/service/java/com/android/server/wifi/WifiSettingsConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiSettingsConfigStore.java
@@ -84,6 +84,12 @@
             new Key<>("wifi_p2p_device_name", null);
 
     /**
+     * The Wi-Fi peer-to-peer device mac address
+     */
+    public static final Key<String> WIFI_P2P_DEVICE_ADDRESS =
+            new Key<>("wifi_p2p_device_address", null);
+
+    /**
      * Whether Wifi scoring is enabled or not.
      */
     public static final Key<Boolean> WIFI_SCORING_ENABLED =
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
index 7d8f754..f7be88c 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
@@ -21,6 +21,7 @@
 
 import static com.android.net.module.util.Inet4AddressUtils.inet4AddressToIntHTL;
 import static com.android.net.module.util.Inet4AddressUtils.netmaskToPrefixLength;
+import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_ADDRESS;
 import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_NAME;
 import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_PENDING_FACTORY_RESET;
 import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_VERBOSE_LOGGING_ENABLED;
@@ -690,6 +691,14 @@
         if (mTetheringManager == null) {
             Log.wtf(TAG, "Tethering manager is null when WifiP2pServiceImp handles boot completed");
         }
+        String deviceAddress = mSettingsConfigStore.get(WIFI_P2P_DEVICE_ADDRESS);
+        if (!mWifiGlobals.isP2pMacRandomizationSupported() && !TextUtils.isEmpty(deviceAddress)) {
+            mThisDevice.deviceAddress = deviceAddress;
+        }
+        String deviceName = mSettingsConfigStore.get(WIFI_P2P_DEVICE_NAME);
+        if (!TextUtils.isEmpty(deviceName)) {
+            mThisDevice.deviceName = deviceName;
+        }
     }
 
     private void updateVerboseLoggingEnabled() {
@@ -5916,6 +5925,9 @@
             mWifiNative.setConfigMethods("virtual_push_button physical_display keypad");
 
             mThisDevice.deviceAddress = mWifiNative.p2pGetDeviceAddress();
+            if (!mWifiGlobals.isP2pMacRandomizationSupported()) {
+                mSettingsConfigStore.put(WIFI_P2P_DEVICE_ADDRESS, mThisDevice.deviceAddress);
+            }
             updateThisDevice(WifiP2pDevice.AVAILABLE);
             mWifiNative.p2pFlush();
             mWifiNative.p2pServiceFlush();
diff --git a/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
index e7ce468..9a7a3a3 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
@@ -23,6 +23,7 @@
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
 import static com.android.net.module.util.Inet4AddressUtils.inet4AddressToIntHTL;
+import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_ADDRESS;
 import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_NAME;
 import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_PENDING_FACTORY_RESET;
 import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_VERBOSE_LOGGING_ENABLED;
@@ -1301,6 +1302,8 @@
         when(mContext.getOpPackageName()).thenReturn("android");
         when(mContext.getAttributionTag()).thenReturn("feature");
         when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo);
+        when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(false);
+        when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_DEVICE_ADDRESS))).thenReturn(thisDeviceMac);
         when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_DEVICE_NAME))).thenReturn(thisDeviceName);
         when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_PENDING_FACTORY_RESET))).thenReturn(false);
         when(mHandlerThread.getLooper()).thenReturn(mLooper.getLooper());
@@ -3632,8 +3635,8 @@
         verify(mClientHandler).sendMessage(mMessageCaptor.capture());
         assertEquals(WifiP2pManager.RESPONSE_DEVICE_INFO, mMessageCaptor.getValue().what);
         WifiP2pDevice wifiP2pDevice = (WifiP2pDevice) mMessageCaptor.getValue().obj;
-        assertEquals("", wifiP2pDevice.deviceAddress);
-        assertEquals("", wifiP2pDevice.deviceName);
+        assertEquals(ANONYMIZED_DEVICE_ADDRESS, wifiP2pDevice.deviceAddress);
+        assertEquals(thisDeviceName, wifiP2pDevice.deviceName);
     }
 
     /**
@@ -4469,6 +4472,7 @@
      */
     @Test
     public void testSetDeviceNameFailureWithNameExceedMaximumLength() throws Exception {
+        when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(true);
         // Move to enabled state
         forceP2pEnabled(mClient1);
         mTestThisDevice.status = mTestThisDevice.AVAILABLE;
@@ -4492,8 +4496,8 @@
      * longer than the maximum length.
      */
     @Test
-    public void testSetDeviceNameFailureWithMultilingualNameExceedMaximumLength()
-            throws Exception {
+    public void testSetDeviceNameFailureWithMultilingualNameExceedMaximumLength() throws Exception {
+        when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(true);
         // Move to enabled state
         forceP2pEnabled(mClient1);
         mTestThisDevice.status = mTestThisDevice.AVAILABLE;
@@ -4518,6 +4522,7 @@
      */
     @Test
     public void testSetDeviceNameFailureWithEmptyName() throws Exception {
+        when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(true);
         // Move to enabled state
         forceP2pEnabled(mClient1);
         mTestThisDevice.status = mTestThisDevice.AVAILABLE;
@@ -4632,6 +4637,21 @@
         assertEquals(WifiP2pManager.ERROR, message.arg1);
     }
 
+    @Test
+    public void testRestoreDeviceNameAndMacWhenMacRandomizationNotSupported() throws Exception {
+        simulateWifiStateChange(true);
+        simulateInitChannel(mClient1);
+        sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO);
+
+        verify(mWifiNative, never()).setupInterface(any(), any(), any());
+        verify(mClientHandler).sendMessage(mMessageCaptor.capture());
+        assertEquals(WifiP2pManager.RESPONSE_DEVICE_INFO, mMessageCaptor.getValue().what);
+        WifiP2pDevice wifiP2pDevice = (WifiP2pDevice) mMessageCaptor.getValue().obj;
+        //maybeEraseOwnDeviceAddress
+        assertEquals(ANONYMIZED_DEVICE_ADDRESS, wifiP2pDevice.deviceAddress);
+        assertEquals(thisDeviceName, wifiP2pDevice.deviceName);
+    }
+
     /**
      * Verify the caller sends WifiP2pManager.SET_WFD_INFO with wfd enabled.
      */
@@ -6948,6 +6968,8 @@
         } else {
             // Device status is UNAVAILABLE
             mTestThisDevice = new WifiP2pDevice();
+            mTestThisDevice.deviceName = thisDeviceName;
+            mTestThisDevice.deviceAddress = thisDeviceMac;
             checkSendThisDeviceChangedBroadcast();
             sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO);
             verify(mClientHandler, times(2)).sendMessage(mMessageCaptor.capture());