• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.wifi;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.annotation.SuppressLint;
22 import android.app.ActivityManager;
23 import android.app.AlarmManager;
24 import android.app.AppOpsManager;
25 import android.app.BroadcastOptions;
26 import android.app.StatsManager;
27 import android.content.Context;
28 import android.net.IpMemoryStore;
29 import android.net.LinkProperties;
30 import android.net.MatchAllNetworkSpecifier;
31 import android.net.NetworkAgentConfig;
32 import android.net.NetworkCapabilities;
33 import android.net.NetworkProvider;
34 import android.net.wifi.WifiContext;
35 import android.net.wifi.WifiScanner;
36 import android.net.wifi.WifiTwtSession;
37 import android.net.wifi.nl80211.WifiNl80211Manager;
38 import android.os.BatteryManager;
39 import android.os.BatteryStatsManager;
40 import android.os.Handler;
41 import android.os.HandlerThread;
42 import android.os.Looper;
43 import android.os.Process;
44 import android.os.UserManager;
45 import android.os.WorkSource;
46 import android.provider.Settings.Secure;
47 import android.security.keystore.AndroidKeyStoreProvider;
48 import android.telephony.CarrierConfigManager;
49 import android.telephony.SubscriptionManager;
50 import android.telephony.TelephonyManager;
51 import android.util.LocalLog;
52 import android.util.Log;
53 
54 import androidx.annotation.Keep;
55 
56 import com.android.internal.annotations.VisibleForTesting;
57 import com.android.internal.telephony.flags.Flags;
58 import com.android.modules.utils.BackgroundThread;
59 import com.android.modules.utils.build.SdkLevel;
60 import com.android.server.wifi.aware.WifiAwareMetrics;
61 import com.android.server.wifi.b2b.WifiRoamingModeManager;
62 import com.android.server.wifi.coex.CoexManager;
63 import com.android.server.wifi.hotspot2.PasspointManager;
64 import com.android.server.wifi.hotspot2.PasspointNetworkNominateHelper;
65 import com.android.server.wifi.hotspot2.PasspointObjectFactory;
66 import com.android.server.wifi.mainline_supplicant.MainlineSupplicant;
67 import com.android.server.wifi.mockwifi.MockWifiServiceUtil;
68 import com.android.server.wifi.p2p.SupplicantP2pIfaceHal;
69 import com.android.server.wifi.p2p.WifiP2pMetrics;
70 import com.android.server.wifi.p2p.WifiP2pMonitor;
71 import com.android.server.wifi.p2p.WifiP2pNative;
72 import com.android.server.wifi.rtt.RttMetrics;
73 import com.android.server.wifi.util.KeystoreWrapper;
74 import com.android.server.wifi.util.LastCallerInfoManager;
75 import com.android.server.wifi.util.LruConnectionTracker;
76 import com.android.server.wifi.util.NetdWrapper;
77 import com.android.server.wifi.util.SettingsMigrationDataHolder;
78 import com.android.server.wifi.util.WifiPermissionsUtil;
79 import com.android.server.wifi.util.WifiPermissionsWrapper;
80 import com.android.server.wifi.util.WorkSourceHelper;
81 import com.android.wifi.flags.FeatureFlags;
82 import com.android.wifi.resources.R;
83 
84 import java.io.BufferedReader;
85 import java.io.FileNotFoundException;
86 import java.io.FileReader;
87 import java.security.KeyStore;
88 import java.security.KeyStoreException;
89 import java.security.NoSuchProviderException;
90 import java.util.Random;
91 
92 /**
93  *  WiFi dependency injector. To be used for accessing various WiFi class instances and as a
94  *  handle for mock injection.
95  *
96  *  Some WiFi class instances currently depend on having a Looper from a HandlerThread that has
97  *  been started. To accommodate this, we have a two-phased approach to initialize and retrieve
98  *  an instance of the WifiInjector.
99  */
100 public class WifiInjector {
101     private static final String TAG = "WifiInjector";
102     private static final String BOOT_DEFAULT_WIFI_COUNTRY_CODE = "ro.boot.wificountrycode";
103     /**
104      * Maximum number in-memory store network connection order;
105      */
106     private static final int MAX_RECENTLY_CONNECTED_NETWORK = 100;
107 
108     private final WifiDeviceStateChangeManager mWifiDeviceStateChangeManager;
109     private final PasspointNetworkNominateHelper mNominateHelper;
110     private final AlarmManager mAlarmManager;
111 
makeBaseNetworkCapatibilitiesFilterBuilder()112     private static NetworkCapabilities.Builder makeBaseNetworkCapatibilitiesFilterBuilder() {
113         NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder()
114                 .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
115                 .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
116                 .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
117                 .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING)
118                 .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED)
119                 .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED)
120                 .setLinkUpstreamBandwidthKbps(1024 * 1024)
121                 .setLinkDownstreamBandwidthKbps(1024 * 1024)
122                 .setNetworkSpecifier(new MatchAllNetworkSpecifier());
123         if (SdkLevel.isAtLeastS()) {
124             builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED);
125         }
126         return builder;
127     }
128 
129     @VisibleForTesting
130     public static final NetworkCapabilities REGULAR_NETWORK_CAPABILITIES_FILTER =
131             makeBaseNetworkCapatibilitiesFilterBuilder()
132                     .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
133                     .build();
134 
makeOemNetworkCapatibilitiesFilter()135     private static NetworkCapabilities makeOemNetworkCapatibilitiesFilter() {
136         NetworkCapabilities.Builder builder =
137                 makeBaseNetworkCapatibilitiesFilterBuilder()
138                 .addCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID);
139         if (SdkLevel.isAtLeastS()) {
140             // OEM_PRIVATE capability was only added in Android S.
141             builder.addCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE);
142         }
143         return builder.build();
144     }
145 
146     private static final NetworkCapabilities OEM_NETWORK_CAPABILITIES_FILTER =
147             makeOemNetworkCapatibilitiesFilter();
148 
149     private static final NetworkCapabilities RESTRICTED_NETWORK_CAPABILITIES_FILTER =
150             makeBaseNetworkCapatibilitiesFilterBuilder()
151                     .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
152                     .build();
153 
154 
155     static WifiInjector sWifiInjector = null;
156 
157     private final WifiContext mContext;
158     private final BatteryStatsManager mBatteryStats;
159     private final FrameworkFacade mFrameworkFacade = new FrameworkFacade();
160     private final DeviceConfigFacade mDeviceConfigFacade;
161     private final FeatureFlags mFeatureFlags;
162     private final UserManager mUserManager;
163     private final HandlerThread mWifiHandlerThread;
164     private final HandlerThread mPasspointProvisionerHandlerThread;
165     private final HandlerThread mWifiDiagnosticsHandlerThread;
166     private final WifiTrafficPoller mWifiTrafficPoller;
167     private final WifiCountryCode mCountryCode;
168     private final BackupManagerProxy mBackupManagerProxy = new BackupManagerProxy();
169     private final WifiApConfigStore mWifiApConfigStore;
170     private final WifiNative mWifiNative;
171     private final WifiMonitor mWifiMonitor;
172     private final WifiP2pNative mWifiP2pNative;
173     private final WifiP2pMonitor mWifiP2pMonitor;
174     private final SupplicantStaIfaceHal mSupplicantStaIfaceHal;
175     private final SupplicantP2pIfaceHal mSupplicantP2pIfaceHal;
176     private final MainlineSupplicant mMainlineSupplicant;
177     private final HostapdHal mHostapdHal;
178     private final WifiVendorHal mWifiVendorHal;
179     private final ScoringParams mScoringParams;
180     private final ActiveModeWarden mActiveModeWarden;
181     private final WifiSettingsStore mSettingsStore;
182     private final OpenNetworkNotifier mOpenNetworkNotifier;
183     private final WifiLockManager mLockManager;
184     private final WifiNl80211Manager mWifiCondManager;
185     private final Clock mClock = new Clock();
186     private final WifiMetrics mWifiMetrics;
187     private final WifiP2pMetrics mWifiP2pMetrics;
188     private final WifiLastResortWatchdog mWifiLastResortWatchdog;
189     private final PropertyService mPropertyService = new SystemPropertyService();
190     private final BuildProperties mBuildProperties = new SystemBuildProperties();
191     private final WifiBackupRestore mWifiBackupRestore;
192     private final BackupRestoreController mBackupRestoreController;
193     // This will only be null if SdkLevel is not at least S
194     @Nullable private final CoexManager mCoexManager;
195     private final SoftApBackupRestore mSoftApBackupRestore;
196     private final WifiSettingsBackupRestore mWifiSettingsBackupRestore;
197     private final WifiMulticastLockManager mWifiMulticastLockManager;
198     private final WifiConfigStore mWifiConfigStore;
199     private final WifiKeyStore mWifiKeyStore;
200     private final WifiConfigManager mWifiConfigManager;
201     private final WifiConnectivityHelper mWifiConnectivityHelper;
202     private final LocalLog mConnectivityLocalLog;
203     private final LocalLog mWifiHandlerLocalLog;
204     private final ThroughputScorer mThroughputScorer;
205     private final WifiNetworkSelector mWifiNetworkSelector;
206     private final SavedNetworkNominator mSavedNetworkNominator;
207     private final NetworkSuggestionNominator mNetworkSuggestionNominator;
208     private final ClientModeManagerBroadcastQueue mBroadcastQueue;
209     private WifiScanner mWifiScanner;
210     private MockWifiServiceUtil mMockWifiModem;
211     private final WifiPermissionsWrapper mWifiPermissionsWrapper;
212     private final WifiPermissionsUtil mWifiPermissionsUtil;
213     private final PasspointManager mPasspointManager;
214     private final HalDeviceManager mHalDeviceManager;
215     private final WifiStateTracker mWifiStateTracker;
216     private final SelfRecovery mSelfRecovery;
217     private final WakeupController mWakeupController;
218     private final ScanRequestProxy mScanRequestProxy;
219     private final SarManager mSarManager;
220     private final WifiDiagnostics mWifiDiagnostics;
221     private final WifiDataStall mWifiDataStall;
222     private final WifiScoreCard mWifiScoreCard;
223     private final WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager;
224     private final DppMetrics mDppMetrics;
225     private final DppManager mDppManager;
226     private final WifiPulledAtomLogger mWifiPulledAtomLogger;
227     private IpMemoryStore mIpMemoryStore;
228     private final WifiThreadRunner mWifiThreadRunner;
229     private final WifiBlocklistMonitor mWifiBlocklistMonitor;
230     private final MacAddressUtil mMacAddressUtil = new MacAddressUtil(new KeystoreWrapper());
231     private final MboOceController mMboOceController;
232     private final WifiPseudonymManager mWifiPseudonymManager;
233     private final WifiCarrierInfoManager mWifiCarrierInfoManager;
234     private final WifiChannelUtilization mWifiChannelUtilizationScan;
235     private final KeyStore mKeyStore;
236     private final ConnectionFailureNotificationBuilder mConnectionFailureNotificationBuilder;
237     private final ThroughputPredictor mThroughputPredictor;
238     private NetdWrapper mNetdWrapper;
239     private final WifiHealthMonitor mWifiHealthMonitor;
240     private final WifiSettingsConfigStore mSettingsConfigStore;
241     private final WifiScanAlwaysAvailableSettingsCompatibility
242             mWifiScanAlwaysAvailableSettingsCompatibility;
243     private final SettingsMigrationDataHolder mSettingsMigrationDataHolder;
244     private final LruConnectionTracker mLruConnectionTracker;
245     private final WifiConnectivityManager mWifiConnectivityManager;
246     private final ExternalPnoScanRequestManager mExternalPnoScanRequestManager;
247     private final ConnectHelper mConnectHelper;
248     private final ConnectionFailureNotifier mConnectionFailureNotifier;
249     private final WifiNetworkFactory mWifiNetworkFactory;
250     private final UntrustedWifiNetworkFactory mUntrustedWifiNetworkFactory;
251     private final OemWifiNetworkFactory mOemWifiNetworkFactory;
252     private final RestrictedWifiNetworkFactory mRestrictedWifiNetworkFactory;
253     private final MultiInternetWifiNetworkFactory mMultiInternetWifiNetworkFactory;
254     private final WifiP2pConnection mWifiP2pConnection;
255     private final WifiGlobals mWifiGlobals;
256     private final SimRequiredNotifier mSimRequiredNotifier;
257     private final DefaultClientModeManager mDefaultClientModeManager;
258     private final AdaptiveConnectivityEnabledSettingObserver
259             mAdaptiveConnectivityEnabledSettingObserver;
260     private final MakeBeforeBreakManager mMakeBeforeBreakManager;
261     private final MultiInternetManager mMultiInternetManager;
262     private final ClientModeImplMonitor mCmiMonitor = new ClientModeImplMonitor();
263     private final ExternalScoreUpdateObserverProxy mExternalScoreUpdateObserverProxy;
264     private final WifiNotificationManager mWifiNotificationManager;
265     private final LastCallerInfoManager mLastCallerInfoManager;
266     private final InterfaceConflictManager mInterfaceConflictManager;
267     private final AfcManager mAfcManager;
268     private final WifiContext mContextWithAttributionTag;
269     private final AfcLocationUtil mAfcLocationUtil;
270     private final AfcClient mAfcClient;
271     @NonNull private final WifiDialogManager mWifiDialogManager;
272     @NonNull private final SsidTranslator mSsidTranslator;
273     @NonNull private final ApplicationQosPolicyRequestHandler mApplicationQosPolicyRequestHandler;
274     private final WifiRoamingModeManager mWifiRoamingModeManager;
275     private final TwtManager mTwtManager;
276     private final WifiVoipDetector mWifiVoipDetector;
277     private final boolean mHasActiveModem;
278     private final RunnerHandler mWifiHandler;
279     private boolean mVerboseLoggingEnabled;
280     @Nullable private final WepNetworkUsageController mWepNetworkUsageController;
281 
WifiInjector(WifiContext context)282     public WifiInjector(WifiContext context) {
283         if (context == null) {
284             throw new IllegalStateException(
285                     "WifiInjector should not be initialized with a null Context.");
286         }
287 
288         if (sWifiInjector != null) {
289             throw new IllegalStateException(
290                     "WifiInjector was already created, use getInstance instead.");
291         }
292 
293         sWifiInjector = this;
294         mLastCallerInfoManager = new LastCallerInfoManager();
295         mContext = context;
296         mAlarmManager = mContext.getSystemService(AlarmManager.class);
297 
298         // Now create and start handler threads
299         mWifiHandlerThread = new HandlerThread("WifiHandlerThread");
300         mWifiHandlerThread.start();
301         Looper wifiLooper = mWifiHandlerThread.getLooper();
302         mWifiHandlerLocalLog = new LocalLog(1024);
303         WifiAwareMetrics awareMetrics = new WifiAwareMetrics(mClock);
304         RttMetrics rttMetrics = new RttMetrics(mClock);
305         mDppMetrics = new DppMetrics();
306         mWifiMonitor = new WifiMonitor();
307         mBatteryStats = context.getSystemService(BatteryStatsManager.class);
308         mWifiP2pMetrics = new WifiP2pMetrics(mClock, mContext);
309         mWifiHandler = new RunnerHandler(wifiLooper, context.getResources().getInteger(
310                 R.integer.config_wifiConfigurationWifiRunnerThresholdInMs),
311                 mWifiHandlerLocalLog);
312         mWifiDeviceStateChangeManager = new WifiDeviceStateChangeManager(context, mWifiHandler,
313                 this);
314         mWifiGlobals = new WifiGlobals(mContext);
315         mWifiMetrics = new WifiMetrics(mContext, mFrameworkFacade, mClock, wifiLooper,
316                 awareMetrics, rttMetrics, new WifiPowerMetrics(mBatteryStats), mWifiP2pMetrics,
317                 mDppMetrics, mWifiMonitor, mWifiDeviceStateChangeManager, mWifiGlobals);
318 
319         mWifiDiagnosticsHandlerThread = new HandlerThread("WifiDiagnostics");
320         mWifiDiagnosticsHandlerThread.start();
321 
322 
323         mWifiNotificationManager = new WifiNotificationManager(mContext);
324         mScoringParams = new ScoringParams(mContext);
325         mWifiChannelUtilizationScan = new WifiChannelUtilization(mClock, mContext);
326         mSettingsMigrationDataHolder = new SettingsMigrationDataHolder(mContext);
327         mConnectionFailureNotificationBuilder = new ConnectionFailureNotificationBuilder(
328                 mContext, mFrameworkFacade);
329 
330         mWifiPermissionsWrapper = new WifiPermissionsWrapper(mContext);
331         mUserManager = mContext.getSystemService(UserManager.class);
332         mWifiPermissionsUtil = new WifiPermissionsUtil(mWifiPermissionsWrapper, mContext,
333                 mUserManager, this);
334         mWifiBackupRestore = new WifiBackupRestore(mWifiPermissionsUtil);
335         mSoftApBackupRestore = new SoftApBackupRestore(mContext, mSettingsMigrationDataHolder);
336         mWifiStateTracker = new WifiStateTracker(mBatteryStats);
337         mWifiThreadRunner = new WifiThreadRunner(mWifiHandler);
338         mWifiDialogManager = new WifiDialogManager(mContext, mWifiThreadRunner, mFrameworkFacade,
339                 this);
340         mSsidTranslator = new SsidTranslator(mContext, mWifiHandler);
341         mPasspointProvisionerHandlerThread =
342                 new HandlerThread("PasspointProvisionerHandlerThread");
343         mPasspointProvisionerHandlerThread.start();
344         mDeviceConfigFacade = new DeviceConfigFacade(mContext, mWifiHandler, mWifiMetrics);
345         mFeatureFlags = mDeviceConfigFacade.getFeatureFlags();
346         mAdaptiveConnectivityEnabledSettingObserver =
347                 new AdaptiveConnectivityEnabledSettingObserver(mWifiHandler, mWifiMetrics,
348                         mFrameworkFacade, mContext);
349         // Modules interacting with Native.
350         mHalDeviceManager = new HalDeviceManager(mContext, mClock, this, mWifiHandler);
351         mInterfaceConflictManager = new InterfaceConflictManager(this, mContext, mFrameworkFacade,
352                 mHalDeviceManager, mWifiThreadRunner, mWifiDialogManager, new LocalLog(
353                 mContext.getSystemService(ActivityManager.class).isLowRamDevice() ? 128 : 256));
354         mWifiVendorHal = new WifiVendorHal(mContext, mHalDeviceManager, mWifiHandler, mWifiGlobals,
355                 mSsidTranslator);
356         mSupplicantStaIfaceHal = new SupplicantStaIfaceHal(
357                 mContext, mWifiMonitor, mFrameworkFacade, mWifiHandler, mClock, mWifiMetrics,
358                 mWifiGlobals, mSsidTranslator, this);
359         mMainlineSupplicant = new MainlineSupplicant(mWifiThreadRunner);
360         mHostapdHal = new HostapdHal(mContext, mWifiHandler);
361         mWifiCondManager = (WifiNl80211Manager) mContext.getSystemService(
362                 Context.WIFI_NL80211_SERVICE);
363         mWifiNative = new WifiNative(
364                 mWifiVendorHal, mSupplicantStaIfaceHal, mHostapdHal, mWifiCondManager,
365                 mWifiMonitor, mPropertyService, mWifiMetrics,
366                 mWifiHandler, new Random(), mBuildProperties, this, mMainlineSupplicant);
367         mWifiP2pMonitor = new WifiP2pMonitor();
368         mSupplicantP2pIfaceHal = new SupplicantP2pIfaceHal(mWifiP2pMonitor, mWifiGlobals, this);
369         mWifiP2pNative = new WifiP2pNative(mWifiCondManager, mWifiNative, mWifiMetrics,
370                 mWifiVendorHal, mSupplicantP2pIfaceHal, mHalDeviceManager, mPropertyService, this);
371         SubscriptionManager subscriptionManager =
372                 mContext.getSystemService(SubscriptionManager.class);
373         if (SdkLevel.isAtLeastS()) {
374             mCoexManager = new CoexManager(mContext, mWifiNative, makeTelephonyManager(),
375                     subscriptionManager, mContext.getSystemService(CarrierConfigManager.class),
376                     mWifiHandler);
377         } else {
378             mCoexManager = null;
379         }
380 
381         // Now get instances of all the objects that depend on the HandlerThreads
382         mWifiTrafficPoller = new WifiTrafficPoller(mContext);
383         // WifiConfigManager/Store objects and their dependencies.
384         KeyStore keyStore = null;
385         try {
386             keyStore = AndroidKeyStoreProvider.getKeyStoreForUid(Process.WIFI_UID);
387         } catch (KeyStoreException | NoSuchProviderException e) {
388             Log.wtf(TAG, "Failed to load keystore", e);
389         }
390         mKeyStore = keyStore;
391         mWifiKeyStore = new WifiKeyStore(mContext, mKeyStore, mFrameworkFacade);
392         // New config store
393         mWifiConfigStore = new WifiConfigStore(mClock, mWifiMetrics,
394                 WifiConfigStore.createSharedFiles(mFrameworkFacade.isNiapModeOn(mContext)));
395         mWifiPseudonymManager =
396                 new WifiPseudonymManager(
397                         mContext,
398                         this,
399                         mClock,
400                         mAlarmManager,
401                         wifiLooper);
402         mWifiCarrierInfoManager = new WifiCarrierInfoManager(makeTelephonyManager(),
403                 subscriptionManager, this, mFrameworkFacade, mContext,
404                 mWifiConfigStore, mWifiHandler, mWifiMetrics, mClock, mWifiPseudonymManager);
405         String l2KeySeed = Secure.getString(mContext.getContentResolver(), Secure.ANDROID_ID);
406         mWifiScoreCard = new WifiScoreCard(mClock, l2KeySeed, mDeviceConfigFacade,
407                 mContext, mWifiGlobals);
408         mWifiMetrics.setWifiScoreCard(mWifiScoreCard);
409         mLruConnectionTracker = new LruConnectionTracker(MAX_RECENTLY_CONNECTED_NETWORK,
410                 mContext);
411         mWifiConnectivityHelper = new WifiConnectivityHelper(this);
412         int maxLinesLowRam = mContext.getResources().getInteger(
413                 R.integer.config_wifiConnectivityLocalLogMaxLinesLowRam);
414         int maxLinesHighRam = mContext.getResources().getInteger(
415                 R.integer.config_wifiConnectivityLocalLogMaxLinesHighRam);
416         mConnectivityLocalLog = new LocalLog(
417                 mContext.getSystemService(ActivityManager.class).isLowRamDevice() ? maxLinesLowRam
418                         : maxLinesHighRam);
419         mWifiDiagnostics = new WifiDiagnostics(
420                 mContext, this, mWifiNative, mBuildProperties,
421                 new LastMileLogger(this, BackgroundThread.getHandler()), mClock,
422                 mWifiDiagnosticsHandlerThread.getLooper());
423         mWifiLastResortWatchdog = new WifiLastResortWatchdog(this, mContext, mClock,
424                 mWifiMetrics, mWifiDiagnostics, wifiLooper,
425                 mDeviceConfigFacade, mWifiThreadRunner, mWifiMonitor);
426         mWifiBlocklistMonitor =
427                 new WifiBlocklistMonitor(
428                         mContext,
429                         mWifiConnectivityHelper,
430                         mWifiLastResortWatchdog,
431                         mClock,
432                         new LocalLog(
433                                 mContext.getSystemService(ActivityManager.class).isLowRamDevice()
434                                         ? 128
435                                         : 256),
436                         mWifiScoreCard,
437                         mScoringParams,
438                         mWifiMetrics,
439                         mWifiPermissionsUtil,
440                         mWifiGlobals);
441         mWifiMetrics.setWifiBlocklistMonitor(mWifiBlocklistMonitor);
442         // Config Manager
443         mWifiConfigManager =
444                 new WifiConfigManager(
445                         mContext,
446                         mWifiKeyStore,
447                         mWifiConfigStore,
448                         new NetworkListSharedStoreData(mContext),
449                         new NetworkListUserStoreData(mContext),
450                         new RandomizedMacStoreData(),
451                         mLruConnectionTracker,
452                         this,
453                         mWifiHandler);
454         mSettingsConfigStore = new WifiSettingsConfigStore(context, mWifiHandler,
455                 mSettingsMigrationDataHolder, mWifiConfigManager, mWifiConfigStore);
456         mWifiSettingsBackupRestore = new WifiSettingsBackupRestore(mSettingsConfigStore);
457         mSettingsStore = new WifiSettingsStore(mContext, mSettingsConfigStore, mWifiThreadRunner,
458                 mFrameworkFacade, mWifiNotificationManager, mDeviceConfigFacade,
459                 mWifiMetrics, mClock);
460         mWifiMetrics.setWifiConfigManager(mWifiConfigManager);
461         mWifiMetrics.setWifiSettingsStore(mSettingsStore);
462 
463         mWifiMetrics.setScoringParams(mScoringParams);
464         mThroughputPredictor = new ThroughputPredictor(mContext);
465         mScanRequestProxy = new ScanRequestProxy(mContext,
466                 mContext.getSystemService(AppOpsManager.class),
467                 mContext.getSystemService(ActivityManager.class),
468                 this, mWifiConfigManager, mWifiPermissionsUtil, mWifiMetrics, mClock,
469                 mWifiThreadRunner, mSettingsConfigStore);
470         mWifiBlocklistMonitor.setScanRequestProxy(mScanRequestProxy);
471         mSarManager = new SarManager(mContext, makeTelephonyManager(), wifiLooper,
472                 mWifiNative, mWifiDeviceStateChangeManager);
473         mWifiNetworkSelector = new WifiNetworkSelector(mContext, mWifiScoreCard, mScoringParams,
474                 mWifiConfigManager, mClock, mConnectivityLocalLog, mWifiMetrics, this,
475                 mThroughputPredictor, mWifiChannelUtilizationScan, mWifiGlobals,
476                 mScanRequestProxy, mWifiNative);
477         CompatibilityScorer compatibilityScorer = new CompatibilityScorer(mScoringParams);
478         mWifiNetworkSelector.registerCandidateScorer(compatibilityScorer);
479         ScoreCardBasedScorer scoreCardBasedScorer = new ScoreCardBasedScorer(mScoringParams);
480         mWifiNetworkSelector.registerCandidateScorer(scoreCardBasedScorer);
481         BubbleFunScorer bubbleFunScorer = new BubbleFunScorer(mScoringParams);
482         mWifiNetworkSelector.registerCandidateScorer(bubbleFunScorer);
483         mThroughputScorer = new ThroughputScorer(mContext, mScoringParams);
484         mWifiNetworkSelector.registerCandidateScorer(mThroughputScorer);
485         mWifiMetrics.setWifiNetworkSelector(mWifiNetworkSelector);
486         mWifiNetworkSuggestionsManager = new WifiNetworkSuggestionsManager(mContext, mWifiHandler,
487                 this, mWifiPermissionsUtil, mWifiConfigManager, mWifiConfigStore, mWifiMetrics,
488                 mWifiCarrierInfoManager, mWifiKeyStore, mLruConnectionTracker,
489                 mClock);
490         mPasspointManager = new PasspointManager(mContext, this,
491                 mWifiHandler, mWifiNative, mWifiKeyStore, mClock, new PasspointObjectFactory(),
492                 mWifiConfigManager, mWifiConfigStore, mSettingsStore, mWifiMetrics,
493                 mWifiCarrierInfoManager, mMacAddressUtil, mWifiPermissionsUtil);
494         mNominateHelper =
495                 new PasspointNetworkNominateHelper(mPasspointManager, mWifiConfigManager,
496                         mConnectivityLocalLog, mWifiCarrierInfoManager, mContext.getResources(),
497                         mClock);
498         mPasspointManager.setPasspointNetworkNominateHelper(mNominateHelper);
499         mSavedNetworkNominator = new SavedNetworkNominator(
500                 mWifiConfigManager, mConnectivityLocalLog, mWifiCarrierInfoManager,
501                 mWifiPseudonymManager, mWifiPermissionsUtil, mWifiNetworkSuggestionsManager);
502         mNetworkSuggestionNominator = new NetworkSuggestionNominator(mWifiNetworkSuggestionsManager,
503                 mWifiConfigManager, mConnectivityLocalLog, mWifiCarrierInfoManager,
504                 mWifiPseudonymManager, mWifiMetrics);
505 
506         mWifiMetrics.setPasspointManager(mPasspointManager);
507         WifiChannelUtilization wifiChannelUtilizationConnected =
508                 new WifiChannelUtilization(mClock, mContext);
509         mWifiMetrics.setWifiChannelUtilization(wifiChannelUtilizationConnected);
510         mDefaultClientModeManager = new DefaultClientModeManager();
511         mExternalScoreUpdateObserverProxy =
512                 new ExternalScoreUpdateObserverProxy(mWifiThreadRunner);
513         mDppManager = new DppManager(this, mWifiHandler, mWifiNative,
514                 mWifiConfigManager, mContext, mDppMetrics, mScanRequestProxy, mWifiPermissionsUtil);
515         mActiveModeWarden = new ActiveModeWarden(this, wifiLooper,
516                 mWifiNative, mDefaultClientModeManager, mBatteryStats, mWifiDiagnostics,
517                 mContext, mSettingsStore, mFrameworkFacade, mWifiPermissionsUtil, mWifiMetrics,
518                 mExternalScoreUpdateObserverProxy, mDppManager, mWifiGlobals);
519         mWifiMetrics.setActiveModeWarden(mActiveModeWarden);
520         mWifiHealthMonitor = new WifiHealthMonitor(mContext, this, mClock, mWifiConfigManager,
521             mWifiScoreCard, mWifiHandler, mWifiNative, l2KeySeed, mDeviceConfigFacade,
522             mActiveModeWarden);
523         mWifiDataStall = new WifiDataStall(mWifiMetrics, mContext,
524                 mDeviceConfigFacade, wifiChannelUtilizationConnected, mClock, mWifiHandler,
525                 mThroughputPredictor, mActiveModeWarden, mCmiMonitor, mWifiGlobals);
526         mWifiMetrics.setWifiDataStall(mWifiDataStall);
527         mWifiMetrics.setWifiHealthMonitor(mWifiHealthMonitor);
528         mWifiP2pConnection = new WifiP2pConnection(mContext, wifiLooper, mActiveModeWarden);
529         mConnectHelper = new ConnectHelper(mActiveModeWarden, mWifiConfigManager);
530         mBroadcastQueue = new ClientModeManagerBroadcastQueue(mActiveModeWarden, mContext);
531         mMakeBeforeBreakManager = new MakeBeforeBreakManager(mActiveModeWarden, mFrameworkFacade,
532                 mContext, mCmiMonitor, mBroadcastQueue, mWifiMetrics);
533         mOpenNetworkNotifier = new OpenNetworkNotifier(mContext,
534                 wifiLooper, mFrameworkFacade, mClock, mWifiMetrics,
535                 mWifiConfigManager, mWifiConfigStore, mConnectHelper,
536                 new ConnectToNetworkNotificationBuilder(mContext, mFrameworkFacade),
537                 mMakeBeforeBreakManager, mWifiNotificationManager, mWifiPermissionsUtil);
538         mMultiInternetManager = new MultiInternetManager(mActiveModeWarden, mFrameworkFacade,
539                 mContext, mCmiMonitor, mSettingsStore, mWifiHandler, mClock);
540         mExternalPnoScanRequestManager = new ExternalPnoScanRequestManager(mWifiHandler, mContext);
541         mCountryCode = new WifiCountryCode(mContext, mActiveModeWarden, mWifiP2pMetrics,
542                 mCmiMonitor, mWifiNative, mSettingsConfigStore, mClock, mWifiPermissionsUtil,
543                 mWifiCarrierInfoManager);
544         mWifiConnectivityManager = new WifiConnectivityManager(
545                 mContext, mScoringParams, mWifiConfigManager,
546                 mWifiNetworkSuggestionsManager, mWifiNetworkSelector,
547                 mWifiConnectivityHelper, mWifiLastResortWatchdog, mOpenNetworkNotifier,
548                 mWifiMetrics, mWifiHandler,
549                 mClock, mConnectivityLocalLog, mWifiScoreCard, mWifiBlocklistMonitor,
550                 mWifiChannelUtilizationScan, mPasspointManager, mMultiInternetManager,
551                 mDeviceConfigFacade, mActiveModeWarden, mFrameworkFacade, mWifiGlobals,
552                 mExternalPnoScanRequestManager, mSsidTranslator, mWifiPermissionsUtil,
553                 mWifiCarrierInfoManager, mCountryCode, mWifiDialogManager,
554                 mWifiDeviceStateChangeManager);
555         mMboOceController = new MboOceController(makeTelephonyManager(), mActiveModeWarden,
556                 mWifiThreadRunner);
557         mConnectionFailureNotifier = new ConnectionFailureNotifier(
558                 mContext, mFrameworkFacade, mWifiConfigManager,
559                 mWifiConnectivityManager, mWifiHandler,
560                 mWifiNotificationManager, mConnectionFailureNotificationBuilder,
561                 mWifiDialogManager);
562         mWifiNetworkFactory = new WifiNetworkFactory(
563                 wifiLooper, mContext, REGULAR_NETWORK_CAPABILITIES_FILTER,
564                 (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE),
565                 (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE),
566                 (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE),
567                 mClock, this, mWifiConnectivityManager, mWifiConfigManager,
568                 mWifiConfigStore, mWifiPermissionsUtil, mWifiMetrics, mWifiNative,
569                 mActiveModeWarden, mConnectHelper, mCmiMonitor, mFrameworkFacade,
570                 mMultiInternetManager);
571         // We can't filter untrusted network in the capabilities filter because a trusted
572         // network would still satisfy a request that accepts untrusted ones.
573         // We need a second network factory for untrusted network requests because we need a
574         // different score filter for these requests.
575         mUntrustedWifiNetworkFactory = new UntrustedWifiNetworkFactory(
576                 wifiLooper, mContext, REGULAR_NETWORK_CAPABILITIES_FILTER,
577                 mWifiConnectivityManager);
578         mOemWifiNetworkFactory = new OemWifiNetworkFactory(
579                 wifiLooper, mContext, OEM_NETWORK_CAPABILITIES_FILTER,
580                 mWifiConnectivityManager);
581         mRestrictedWifiNetworkFactory = new RestrictedWifiNetworkFactory(
582                 wifiLooper, mContext, RESTRICTED_NETWORK_CAPABILITIES_FILTER,
583                 mWifiConnectivityManager);
584         mMultiInternetWifiNetworkFactory = new MultiInternetWifiNetworkFactory(
585                 wifiLooper, mContext, REGULAR_NETWORK_CAPABILITIES_FILTER,
586                 mFrameworkFacade, mAlarmManager,
587                 mWifiPermissionsUtil, mMultiInternetManager, mWifiConnectivityManager,
588                 mConnectivityLocalLog);
589         mWifiScanAlwaysAvailableSettingsCompatibility =
590                 new WifiScanAlwaysAvailableSettingsCompatibility(mContext, mWifiHandler,
591                         mSettingsStore, mActiveModeWarden, mFrameworkFacade);
592         mWifiApConfigStore = new WifiApConfigStore(
593                 mContext, this, mWifiHandler, mBackupManagerProxy,
594                 mWifiConfigStore, mWifiConfigManager, mActiveModeWarden, mWifiMetrics);
595         WakeupNotificationFactory wakeupNotificationFactory =
596                 new WakeupNotificationFactory(mContext, mFrameworkFacade);
597         WakeupOnboarding wakeupOnboarding = new WakeupOnboarding(mContext, mWifiConfigManager,
598                 mWifiHandler, mFrameworkFacade, wakeupNotificationFactory,
599                 mWifiNotificationManager);
600         mWakeupController = new WakeupController(mContext, mWifiHandler,
601                 new WakeupLock(mWifiConfigManager, mWifiMetrics.getWakeupMetrics(), mClock),
602                 new WakeupEvaluator(mScoringParams), wakeupOnboarding, mWifiConfigManager,
603                 mWifiConfigStore, mWifiNetworkSuggestionsManager, mWifiMetrics.getWakeupMetrics(),
604                 this, mFrameworkFacade, mClock, mActiveModeWarden);
605         mLockManager = new WifiLockManager(mContext, mBatteryStats, mActiveModeWarden,
606                 mFrameworkFacade, mWifiHandler, mClock, mWifiMetrics, mDeviceConfigFacade,
607                 mWifiPermissionsUtil, mWifiDeviceStateChangeManager);
608         mSelfRecovery = new SelfRecovery(mContext, mActiveModeWarden, mClock, mWifiNative,
609                 mWifiGlobals);
610         mWifiMulticastLockManager = new WifiMulticastLockManager(mActiveModeWarden, mBatteryStats,
611                 wifiLooper, mContext, mClock, mWifiMetrics, mWifiPermissionsUtil);
612         mApplicationQosPolicyRequestHandler = new ApplicationQosPolicyRequestHandler(
613                 mActiveModeWarden, mWifiNative, mWifiHandlerThread, mDeviceConfigFacade, mContext);
614 
615         // Register the various network Nominators with the network selector.
616         mWifiNetworkSelector.registerNetworkNominator(mSavedNetworkNominator);
617         mWifiNetworkSelector.registerNetworkNominator(mNetworkSuggestionNominator);
618 
619         mSimRequiredNotifier = new SimRequiredNotifier(mContext, mFrameworkFacade,
620                 mWifiNotificationManager);
621         mWifiPulledAtomLogger = new WifiPulledAtomLogger(
622                 mContext.getSystemService(StatsManager.class), mWifiHandler,
623                 mContext, this);
624         mAfcLocationUtil = new AfcLocationUtil();
625         mAfcClient = new AfcClient(BackgroundThread.getHandler());
626         mContextWithAttributionTag = new WifiContext(
627                 mContext.createAttributionContext("WifiService"));
628         // The context needs to have an Attribution Tag set to get the current location using
629         // {@link LocationManager#getCurrentLocation}, so we need to pass mContextWithAttributionTag
630         // instead of mContext to the AfcManager.
631         mAfcManager = new AfcManager(mContextWithAttributionTag, this);
632         mWifiRoamingModeManager = new WifiRoamingModeManager(mWifiNative,
633                 mActiveModeWarden, new WifiRoamingConfigStore(mWifiConfigManager,
634                 mWifiConfigStore));
635 
636         mTwtManager = new TwtManager(this, mCmiMonitor, mWifiNative, mWifiHandler, mClock,
637                 WifiTwtSession.MAX_TWT_SESSIONS, 1);
638         mBackupRestoreController = new BackupRestoreController(mWifiSettingsBackupRestore, mClock);
639         if (mFeatureFlags.voipDetectionBugfix() && SdkLevel.isAtLeastV()
640                 && Flags.passCopiedCallStateList() && mContext.getResources().getBoolean(
641                 R.bool.config_wifiVoipDetectionEnabled)) {
642             mWifiVoipDetector = new WifiVoipDetector(mContext, mWifiHandler, this,
643                     mWifiCarrierInfoManager);
644         } else {
645             mWifiVoipDetector = null;
646         }
647         mHasActiveModem = makeTelephonyManager().getActiveModemCount() > 0;
648         if (mFeatureFlags.wepDisabledInApm()) {
649             mWepNetworkUsageController = new WepNetworkUsageController(mWifiHandlerThread,
650                     mWifiDeviceStateChangeManager, mSettingsConfigStore, mWifiGlobals,
651                     mActiveModeWarden, mFeatureFlags);
652         } else {
653             mWepNetworkUsageController = null;
654         }
655     }
656 
657     /**
658      * Obtain an instance of the WifiInjector class.
659      *
660      * This is the generic method to get an instance of the class. The first instance should be
661      * retrieved using the getInstanceWithContext method.
662      */
663     @Keep
getInstance()664     public static WifiInjector getInstance() {
665         if (sWifiInjector == null) {
666             throw new IllegalStateException(
667                     "Attempted to retrieve a WifiInjector instance before constructor was called.");
668         }
669         return sWifiInjector;
670     }
671 
672     /**
673      * Enable verbose logging in Injector objects. Called from the WifiServiceImpl (based on
674      * binder call).
675      */
enableVerboseLogging(boolean verboseEnabled, boolean halVerboseEnabled)676     public void enableVerboseLogging(boolean verboseEnabled, boolean halVerboseEnabled) {
677         Log.i(TAG, "enableVerboseLogging " + verboseEnabled + " hal " + halVerboseEnabled);
678         mVerboseLoggingEnabled = verboseEnabled;
679         mWifiLastResortWatchdog.enableVerboseLogging(verboseEnabled);
680         mWifiBackupRestore.enableVerboseLogging(verboseEnabled);
681         mHalDeviceManager.enableVerboseLogging(verboseEnabled);
682         mScanRequestProxy.enableVerboseLogging(verboseEnabled);
683         mInterfaceConflictManager.enableVerboseLogging(verboseEnabled);
684         mWakeupController.enableVerboseLogging(verboseEnabled);
685         mWifiNetworkSuggestionsManager.enableVerboseLogging(verboseEnabled);
686         LogcatLog.enableVerboseLogging(verboseEnabled);
687         mDppManager.enableVerboseLogging(verboseEnabled);
688         mWifiCarrierInfoManager.enableVerboseLogging(verboseEnabled);
689         mWifiPseudonymManager.enableVerboseLogging(verboseEnabled);
690         mCountryCode.enableVerboseLogging(verboseEnabled);
691         mWifiDiagnostics.enableVerboseLogging(verboseEnabled, halVerboseEnabled);
692         mWifiMonitor.enableVerboseLogging(verboseEnabled);
693         mWifiNative.enableVerboseLogging(verboseEnabled, halVerboseEnabled);
694         mWifiConfigManager.enableVerboseLogging(verboseEnabled);
695         mPasspointManager.enableVerboseLogging(verboseEnabled);
696         mWifiNetworkFactory.enableVerboseLogging(verboseEnabled);
697         mMboOceController.enableVerboseLogging(verboseEnabled);
698         mWifiScoreCard.enableVerboseLogging(verboseEnabled);
699         mWifiHealthMonitor.enableVerboseLogging(verboseEnabled);
700         mThroughputPredictor.enableVerboseLogging(verboseEnabled);
701         mWifiDataStall.enableVerboseLogging(verboseEnabled);
702         mWifiConnectivityManager.enableVerboseLogging(verboseEnabled);
703         mThroughputScorer.enableVerboseLogging(verboseEnabled);
704         mWifiNetworkSelector.enableVerboseLogging(verboseEnabled);
705         mMakeBeforeBreakManager.setVerboseLoggingEnabled(verboseEnabled);
706         mMultiInternetManager.setVerboseLoggingEnabled(verboseEnabled);
707         mBroadcastQueue.setVerboseLoggingEnabled(verboseEnabled);
708         if (SdkLevel.isAtLeastS()) {
709             mCoexManager.enableVerboseLogging(verboseEnabled);
710         }
711         mWifiPermissionsUtil.enableVerboseLogging(verboseEnabled);
712         mWifiDialogManager.enableVerboseLogging(verboseEnabled);
713         mExternalPnoScanRequestManager.enableVerboseLogging(verboseEnabled);
714         mMultiInternetWifiNetworkFactory.enableVerboseLogging(verboseEnabled);
715         mWifiRoamingModeManager.enableVerboseLogging(verboseEnabled);
716         mWifiHandler.enableVerboseLogging(verboseEnabled);
717     }
718 
getUserManager()719     public UserManager getUserManager() {
720         return mUserManager;
721     }
722 
getWifiMetrics()723     public WifiMetrics getWifiMetrics() {
724         return mWifiMetrics;
725     }
726 
getWifiP2pMetrics()727     public WifiP2pMetrics getWifiP2pMetrics() {
728         return mWifiP2pMetrics;
729     }
730 
getSupplicantStaIfaceHal()731     public SupplicantStaIfaceHal getSupplicantStaIfaceHal() {
732         return mSupplicantStaIfaceHal;
733     }
734 
getBackupManagerProxy()735     public BackupManagerProxy getBackupManagerProxy() {
736         return mBackupManagerProxy;
737     }
738 
getFrameworkFacade()739     public FrameworkFacade getFrameworkFacade() {
740         return mFrameworkFacade;
741     }
742 
getPasspointProvisionerHandlerThread()743     public HandlerThread getPasspointProvisionerHandlerThread() {
744         return mPasspointProvisionerHandlerThread;
745     }
746 
getWifiHandlerThread()747     public HandlerThread getWifiHandlerThread() {
748         return mWifiHandlerThread;
749     }
750 
getMockWifiServiceUtil()751     public MockWifiServiceUtil getMockWifiServiceUtil() {
752         return mMockWifiModem;
753     }
754 
setMockWifiServiceUtil(MockWifiServiceUtil mockWifiServiceUtil)755     public void setMockWifiServiceUtil(MockWifiServiceUtil mockWifiServiceUtil) {
756         mMockWifiModem = mockWifiServiceUtil;
757     }
758 
getWifiTrafficPoller()759     public WifiTrafficPoller getWifiTrafficPoller() {
760         return mWifiTrafficPoller;
761     }
762 
getWifiCountryCode()763     public WifiCountryCode getWifiCountryCode() {
764         return mCountryCode;
765     }
766 
getWifiApConfigStore()767     public WifiApConfigStore getWifiApConfigStore() {
768         return mWifiApConfigStore;
769     }
770 
getSarManager()771     public SarManager getSarManager() {
772         return mSarManager;
773     }
774     @Keep
getActiveModeWarden()775     public ActiveModeWarden getActiveModeWarden() {
776         return mActiveModeWarden;
777     }
778 
getWifiSettingsStore()779     public WifiSettingsStore getWifiSettingsStore() {
780         return mSettingsStore;
781     }
782 
getWifiLockManager()783     public WifiLockManager getWifiLockManager() {
784         return mLockManager;
785     }
786 
getWifiLastResortWatchdog()787     public WifiLastResortWatchdog getWifiLastResortWatchdog() {
788         return mWifiLastResortWatchdog;
789     }
790 
getClock()791     public Clock getClock() {
792         return mClock;
793     }
794 
getWifiBackupRestore()795     public WifiBackupRestore getWifiBackupRestore() {
796         return mWifiBackupRestore;
797     }
798 
getSoftApBackupRestore()799     public SoftApBackupRestore getSoftApBackupRestore() {
800         return mSoftApBackupRestore;
801     }
802 
getWifiMulticastLockManager()803     public WifiMulticastLockManager getWifiMulticastLockManager() {
804         return mWifiMulticastLockManager;
805     }
806     @Keep
getWifiConfigManager()807     public WifiConfigManager getWifiConfigManager() {
808         return mWifiConfigManager;
809     }
810 
getPasspointManager()811     public PasspointManager getPasspointManager() {
812         return mPasspointManager;
813     }
814 
getWakeupController()815     public WakeupController getWakeupController() {
816         return mWakeupController;
817     }
818 
getScoringParams()819     public ScoringParams getScoringParams() {
820         return mScoringParams;
821     }
822 
getWifiScoreCard()823     public WifiScoreCard getWifiScoreCard() {
824         return mWifiScoreCard;
825     }
826 
makeTelephonyManager()827     public TelephonyManager makeTelephonyManager() {
828         return mContext.getSystemService(TelephonyManager.class);
829     }
830 
831     /**
832      * Returns BatteryManager service
833      */
makeBatteryManager()834     public BatteryManager makeBatteryManager() {
835         return mContext.getSystemService(BatteryManager.class);
836     }
837 
838     @Keep
getWifiCarrierInfoManager()839     public WifiCarrierInfoManager getWifiCarrierInfoManager() {
840         return mWifiCarrierInfoManager;
841     }
842 
getWifiPseudonymManager()843     public WifiPseudonymManager getWifiPseudonymManager() {
844         return mWifiPseudonymManager;
845     }
846 
getDppManager()847     public DppManager getDppManager() {
848         return mDppManager;
849     }
850 
851     /**
852      * Create a WifiShellCommand.
853      *
854      * @param wifiService WifiServiceImpl object shell commands get sent to.
855      * @return an instance of WifiShellCommand
856      */
makeWifiShellCommand(WifiServiceImpl wifiService)857     public WifiShellCommand makeWifiShellCommand(WifiServiceImpl wifiService) {
858         return new WifiShellCommand(this, wifiService, mContext,
859                 mWifiGlobals, mWifiThreadRunner);
860     }
861 
862     /**
863      * Create a SoftApManager.
864      *
865      * @param config SoftApModeConfiguration object holding the config and mode
866      * @return an instance of SoftApManager
867      */
makeSoftApManager( @onNull ActiveModeManager.Listener<SoftApManager> listener, @NonNull WifiServiceImpl.SoftApCallbackInternal callback, @NonNull SoftApModeConfiguration config, @NonNull WorkSource requestorWs, @NonNull ActiveModeManager.SoftApRole role, boolean verboseLoggingEnabled)868     public SoftApManager makeSoftApManager(
869             @NonNull ActiveModeManager.Listener<SoftApManager> listener,
870             @NonNull WifiServiceImpl.SoftApCallbackInternal callback,
871             @NonNull SoftApModeConfiguration config,
872             @NonNull WorkSource requestorWs,
873             @NonNull ActiveModeManager.SoftApRole role,
874             boolean verboseLoggingEnabled) {
875         return new SoftApManager(mContext, mWifiHandlerThread.getLooper(), mFrameworkFacade,
876                 mWifiNative, this, mCoexManager, mInterfaceConflictManager,
877                 listener, callback, mWifiApConfigStore,
878                 config, mWifiMetrics, mSarManager, mWifiDiagnostics,
879                 new SoftApNotifier(mContext, mFrameworkFacade, mWifiNotificationManager),
880                 mCmiMonitor, mActiveModeWarden, mClock.getElapsedSinceBootMillis(),
881                 requestorWs, role, verboseLoggingEnabled);
882     }
883 
884     /**
885      * Create a ClientModeImpl
886      * @param ifaceName interface name for the ClientModeImpl
887      * @param clientModeManager ClientModeManager that will own the ClientModeImpl
888      */
makeClientModeImpl( @onNull String ifaceName, @NonNull ConcreteClientModeManager clientModeManager, boolean verboseLoggingEnabled)889     public ClientModeImpl makeClientModeImpl(
890             @NonNull String ifaceName,
891             @NonNull ConcreteClientModeManager clientModeManager,
892             boolean verboseLoggingEnabled) {
893         ExtendedWifiInfo wifiInfo = new ExtendedWifiInfo(mWifiGlobals, ifaceName);
894         SupplicantStateTracker supplicantStateTracker = new SupplicantStateTracker(
895                 mContext, mWifiConfigManager, mBatteryStats, mWifiHandlerThread.getLooper(),
896                 mWifiMonitor, ifaceName, clientModeManager, mBroadcastQueue);
897         supplicantStateTracker.enableVerboseLogging(verboseLoggingEnabled);
898         return new ClientModeImpl(mContext, mWifiMetrics, mClock,
899                 mWifiScoreCard, mWifiStateTracker, mWifiPermissionsUtil, mWifiConfigManager,
900                 mPasspointManager, mWifiMonitor, mWifiDiagnostics,
901                 mWifiDataStall, mScoringParams, mWifiThreadRunner,
902                 mWifiNetworkSuggestionsManager, mWifiHealthMonitor, mThroughputPredictor,
903                 mDeviceConfigFacade, mScanRequestProxy, wifiInfo, mWifiConnectivityManager,
904                 mWifiBlocklistMonitor, mConnectionFailureNotifier,
905                 REGULAR_NETWORK_CAPABILITIES_FILTER, mWifiNetworkFactory,
906                 mUntrustedWifiNetworkFactory, mOemWifiNetworkFactory, mRestrictedWifiNetworkFactory,
907                 mMultiInternetManager, mWifiLastResortWatchdog, mWakeupController,
908                 mLockManager, mFrameworkFacade, mWifiHandlerThread.getLooper(),
909                 mWifiNative, new WrongPasswordNotifier(mContext, mFrameworkFacade,
910                 mWifiNotificationManager),
911                 mWifiTrafficPoller, mClock.getElapsedSinceBootMillis(),
912                 mBatteryStats, supplicantStateTracker, mMboOceController, mWifiCarrierInfoManager,
913                 mWifiPseudonymManager,
914                 new EapFailureNotifier(mContext, mFrameworkFacade, mWifiCarrierInfoManager,
915                         mWifiNotificationManager, mWifiGlobals),
916                 mSimRequiredNotifier,
917                 new WifiScoreReport(mScoringParams, mClock, mWifiMetrics, wifiInfo,
918                         mWifiNative, mWifiBlocklistMonitor, mWifiThreadRunner, mWifiScoreCard,
919                         mDeviceConfigFacade, mContext, mAdaptiveConnectivityEnabledSettingObserver,
920                         ifaceName, mExternalScoreUpdateObserverProxy, mSettingsStore, mWifiGlobals,
921                         mActiveModeWarden, mWifiConnectivityManager, mWifiConfigManager),
922                 mWifiP2pConnection, mWifiGlobals, ifaceName, clientModeManager,
923                 mCmiMonitor, mBroadcastQueue, mWifiNetworkSelector, makeTelephonyManager(),
924                 this, mSettingsConfigStore, verboseLoggingEnabled, mWifiNotificationManager,
925                 mWifiConnectivityHelper);
926     }
927 
makeWifiNetworkAgent( @onNull NetworkCapabilities nc, @NonNull LinkProperties linkProperties, @NonNull NetworkAgentConfig naConfig, @Nullable NetworkProvider provider, @NonNull WifiNetworkAgent.Callback callback)928     public WifiNetworkAgent makeWifiNetworkAgent(
929             @NonNull NetworkCapabilities nc,
930             @NonNull LinkProperties linkProperties,
931             @NonNull NetworkAgentConfig naConfig,
932             @Nullable NetworkProvider provider,
933             @NonNull WifiNetworkAgent.Callback callback) {
934         return new WifiNetworkAgent(mContext, mWifiHandlerThread.getLooper(),
935                 nc, linkProperties, naConfig, provider, callback);
936     }
937 
938     /**
939      * Create a ClientModeManager
940      *
941      * @param listener listener for ClientModeManager state changes
942      * @return a new instance of ClientModeManager
943      */
makeClientModeManager( @onNull ClientModeManager.Listener<ConcreteClientModeManager> listener, @NonNull WorkSource requestorWs, @NonNull ActiveModeManager.ClientRole role, boolean verboseLoggingEnabled)944     public ConcreteClientModeManager makeClientModeManager(
945             @NonNull ClientModeManager.Listener<ConcreteClientModeManager> listener,
946             @NonNull WorkSource requestorWs,
947             @NonNull ActiveModeManager.ClientRole role,
948             boolean verboseLoggingEnabled) {
949         return new ConcreteClientModeManager(
950                 mContext, mWifiHandlerThread.getLooper(), mClock,
951                 mWifiNative, listener, mWifiMetrics, mWakeupController,
952                 this, mSelfRecovery, mWifiGlobals, mDefaultClientModeManager,
953                 mClock.getElapsedSinceBootMillis(), requestorWs, role, mBroadcastQueue,
954                 verboseLoggingEnabled);
955     }
956 
makeScanOnlyModeImpl(@onNull String ifaceName)957     public ScanOnlyModeImpl makeScanOnlyModeImpl(@NonNull String ifaceName) {
958         return new ScanOnlyModeImpl(mClock.getElapsedSinceBootMillis(), mWifiNative, ifaceName);
959     }
960 
961     /**
962      * Create a WifiLog instance.
963      *
964      * @param tag module name to include in all log messages
965      */
makeLog(String tag)966     public WifiLog makeLog(String tag) {
967         return new LogcatLog(tag);
968     }
969 
970     /**
971      * Obtain an instance of WifiScanner.
972      * If it was not already created, then obtain an instance.  Note, this must be done lazily since
973      * WifiScannerService is separate and created later.
974      */
getWifiScanner()975     public synchronized WifiScanner getWifiScanner() {
976         if (mWifiScanner == null) {
977             mWifiScanner = mContext.getSystemService(WifiScanner.class);
978         }
979         return mWifiScanner;
980     }
981 
982     /**
983      * Construct an instance of {@link NetworkRequestStoreData}.
984      */
makeNetworkRequestStoreData( NetworkRequestStoreData.DataSource dataSource)985     public NetworkRequestStoreData makeNetworkRequestStoreData(
986             NetworkRequestStoreData.DataSource dataSource) {
987         return new NetworkRequestStoreData(dataSource);
988     }
989 
990     /**
991      * Construct an instance of {@link NetworkSuggestionStoreData}.
992      */
makeNetworkSuggestionStoreData( NetworkSuggestionStoreData.DataSource dataSource)993     public NetworkSuggestionStoreData makeNetworkSuggestionStoreData(
994             NetworkSuggestionStoreData.DataSource dataSource) {
995         return new NetworkSuggestionStoreData(dataSource);
996     }
997 
998     /**
999      * Construct an instance of {@link WifiCarrierInfoStoreManagerData}
1000      */
makeWifiCarrierInfoStoreManagerData( WifiCarrierInfoStoreManagerData.DataSource dataSource)1001     public WifiCarrierInfoStoreManagerData makeWifiCarrierInfoStoreManagerData(
1002             WifiCarrierInfoStoreManagerData.DataSource dataSource) {
1003         return new WifiCarrierInfoStoreManagerData(dataSource);
1004     }
1005 
1006     /**
1007      * Construct an instance of {@link ImsiPrivacyProtectionExemptionStoreData}
1008      */
makeImsiPrivacyProtectionExemptionStoreData( ImsiPrivacyProtectionExemptionStoreData.DataSource dataSource)1009     public ImsiPrivacyProtectionExemptionStoreData makeImsiPrivacyProtectionExemptionStoreData(
1010             ImsiPrivacyProtectionExemptionStoreData.DataSource dataSource) {
1011         return new ImsiPrivacyProtectionExemptionStoreData(dataSource);
1012     }
1013 
1014     /**
1015      * Construct an instance of {@link SoftApStoreData}.
1016      */
makeSoftApStoreData( SoftApStoreData.DataSource dataSource)1017     public SoftApStoreData makeSoftApStoreData(
1018             SoftApStoreData.DataSource dataSource) {
1019         return new SoftApStoreData(mContext, mSettingsMigrationDataHolder, dataSource);
1020     }
1021 
getWifiPermissionsUtil()1022     public WifiPermissionsUtil getWifiPermissionsUtil() {
1023         return mWifiPermissionsUtil;
1024     }
1025 
getWifiPermissionsWrapper()1026     public WifiPermissionsWrapper getWifiPermissionsWrapper() {
1027         return mWifiPermissionsWrapper;
1028     }
1029 
getMacAddressUtil()1030     public MacAddressUtil getMacAddressUtil() {
1031         return mMacAddressUtil;
1032     }
1033 
1034     /**
1035      * Returns a single instance of HalDeviceManager for injection.
1036      */
getHalDeviceManager()1037     public HalDeviceManager getHalDeviceManager() {
1038         return mHalDeviceManager;
1039     }
1040 
1041     @Keep
getWifiNative()1042     public WifiNative getWifiNative() {
1043         return mWifiNative;
1044     }
1045 
1046     @Keep
getWifiMonitor()1047     public WifiMonitor getWifiMonitor() {
1048         return mWifiMonitor;
1049     }
1050 
1051     @Keep
getWifiP2pNative()1052     public WifiP2pNative getWifiP2pNative() {
1053         return mWifiP2pNative;
1054     }
1055 
1056     /**
1057      * Returns a single instance of CoexManager for injection.
1058      * This will be null if SdkLevel is not at least S.
1059      */
getCoexManager()1060     @Nullable public CoexManager getCoexManager() {
1061         return mCoexManager;
1062     }
1063 
getWifiP2pMonitor()1064     public WifiP2pMonitor getWifiP2pMonitor() {
1065         return mWifiP2pMonitor;
1066     }
1067 
getSelfRecovery()1068     public SelfRecovery getSelfRecovery() {
1069         return mSelfRecovery;
1070     }
1071 
1072     @Keep
getScanRequestProxy()1073     public ScanRequestProxy getScanRequestProxy() {
1074         return mScanRequestProxy;
1075     }
1076 
getJavaRuntime()1077     public Runtime getJavaRuntime() {
1078         return Runtime.getRuntime();
1079     }
1080 
getWifiDataStall()1081     public WifiDataStall getWifiDataStall() {
1082         return mWifiDataStall;
1083     }
1084 
getWifiPulledAtomLogger()1085     public WifiPulledAtomLogger getWifiPulledAtomLogger() {
1086         return mWifiPulledAtomLogger;
1087     }
1088 
getWifiNetworkSuggestionsManager()1089     public WifiNetworkSuggestionsManager getWifiNetworkSuggestionsManager() {
1090         return mWifiNetworkSuggestionsManager;
1091     }
1092 
getIpMemoryStore()1093     public IpMemoryStore getIpMemoryStore() {
1094         if (mIpMemoryStore == null) {
1095             mIpMemoryStore = IpMemoryStore.getMemoryStore(mContext);
1096         }
1097         return mIpMemoryStore;
1098     }
1099 
getWifiBlocklistMonitor()1100     public WifiBlocklistMonitor getWifiBlocklistMonitor() {
1101         return mWifiBlocklistMonitor;
1102     }
1103 
getHostapdHal()1104     public HostapdHal getHostapdHal() {
1105         return mHostapdHal;
1106     }
1107 
1108     @Keep
getWifiThreadRunner()1109     public WifiThreadRunner getWifiThreadRunner() {
1110         return mWifiThreadRunner;
1111     }
1112 
makeNetdWrapper()1113     public NetdWrapper makeNetdWrapper() {
1114         if (mNetdWrapper == null) {
1115             mNetdWrapper = new NetdWrapper(mContext, new Handler(mWifiHandlerThread.getLooper()));
1116         }
1117         return mNetdWrapper;
1118     }
1119 
getWifiCondManager()1120     public WifiNl80211Manager getWifiCondManager() {
1121         return mWifiCondManager;
1122     }
1123 
getWifiHealthMonitor()1124     public WifiHealthMonitor getWifiHealthMonitor() {
1125         return mWifiHealthMonitor;
1126     }
1127 
getSettingsConfigStore()1128     public WifiSettingsConfigStore getSettingsConfigStore() {
1129         return mSettingsConfigStore;
1130     }
1131 
1132     @NonNull
getWifiSettingsBackupRestore()1133     public WifiSettingsBackupRestore getWifiSettingsBackupRestore() {
1134         return mWifiSettingsBackupRestore;
1135     }
1136 
1137     public WifiScanAlwaysAvailableSettingsCompatibility
getWifiScanAlwaysAvailableSettingsCompatibility()1138             getWifiScanAlwaysAvailableSettingsCompatibility() {
1139         return mWifiScanAlwaysAvailableSettingsCompatibility;
1140     }
1141 
getDeviceConfigFacade()1142     public DeviceConfigFacade getDeviceConfigFacade() {
1143         return mDeviceConfigFacade;
1144     }
1145 
getWifiConnectivityManager()1146     public WifiConnectivityManager getWifiConnectivityManager() {
1147         return mWifiConnectivityManager;
1148     }
1149 
getConnectHelper()1150     public ConnectHelper getConnectHelper() {
1151         return mConnectHelper;
1152     }
1153 
1154     @Keep
getWifiNetworkFactory()1155     public WifiNetworkFactory getWifiNetworkFactory() {
1156         return mWifiNetworkFactory;
1157     }
1158 
getUntrustedWifiNetworkFactory()1159     public UntrustedWifiNetworkFactory getUntrustedWifiNetworkFactory() {
1160         return mUntrustedWifiNetworkFactory;
1161     }
1162 
getOemWifiNetworkFactory()1163     public OemWifiNetworkFactory getOemWifiNetworkFactory() {
1164         return mOemWifiNetworkFactory;
1165     }
1166 
getRestrictedWifiNetworkFactory()1167     public RestrictedWifiNetworkFactory getRestrictedWifiNetworkFactory() {
1168         return mRestrictedWifiNetworkFactory;
1169     }
1170 
getMultiInternetWifiNetworkFactory()1171     public MultiInternetWifiNetworkFactory getMultiInternetWifiNetworkFactory() {
1172         return mMultiInternetWifiNetworkFactory;
1173     }
1174 
getWifiDiagnostics()1175     public WifiDiagnostics getWifiDiagnostics() {
1176         return mWifiDiagnostics;
1177     }
1178 
getWifiP2pConnection()1179     public WifiP2pConnection getWifiP2pConnection() {
1180         return mWifiP2pConnection;
1181     }
1182 
1183     @Keep
getWifiGlobals()1184     public WifiGlobals getWifiGlobals() {
1185         return mWifiGlobals;
1186     }
1187 
getSimRequiredNotifier()1188     public SimRequiredNotifier getSimRequiredNotifier() {
1189         return mSimRequiredNotifier;
1190     }
1191 
1192     /**
1193      * Useful for mocking {@link WorkSourceHelper} instance in {@link HalDeviceManager} unit tests.
1194      */
makeWsHelper(@onNull WorkSource ws)1195     public WorkSourceHelper makeWsHelper(@NonNull WorkSource ws) {
1196         return new WorkSourceHelper(ws, mWifiPermissionsUtil,
1197                 mContext.getSystemService(ActivityManager.class), mContext.getPackageManager(),
1198                 mContext.getResources());
1199     }
1200 
1201     public AdaptiveConnectivityEnabledSettingObserver
getAdaptiveConnectivityEnabledSettingObserver()1202             getAdaptiveConnectivityEnabledSettingObserver() {
1203         return mAdaptiveConnectivityEnabledSettingObserver;
1204     }
1205 
1206     /**
1207      * Creates a BroadcastOptions.
1208      */
1209     // TODO(b/193460475): Remove when tooling supports SystemApi to public API.
1210     @SuppressLint("NewApi")
makeBroadcastOptions()1211     public BroadcastOptions makeBroadcastOptions() {
1212         return BroadcastOptions.makeBasic();
1213     }
1214 
getMakeBeforeBreakManager()1215     public MakeBeforeBreakManager getMakeBeforeBreakManager() {
1216         return mMakeBeforeBreakManager;
1217     }
1218 
getOpenNetworkNotifier()1219     public OpenNetworkNotifier getOpenNetworkNotifier() {
1220         return mOpenNetworkNotifier;
1221     }
1222 
getWifiNotificationManager()1223     public WifiNotificationManager getWifiNotificationManager() {
1224         return mWifiNotificationManager;
1225     }
1226 
getInterfaceConflictManager()1227     public InterfaceConflictManager getInterfaceConflictManager() {
1228         return mInterfaceConflictManager;
1229     }
1230 
getLastCallerInfoManager()1231     public LastCallerInfoManager getLastCallerInfoManager() {
1232         return mLastCallerInfoManager;
1233     }
1234 
1235     @NonNull
getWifiDialogManager()1236     public WifiDialogManager getWifiDialogManager() {
1237         return mWifiDialogManager;
1238     }
1239 
1240     @NonNull
getSsidTranslator()1241     public SsidTranslator getSsidTranslator() {
1242         return mSsidTranslator;
1243     }
1244 
getBuildProperties()1245     public BuildProperties getBuildProperties() {
1246         return mBuildProperties;
1247     }
1248 
getDefaultClientModeManager()1249     public DefaultClientModeManager getDefaultClientModeManager() {
1250         return mDefaultClientModeManager;
1251     }
1252 
getMultiInternetManager()1253     public MultiInternetManager getMultiInternetManager() {
1254         return mMultiInternetManager;
1255     }
1256 
getAfcManager()1257     public AfcManager getAfcManager() {
1258         return mAfcManager;
1259     }
1260 
getContext()1261     public WifiContext getContext() {
1262         return mContext;
1263     }
1264 
getContextWithAttributionTag()1265     public WifiContext getContextWithAttributionTag() {
1266         return mContextWithAttributionTag;
1267     }
1268 
getAfcLocationUtil()1269     public AfcLocationUtil getAfcLocationUtil() {
1270         return mAfcLocationUtil;
1271     }
1272 
getAfcClient()1273     public AfcClient getAfcClient() {
1274         return mAfcClient;
1275     }
1276 
1277     /**
1278      * Creates a BufferedReader for the given filename. Useful for unit tests that depend on IO.
1279      */
1280     @NonNull
createBufferedReader(String filename)1281     public BufferedReader createBufferedReader(String filename) throws FileNotFoundException {
1282         return new BufferedReader(new FileReader(filename));
1283     }
1284 
1285     @NonNull
getWifiHandlerLocalLog()1286     public LocalLog getWifiHandlerLocalLog() {
1287         return mWifiHandlerLocalLog;
1288     }
1289 
1290     @NonNull
getWifiKeyStore()1291     public WifiKeyStore getWifiKeyStore() {
1292         return mWifiKeyStore;
1293     }
1294 
1295     @NonNull
getApplicationQosPolicyRequestHandler()1296     public ApplicationQosPolicyRequestHandler getApplicationQosPolicyRequestHandler() {
1297         return mApplicationQosPolicyRequestHandler;
1298     }
1299 
1300     @NonNull
getWifiDeviceStateChangeManager()1301     public WifiDeviceStateChangeManager getWifiDeviceStateChangeManager() {
1302         return mWifiDeviceStateChangeManager;
1303     }
1304 
1305     @NonNull
getPasspointNetworkNominateHelper()1306     public PasspointNetworkNominateHelper getPasspointNetworkNominateHelper() {
1307         return mNominateHelper;
1308     }
1309 
1310     @NonNull
getAlarmManager()1311     public AlarmManager getAlarmManager() {
1312         return mAlarmManager;
1313     }
1314 
getWifiRoamingModeManager()1315     public WifiRoamingModeManager getWifiRoamingModeManager() {
1316         return mWifiRoamingModeManager;
1317     }
1318 
getTwtManager()1319     public TwtManager getTwtManager() {
1320         return mTwtManager;
1321     }
1322 
1323     @NonNull
getBackupRestoreController()1324     public BackupRestoreController getBackupRestoreController() {
1325         return mBackupRestoreController;
1326     }
1327 
1328     @Nullable
getWifiVoipDetector()1329     public WifiVoipDetector getWifiVoipDetector() {
1330         return mWifiVoipDetector;
1331     }
1332 
1333     /**
1334      * Return true if there is any active modem on the device.
1335      */
hasActiveModem()1336     public boolean hasActiveModem() {
1337         return mHasActiveModem;
1338     }
1339 
1340     /**
1341      * Check if verbose logging enabled
1342      */
isVerboseLoggingEnabled()1343     public boolean isVerboseLoggingEnabled() {
1344         return mVerboseLoggingEnabled;
1345     }
1346 
1347     @Nullable
getWepNetworkUsageController()1348     public WepNetworkUsageController getWepNetworkUsageController() {
1349         return mWepNetworkUsageController;
1350     }
1351 }
1352