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