AutoConnect hfp: Improve test behavior

Test is now creating a real database, simulate a connection and then
verify that the auto connect behave as expected
Negative test should be written too

Bug: 290553699
Test: atest PhonePolicyTest#testAutoConnectHfpOnly
Change-Id: I4af150603bdbd0285a7aa9fce57cc190d082008d
diff --git a/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java b/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java
index ca5587d..fcdd903 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/btservice/PhonePolicyTest.java
@@ -29,13 +29,16 @@
 import android.os.HandlerThread;
 import android.os.ParcelUuid;
 
+import androidx.room.Room;
 import androidx.test.filters.MediumTest;
+import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.bluetooth.TestUtils;
 import com.android.bluetooth.Utils;
 import com.android.bluetooth.a2dp.A2dpService;
 import com.android.bluetooth.btservice.storage.DatabaseManager;
+import com.android.bluetooth.btservice.storage.MetadataDatabase;
 import com.android.bluetooth.hfp.HeadsetService;
 import com.android.bluetooth.le_audio.LeAudioService;
 
@@ -620,27 +623,41 @@
     public void testAutoConnectHfpOnly() {
         sIsHfpAutoConnectEnabled = true;
 
-        // Return desired values from the mocked object(s)
-        when(mAdapterService.getState()).thenReturn(BluetoothAdapter.STATE_ON);
-        when(mAdapterService.isQuietModeEnabled()).thenReturn(false);
+        try {
+            // Return desired values from the mocked object(s)
+            doReturn(BluetoothAdapter.STATE_ON).when(mAdapterService).getState();
+            doReturn(false).when(mAdapterService).isQuietModeEnabled();
 
-        // Return a device that is HFP only
-        BluetoothDevice bondedDevice = getTestDevice(mAdapter, 0);
-        when(mDatabaseManager.getMostRecentlyConnectedA2dpDevice()).thenReturn(null);
-        when(mDatabaseManager.getMostRecentlyConnectedDevices()).thenReturn(List.of(bondedDevice));
-        when(mDatabaseManager.getMostRecentlyActiveHfpDevice()).thenReturn(bondedDevice);
-        when(mAdapterService.getBondState(bondedDevice)).thenReturn(BluetoothDevice.BOND_BONDED);
+            MetadataDatabase mDatabase =
+                    Room.inMemoryDatabaseBuilder(
+                                    InstrumentationRegistry.getInstrumentation().getTargetContext(),
+                                    MetadataDatabase.class)
+                            .build();
+            DatabaseManager db = new DatabaseManager(mAdapterService);
+            doReturn(db).when(mAdapterService).getDatabase();
+            PhonePolicy phonePolicy = new PhonePolicy(mAdapterService, mServiceFactory);
 
-        // Return CONNECTION_POLICY_ALLOWED over HFP
-        when(mHeadsetService.getConnectionPolicy(bondedDevice))
-                .thenReturn(BluetoothProfile.CONNECTION_POLICY_ALLOWED);
+            db.start(mDatabase);
+            TestUtils.waitForLooperToFinishScheduledTask(db.getHandlerLooper());
 
-        mPhonePolicy.autoConnect();
+            // Return a device that is HFP only
+            BluetoothDevice bondedDevice = getTestDevice(mAdapter, 0);
 
-        // Check that we got a request to connect over HFP
-        verify(mHeadsetService).connect(eq(bondedDevice));
+            db.setConnection(bondedDevice, BluetoothProfile.HEADSET);
+            doReturn(BluetoothProfile.CONNECTION_POLICY_ALLOWED)
+                    .when(mHeadsetService)
+                    .getConnectionPolicy(eq(bondedDevice));
 
-        sIsHfpAutoConnectEnabled = false;
+            // wait for all MSG_UPDATE_DATABASE
+            TestUtils.waitForLooperToFinishScheduledTask(db.getHandlerLooper());
+
+            phonePolicy.autoConnect();
+
+            // Check that we got a request to connect over HFP for each device
+            verify(mHeadsetService).connect(eq(bondedDevice));
+        } finally {
+            sIsHfpAutoConnectEnabled = false;
+        }
     }
 
     /**