Add unit tests for WifiPickerTracker

Bug: 275582348
Test: atest com.android.wifitrackerlib.WifiPickerTrackerTest
Change-Id: Ide014c38ff4825d0a3832489c58c4e6aad5e1741
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index 0df423d..90d82c6 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -92,7 +92,7 @@
 
     private static boolean sVerboseLogging;
 
-    public static final boolean ENABLE_SHARED_CONNECTIVITY_FEATURE = false;
+    public static boolean mEnableSharedConnectivityFeature = false;
 
     public static boolean isVerboseLoggingEnabled() {
         return BaseWifiTracker.sVerboseLogging;
@@ -305,7 +305,7 @@
         mConnectivityManager = connectivityManager;
         mConnectivityDiagnosticsManager =
                 context.getSystemService(ConnectivityDiagnosticsManager.class);
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE && BuildCompat.isAtLeastU()) {
+        if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
             mSharedConnectivityManager =
                     context.getSystemService(SharedConnectivityManager.class);
         }
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java
index d66099e..a30dd5e 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java
@@ -111,7 +111,7 @@
     @WorkerThread
     @Override
     protected void handleServiceConnected() {
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE && mSharedConnectivityManager != null) {
+        if (mEnableSharedConnectivityFeature && mSharedConnectivityManager != null) {
             mHotspotNetworkData = mSharedConnectivityManager.getHotspotNetworks().stream().filter(
                     network -> network.getDeviceId() == mChosenEntry.getHotspotNetworkEntryKey()
                             .getDeviceId()).findFirst().orElse(null);
@@ -126,7 +126,7 @@
     @WorkerThread
     @Override
     protected void handleHotspotNetworksUpdated(List<HotspotNetwork> networks) {
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+        if (mEnableSharedConnectivityFeature) {
             mHotspotNetworkData = networks.stream().filter(network -> network.getDeviceId()
                     == mChosenEntry.getHotspotNetworkEntryKey().getDeviceId()).findFirst().orElse(
                     null);
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
index 6dfcb0f..735b44b 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
@@ -172,6 +172,9 @@
 
     @WorkerThread
     protected synchronized boolean connectionInfoMatches(@NonNull WifiInfo wifiInfo) {
+        if (mKey.isVirtualEntry()) {
+            return false;
+        }
         return Objects.equals(mKey.getBssid(), wifiInfo.getBSSID());
     }
 
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index 0f1edb5..81a458d 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
@@ -265,7 +265,7 @@
         allEntries.addAll(mSuggestedWifiEntryCache);
         allEntries.addAll(mPasspointWifiEntryCache.values());
         allEntries.addAll(mOsuWifiEntryCache.values());
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+        if (mEnableSharedConnectivityFeature) {
             allEntries.addAll(mKnownNetworkEntryCache);
             allEntries.addAll(mHotspotNetworkEntryCache);
         }
@@ -283,7 +283,7 @@
         mSuggestedWifiEntryCache.clear();
         mPasspointWifiEntryCache.clear();
         mOsuWifiEntryCache.clear();
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+        if (mEnableSharedConnectivityFeature) {
             mKnownNetworkEntryCache.clear();
             mHotspotNetworkEntryCache.clear();
         }
@@ -364,7 +364,7 @@
         updateNetworkRequestEntryScans(scanResults);
         updatePasspointWifiEntryScans(scanResults);
         updateOsuWifiEntryScans(scanResults);
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE && BuildCompat.isAtLeastU()) {
+        if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
             updateKnownNetworkEntryScans(scanResults);
             // Updating the hotspot entries here makes the UI more reliable when switching pages or
             // when toggling settings while the internet picker is shown.
@@ -453,7 +453,7 @@
     @WorkerThread
     @Override
     protected void handleKnownNetworksUpdated(List<KnownNetwork> networks) {
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+        if (mEnableSharedConnectivityFeature) {
             mKnownNetworkDataCache.clear();
             mKnownNetworkDataCache.addAll(networks);
             updateKnownNetworkEntryScans(mScanResultUpdater.getScanResults());
@@ -465,7 +465,7 @@
     @WorkerThread
     @Override
     protected void handleHotspotNetworksUpdated(List<HotspotNetwork> networks) {
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+        if (mEnableSharedConnectivityFeature) {
             mHotspotNetworkDataCache.clear();
             mHotspotNetworkDataCache.addAll(networks);
             updateHotspotNetworkEntries();
@@ -498,7 +498,7 @@
     @WorkerThread
     @Override
     protected void handleServiceConnected() {
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+        if (mEnableSharedConnectivityFeature) {
             mKnownNetworkDataCache.clear();
             mKnownNetworkDataCache.addAll(mSharedConnectivityManager.getKnownNetworks());
             mHotspotNetworkDataCache.clear();
@@ -519,7 +519,7 @@
             mActiveWifiEntries.addAll(mStandardWifiEntryCache);
             mActiveWifiEntries.addAll(mSuggestedWifiEntryCache);
             mActiveWifiEntries.addAll(mPasspointWifiEntryCache.values());
-            if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+            if (mEnableSharedConnectivityFeature) {
                 mActiveWifiEntries.addAll(mHotspotNetworkEntryCache);
             }
             if (mNetworkRequestEntry != null) {
@@ -580,7 +580,7 @@
                         continue;
                     }
                 }
-                if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+                if (mEnableSharedConnectivityFeature) {
                     // Filter out any StandardWifiEntry that is matched with a KnownNetworkEntry
                     if (knownNetworkKeys
                             .contains(entry.getStandardWifiEntryKey().getScanResultKey())) {
@@ -604,7 +604,7 @@
                             && !entry.isAlreadyProvisioned()).collect(toList()));
             mWifiEntries.addAll(getContextualWifiEntries().stream().filter(entry ->
                     entry.getConnectedState() == CONNECTED_STATE_DISCONNECTED).collect(toList()));
-            if (ENABLE_SHARED_CONNECTIVITY_FEATURE) {
+            if (mEnableSharedConnectivityFeature) {
                 mWifiEntries.addAll(mKnownNetworkEntryCache.stream().filter(entry ->
                         entry.getConnectedState() == CONNECTED_STATE_DISCONNECTED).collect(
                         toList()));
@@ -1008,7 +1008,7 @@
             updateSuggestedWifiEntryScans(Collections.emptyList());
             updatePasspointWifiEntryScans(Collections.emptyList());
             updateOsuWifiEntryScans(Collections.emptyList());
-            if (ENABLE_SHARED_CONNECTIVITY_FEATURE && BuildCompat.isAtLeastU()) {
+            if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
                 mKnownNetworkEntryCache.clear();
                 mHotspotNetworkEntryCache.clear();
             }
@@ -1032,7 +1032,7 @@
         updateSuggestedWifiEntryScans(scanResults);
         updatePasspointWifiEntryScans(scanResults);
         updateOsuWifiEntryScans(scanResults);
-        if (ENABLE_SHARED_CONNECTIVITY_FEATURE && BuildCompat.isAtLeastU()) {
+        if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
             updateKnownNetworkEntryScans(scanResults);
             // Updating the hotspot entries here makes the UI more reliable when switching pages or
             // when toggling settings while the internet picker is shown.
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/TestUtils.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/TestUtils.java
index 85d98cc..71102dd 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/TestUtils.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/TestUtils.java
@@ -57,6 +57,13 @@
         return result;
     }
 
+    static ScanResult buildScanResult(
+            String utf8Ssid, String bssid, long timestampMillis, String securityTypesString) {
+        final ScanResult result = buildScanResult(utf8Ssid, bssid, timestampMillis);
+        result.capabilities = securityTypesString;
+        return result;
+    }
+
     static WifiConfiguration buildWifiConfiguration(String utf8Ssid) {
         final WifiConfiguration config = new WifiConfiguration();
         config.SSID = "\"" + utf8Ssid + "\"";
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
index bcacd2c..c77d14a 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
@@ -16,6 +16,9 @@
 
 package com.android.wifitrackerlib;
 
+import static android.net.wifi.WifiInfo.SECURITY_TYPE_PSK;
+import static android.net.wifi.WifiInfo.SECURITY_TYPE_SAE;
+
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
@@ -58,6 +61,11 @@
 import android.net.wifi.hotspot2.PasspointConfiguration;
 import android.net.wifi.hotspot2.pps.Credential;
 import android.net.wifi.hotspot2.pps.HomeSp;
+import android.net.wifi.sharedconnectivity.app.HotspotNetwork;
+import android.net.wifi.sharedconnectivity.app.KnownNetwork;
+import android.net.wifi.sharedconnectivity.app.NetworkProviderInfo;
+import android.net.wifi.sharedconnectivity.app.SharedConnectivityClientCallback;
+import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager;
 import android.os.Handler;
 import android.os.test.TestLooper;
 import android.telephony.SubscriptionManager;
@@ -68,6 +76,7 @@
 import androidx.annotation.NonNull;
 import androidx.lifecycle.Lifecycle;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
@@ -109,6 +118,7 @@
     @Mock private NetworkCapabilities mMockNetworkCapabilities;
     @Mock private NetworkCapabilities mMockVcnNetworkCapabilities;
     @Mock private LinkProperties mMockLinkProperties;
+    @Mock private SharedConnectivityManager mMockSharedConnectivityManager;
 
     private TestLooper mTestLooper;
 
@@ -120,6 +130,9 @@
     private final ArgumentCaptor<ConnectivityManager.NetworkCallback>
             mDefaultNetworkCallbackCaptor =
                 ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
+    private final ArgumentCaptor<SharedConnectivityClientCallback>
+            mSharedConnectivityCallbackCaptor =
+            ArgumentCaptor.forClass(SharedConnectivityClientCallback.class);
 
     private WifiPickerTracker createTestWifiPickerTracker() {
         final Handler testHandler = new Handler(mTestLooper.getLooper());
@@ -185,6 +198,7 @@
                         .build());
         when(mMockConnectivityManager.getLinkProperties(mMockNetwork))
                 .thenReturn(mMockLinkProperties);
+        when(mMockSharedConnectivityManager.unregisterCallback(any())).thenReturn(true);
         when(mMockContext.getResources()).thenReturn(mMockResources);
         when(mMockContext.getSystemService(TelephonyManager.class))
                 .thenReturn(mMockTelephonyManager);
@@ -193,7 +207,16 @@
         when(mMockContext.getSystemService(ConnectivityDiagnosticsManager.class))
                 .thenReturn(mMockConnectivityDiagnosticsManager);
         when(mMockContext.getSystemService(WifiScanner.class)).thenReturn(mWifiScanner);
+        when(mMockContext.getSystemService(SharedConnectivityManager.class))
+                .thenReturn(mMockSharedConnectivityManager);
         when(mMockContext.getString(anyInt())).thenReturn("");
+
+        BaseWifiTracker.mEnableSharedConnectivityFeature = true;
+    }
+
+    @After
+    public void tearDown() {
+        BaseWifiTracker.mEnableSharedConnectivityFeature = false;
     }
 
     /**
@@ -2019,4 +2042,207 @@
         mScanListenerCaptor.getValue().onFailure(0, "Reason");
         verify(mMockWifiManager).startScan();
     }
+
+    @Test
+    public void testSharedConnectivityManager_onStart_registersCallback() {
+        final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+
+        wifiPickerTracker.onStart();
+        mTestLooper.dispatchAll();
+
+        verify(mMockSharedConnectivityManager).registerCallback(any(),
+                mSharedConnectivityCallbackCaptor.capture());
+    }
+
+    @Test
+    public void testSharedConnectivityManager_onServiceConnected_gettersCalled() {
+        final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+        wifiPickerTracker.onStart();
+        mTestLooper.dispatchAll();
+        verify(mMockSharedConnectivityManager).registerCallback(any(),
+                mSharedConnectivityCallbackCaptor.capture());
+
+        mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+        mTestLooper.dispatchAll();
+
+        verify(mMockSharedConnectivityManager).getKnownNetworks();
+        verify(mMockSharedConnectivityManager).getHotspotNetworks();
+    }
+
+    @Test
+    public void testKnownNetworks_noMatchingScanResult_entryNotIncluded() {
+        final KnownNetwork testKnownNetwork = new KnownNetwork.Builder()
+                .setNetworkSource(KnownNetwork.NETWORK_SOURCE_NEARBY_SELF)
+                .setSsid("ssid")
+                .addSecurityType(SECURITY_TYPE_PSK)
+                .addSecurityType(SECURITY_TYPE_SAE)
+                .setNetworkProviderInfo(new NetworkProviderInfo
+                        .Builder("My Phone", "Pixel 7")
+                        .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+                        .setBatteryPercentage(100)
+                        .setConnectionStrength(3)
+                        .build())
+                .build();
+        final ScanResult testScanResult = buildScanResult("other_ssid", "bssid", START_MILLIS);
+        testScanResult.capabilities = "[WEP]";
+        when(mMockSharedConnectivityManager.getKnownNetworks()).thenReturn(
+                List.of(testKnownNetwork));
+        when(mMockWifiManager.getScanResults()).thenReturn(List.of(testScanResult));
+        final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+        wifiPickerTracker.onStart();
+        mTestLooper.dispatchAll();
+        verify(mMockSharedConnectivityManager).registerCallback(any(),
+                mSharedConnectivityCallbackCaptor.capture());
+
+        mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+        mTestLooper.dispatchAll();
+
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof KnownNetworkEntry).toList()).isEmpty();
+    }
+
+    @Test
+    public void testKnownNetworks_matchingScanResult_entryIncluded() {
+        final KnownNetwork testKnownNetwork = new KnownNetwork.Builder()
+                .setNetworkSource(KnownNetwork.NETWORK_SOURCE_NEARBY_SELF)
+                .setSsid("ssid")
+                .addSecurityType(SECURITY_TYPE_PSK)
+                .addSecurityType(SECURITY_TYPE_SAE)
+                .setNetworkProviderInfo(new NetworkProviderInfo
+                        .Builder("My Phone", "Pixel 7")
+                        .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+                        .setBatteryPercentage(100)
+                        .setConnectionStrength(3)
+                        .build())
+                .build();
+        final ScanResult testScanResult = buildScanResult("ssid", "bssid", START_MILLIS);
+        testScanResult.capabilities = "[PSK/SAE]";
+        when(mMockSharedConnectivityManager.getKnownNetworks()).thenReturn(
+                List.of(testKnownNetwork));
+        when(mMockWifiManager.getScanResults()).thenReturn(List.of(testScanResult));
+        final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+        wifiPickerTracker.onStart();
+        mTestLooper.dispatchAll();
+        verify(mMockSharedConnectivityManager).registerCallback(any(),
+                mSharedConnectivityCallbackCaptor.capture());
+
+        mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+        mTestLooper.dispatchAll();
+
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof KnownNetworkEntry).toList()).hasSize(1);
+    }
+
+    @Test
+    public void testHotspotNetworks_noActiveHotspot_virtualEntryIncluded() {
+        final HotspotNetwork testHotspotNetwork = new HotspotNetwork.Builder()
+                .setDeviceId(1)
+                .setNetworkProviderInfo(new NetworkProviderInfo
+                        .Builder("My Phone", "Pixel 7")
+                        .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+                        .setBatteryPercentage(100)
+                        .setConnectionStrength(3)
+                        .build())
+                .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+                .setNetworkName("Google Fi")
+                .build();
+        when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
+                Collections.singletonList(testHotspotNetwork));
+        final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+        wifiPickerTracker.onStart();
+        mTestLooper.dispatchAll();
+        verify(mMockSharedConnectivityManager).registerCallback(any(),
+                mSharedConnectivityCallbackCaptor.capture());
+
+        mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+        mTestLooper.dispatchAll();
+
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof HotspotNetworkEntry).toList()).hasSize(1);
+        WifiEntry hotspotNetworkEntry = wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof HotspotNetworkEntry).findFirst().orElseThrow();
+        assertThat(((HotspotNetworkEntry) hotspotNetworkEntry).getHotspotNetworkEntryKey()
+                .isVirtualEntry()).isTrue();
+    }
+
+    @Test
+    public void testHotspotNetworks_activeHotspot_nonVirtualEntryIncluded() {
+        final HotspotNetwork testHotspotNetwork = new HotspotNetwork.Builder()
+                .setDeviceId(1)
+                .setNetworkProviderInfo(new NetworkProviderInfo
+                        .Builder("My Phone", "Pixel 7")
+                        .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+                        .setBatteryPercentage(100)
+                        .setConnectionStrength(3)
+                        .build())
+                .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+                .setNetworkName("Google Fi")
+                .setHotspotSsid("Instant Hotspot abcde")
+                .setHotspotBssid("0a:0b:0c:0d:0e:0f")
+                .addHotspotSecurityType(SECURITY_TYPE_PSK)
+                .addHotspotSecurityType(SECURITY_TYPE_SAE)
+                .build();
+        when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
+                Collections.singletonList(testHotspotNetwork));
+        final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+        wifiPickerTracker.onStart();
+        mTestLooper.dispatchAll();
+        verify(mMockSharedConnectivityManager).registerCallback(any(),
+                mSharedConnectivityCallbackCaptor.capture());
+
+        mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+        mTestLooper.dispatchAll();
+
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof HotspotNetworkEntry).toList()).hasSize(1);
+        WifiEntry hotspotNetworkEntry = wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof HotspotNetworkEntry).findFirst().orElseThrow();
+        assertThat(((HotspotNetworkEntry) hotspotNetworkEntry).getHotspotNetworkEntryKey()
+                .isVirtualEntry()).isFalse();
+    }
+
+    @Test
+    public void testHotspotNetworks_duplicatesStandardEntry_standardEntryExcluded() {
+        final HotspotNetwork testHotspotNetwork = new HotspotNetwork.Builder()
+                .setDeviceId(1)
+                .setNetworkProviderInfo(new NetworkProviderInfo
+                        .Builder("My Phone", "Pixel 7")
+                        .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+                        .setBatteryPercentage(100)
+                        .setConnectionStrength(3)
+                        .build())
+                .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+                .setNetworkName("Google Fi")
+                .setHotspotSsid("Instant Hotspot abcde")
+                .setHotspotBssid("0a:0b:0c:0d:0e:0f")
+                .addHotspotSecurityType(SECURITY_TYPE_PSK)
+                .addHotspotSecurityType(SECURITY_TYPE_SAE)
+                .build();
+        when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
+                Collections.singletonList(testHotspotNetwork));
+        final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+        wifiPickerTracker.onStart();
+        mTestLooper.dispatchAll();
+        verify(mMockContext).registerReceiver(mBroadcastReceiverCaptor.capture(),
+                any(), any(), any());
+        when(mMockWifiManager.getScanResults()).thenReturn(List.of(
+                buildScanResult("Instant Hotspot abcde", "0a:0b:0c:0d:0e:0f", START_MILLIS,
+                        "[PSK,SAE]")));
+        mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
+                new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof StandardWifiEntry).toList()).hasSize(1);
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof HotspotNetworkEntry).toList()).isEmpty();
+
+        verify(mMockSharedConnectivityManager).registerCallback(any(),
+                mSharedConnectivityCallbackCaptor.capture());
+        mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+        mTestLooper.dispatchAll();
+
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof StandardWifiEntry).toList()).isEmpty();
+        assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+                entry -> entry instanceof HotspotNetworkEntry).toList()).hasSize(1);
+    }
 }