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