PasspointManager: Remove usage of ClientModeImpl

The only usage of ClientModeImpl in the class is to trigger a disconnect
if we're connected to a profile corresponding to the app removed. This
explicit trigger is not needed since |removeProvider| already internally
removes any active WifiConfiguration from WifiConfigManager. This in
turn triggers the OnNetworkUpdateListener.onNetworkRemoved() callback
which is used by ClientModeImpl to trigger disconnect.

Bug: 159052883
Test: atest com.android.server.wifi
Change-Id: Iabd827ff0309543127e8b7ef16932174195f07bd
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index 12185de..25d7483 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -331,8 +331,7 @@
                 mWifiCarrierInfoManager, mWifiKeyStore, mLruConnectionTracker);
         mPasspointManager = new PasspointManager(mContext, this,
                 wifiHandler, mWifiNative, mWifiKeyStore, mClock, new PasspointObjectFactory(),
-                mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager,
-                mClientModeImplHolder);
+                mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager);
         PasspointNetworkNominateHelper nominateHelper =
                 new PasspointNetworkNominateHelper(mPasspointManager, mWifiConfigManager,
                         mConnectivityLocalLog);
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
index 397dd36..bbe2bb1 100644
--- a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
+++ b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
@@ -45,7 +45,6 @@
 import com.android.server.wifi.WifiConfigManager;
 import com.android.server.wifi.WifiConfigStore;
 import com.android.server.wifi.WifiInjector;
-import com.android.server.wifi.WifiInjector.PrimaryClientModeImplHolder;
 import com.android.server.wifi.WifiKeyStore;
 import com.android.server.wifi.WifiMetrics;
 import com.android.server.wifi.WifiNative;
@@ -119,7 +118,6 @@
     private final PasspointProvisioner mPasspointProvisioner;
     private final AppOpsManager mAppOps;
     private final WifiCarrierInfoManager mWifiCarrierInfoManager;
-    private final PrimaryClientModeImplHolder mClientModeImplHolder;
 
     /**
      * Map of package name of an app to the app ops changed listener for the app.
@@ -258,7 +256,6 @@
                 packageName).entrySet()) {
             String uniqueId = entry.getValue().getConfig().getUniqueId();
             removeProvider(Process.WIFI_UID /* ignored */, true, uniqueId, null);
-            disconnectIfPasspointNetwork(uniqueId);
         }
     }
 
@@ -288,26 +285,12 @@
         mAppOps.stopWatchingMode(appOpsChangedListener);
     }
 
-    private void disconnectIfPasspointNetwork(String uniqueId) {
-        WifiConfiguration currentConfiguration =
-                mClientModeImplHolder.get().getCurrentWifiConfiguration();
-        if (currentConfiguration == null) return;
-        if (currentConfiguration.isPasspoint() && TextUtils.equals(currentConfiguration.getKey(),
-                uniqueId)) {
-            Log.i(TAG, "Disconnect current Passpoint network for FQDN: "
-                    + currentConfiguration.FQDN + " and ID: " + uniqueId
-                    + " because the profile was removed");
-            mClientModeImplHolder.get().disconnectCommand();
-        }
-    }
-
     public PasspointManager(Context context, WifiInjector wifiInjector, Handler handler,
             WifiNative wifiNative, WifiKeyStore keyStore, Clock clock,
             PasspointObjectFactory objectFactory, WifiConfigManager wifiConfigManager,
             WifiConfigStore wifiConfigStore,
             WifiMetrics wifiMetrics,
-            WifiCarrierInfoManager wifiCarrierInfoManager,
-            PrimaryClientModeImplHolder clientModeImplHolder) {
+            WifiCarrierInfoManager wifiCarrierInfoManager) {
         mPasspointEventHandler = objectFactory.makePasspointEventHandler(wifiNative,
                 new CallbackHandler(context));
         mWifiInjector = wifiInjector;
@@ -321,7 +304,6 @@
         mWifiMetrics = wifiMetrics;
         mProviderIndex = 0;
         mWifiCarrierInfoManager = wifiCarrierInfoManager;
-        mClientModeImplHolder = clientModeImplHolder;
         wifiConfigStore.registerStoreData(objectFactory.makePasspointConfigUserStoreData(
                 mKeyStore, mWifiCarrierInfoManager, new UserDataSourceHandler()));
         wifiConfigStore.registerStoreData(objectFactory.makePasspointConfigSharedStoreData(
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
index a627a6f..4cc6be9 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
@@ -74,7 +74,6 @@
 
 import androidx.test.filters.SmallTest;
 
-import com.android.server.wifi.ClientModeImpl;
 import com.android.server.wifi.Clock;
 import com.android.server.wifi.FakeKeys;
 import com.android.server.wifi.FrameworkFacade;
@@ -86,7 +85,6 @@
 import com.android.server.wifi.WifiConfigurationTestUtil;
 import com.android.server.wifi.WifiContext;
 import com.android.server.wifi.WifiInjector;
-import com.android.server.wifi.WifiInjector.PrimaryClientModeImplHolder;
 import com.android.server.wifi.WifiKeyStore;
 import com.android.server.wifi.WifiMetrics;
 import com.android.server.wifi.WifiNative;
@@ -185,7 +183,6 @@
     @Mock KeyStore mKeyStore;
     @Mock AppOpsManager mAppOpsManager;
     @Mock WifiInjector mWifiInjector;
-    @Mock ClientModeImpl mClientModeImpl;
     @Mock TelephonyManager mTelephonyManager;
     @Mock SubscriptionManager mSubscriptionManager;
     @Mock WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager;
@@ -196,7 +193,6 @@
     ArgumentCaptor<AppOpsManager.OnOpChangedListener> mAppOpChangedListenerCaptor =
             ArgumentCaptor.forClass(AppOpsManager.OnOpChangedListener.class);
     WifiCarrierInfoManager mWifiCarrierInfoManager;
-    PrimaryClientModeImplHolder mClientModeImplHolder;
 
     /** Sets up test. */
     @Before
@@ -215,8 +211,6 @@
                 any(PasspointManager.class), any(WifiMetrics.class)))
                 .thenReturn(mPasspointProvisioner);
         when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager);
-        mClientModeImplHolder = new PrimaryClientModeImplHolder();
-        mClientModeImplHolder.set(mClientModeImpl);
         when(mWifiInjector.getWifiNetworkSuggestionsManager())
                 .thenReturn(mWifiNetworkSuggestionsManager);
         mWifiCarrierInfoManager = new WifiCarrierInfoManager(mTelephonyManager,
@@ -226,7 +220,7 @@
         mHandler = new Handler(mLooper.getLooper());
         mManager = new PasspointManager(mContext, mWifiInjector, mHandler, mWifiNative,
                 mWifiKeyStore, mClock, mObjectFactory, mWifiConfigManager,
-                mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager, mClientModeImplHolder);
+                mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager);
         ArgumentCaptor<PasspointEventHandler.Callbacks> callbacks =
                 ArgumentCaptor.forClass(PasspointEventHandler.Callbacks.class);
         verify(mObjectFactory).makePasspointEventHandler(any(WifiNative.class),
@@ -752,7 +746,7 @@
                 .thenReturn(true);
         PasspointManager ut = new PasspointManager(mContext, mWifiInjector, mHandler, mWifiNative,
                 mWifiKeyStore, mClock, spyFactory, mWifiConfigManager,
-                mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager, mClientModeImplHolder);
+                mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager);
 
         assertTrue(ut.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE,
                 true, true));
@@ -1834,7 +1828,6 @@
     public void verifyRemovingPasspointProfilesWhenAppIsDisabled() {
         WifiConfiguration currentConfiguration = WifiConfigurationTestUtil.createPasspointNetwork();
         currentConfiguration.FQDN = TEST_FQDN;
-        when(mClientModeImpl.getCurrentWifiConfiguration()).thenReturn(currentConfiguration);
         PasspointProvider passpointProvider =
                 addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
         currentConfiguration.setPasspointUniqueId(passpointProvider.getConfig().getUniqueId());
@@ -1853,7 +1846,8 @@
         mLooper.dispatchAll();
 
         verify(mAppOpsManager).stopWatchingMode(mAppOpChangedListenerCaptor.getValue());
-        verify(mClientModeImpl).disconnectCommand();
+        verify(mWifiConfigManager).removePasspointConfiguredNetwork(
+                passpointProvider.getWifiConfig().getKey());
         assertTrue(mManager.getProviderConfigs(TEST_CREATOR_UID, true).isEmpty());
     }