WifiInjector.java revision e699623dae17803bc8fb5dd56b3d6b17f64f9cc7
19e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/* 264c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath * Copyright (C) 2016 The Android Open Source Project 39e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 49e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * you may not use this file except in compliance with the License. 69e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * You may obtain a copy of the License at 79e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 89e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 909eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes * 1009eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes * Unless required by applicable law or agreed to in writing, software 1109eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath * See the License for the specific language governing permissions and 1464c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath * limitations under the License. 1564c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath */ 1664c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath 1704351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughespackage com.android.server.wifi; 1864c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath 1964c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.app.ActivityManager; 2064c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.content.Context; 2164c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.net.NetworkKey; 2264c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.net.NetworkScoreManager; 2364c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.net.wifi.IApInterface; 2464c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.net.wifi.IWifiScanner; 2564c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.net.wifi.IWificond; 2664c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.net.wifi.WifiConfiguration; 2764c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamathimport android.net.wifi.WifiInfo; 289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.net.wifi.WifiNetworkScoreCache; 299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.net.wifi.WifiScanner; 309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.BatteryStats; 319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.HandlerThread; 329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.IBinder; 339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.INetworkManagementService; 349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.Looper; 359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.ServiceManager; 369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.SystemProperties; 379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.os.UserManager; 389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.security.KeyStore; 399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport android.telephony.TelephonyManager; 40381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesimport android.util.LocalLog; 419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.internal.R; 439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.internal.app.IBatteryStats; 449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.am.BatteryStatsService; 459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.net.DelayedDiskWrite; 46381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesimport com.android.server.net.IpConfigStore; 479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.aware.WifiAwareMetrics; 489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.hotspot2.LegacyPasspointConfigParser; 499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.hotspot2.PasspointManager; 509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.hotspot2.PasspointNetworkEvaluator; 519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.hotspot2.PasspointObjectFactory; 52381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesimport com.android.server.wifi.p2p.SupplicantP2pIfaceHal; 539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.p2p.WifiP2pMonitor; 549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.p2p.WifiP2pNative; 559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.util.WifiPermissionsUtil; 569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectimport com.android.server.wifi.util.WifiPermissionsWrapper; 579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 58381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes/** 599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * WiFi dependency injector. To be used for accessing various WiFi class instances and as a 609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * handle for mock injection. 619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Some WiFi class instances currently depend on having a Looper from a HandlerThread that has 639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * been started. To accommodate this, we have a two-phased approach to initialize and retrieve 6464c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath * an instance of the WifiInjector. 659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectpublic class WifiInjector { 679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private static final String BOOT_DEFAULT_WIFI_COUNTRY_CODE = "ro.boot.wificountrycode"; 689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private static final String WIFICOND_SERVICE_NAME = "wificond"; 699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project static WifiInjector sWifiInjector = null; 719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final Context mContext; 739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final FrameworkFacade mFrameworkFacade = new FrameworkFacade(); 749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final HandlerThread mWifiServiceHandlerThread; 759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final HandlerThread mWifiStateMachineHandlerThread; 769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiTrafficPoller mTrafficPoller; 779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiCountryCode mCountryCode; 789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final BackupManagerProxy mBackupManagerProxy = new BackupManagerProxy(); 799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiApConfigStore mWifiApConfigStore; 809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiNative mWifiNative; 819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiMonitor mWifiMonitor; 829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiP2pNative mWifiP2pNative; 839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiP2pMonitor mWifiP2pMonitor; 849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final SupplicantStaIfaceHal mSupplicantStaIfaceHal; 859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final SupplicantP2pIfaceHal mSupplicantP2pIfaceHal; 869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiVendorHal mWifiVendorHal; 879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiStateMachine mWifiStateMachine; 889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiSettingsStore mSettingsStore; 899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiCertManager mCertManager; 909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiNotificationController mNotificationController; 9109eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiLockManager mLockManager; 9209eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiController mWifiController; 9309eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WificondControl mWificondControl; 9409eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final Clock mClock = new Clock(); 9509eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiMetrics mWifiMetrics; 9609eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiLastResortWatchdog mWifiLastResortWatchdog; 9709eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final PropertyService mPropertyService = new SystemPropertyService(); 9809eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final BuildProperties mBuildProperties = new SystemBuildProperties(); 9909eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final KeyStore mKeyStore = KeyStore.getInstance(); 10009eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiBackupRestore mWifiBackupRestore; 10109eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiMulticastLockManager mWifiMulticastLockManager; 1029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiConfigStore mWifiConfigStore; 10309eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiKeyStore mWifiKeyStore; 10409eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiNetworkHistory mWifiNetworkHistory; 10509eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final IpConfigStore mIpConfigStore; 10609eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiConfigStoreLegacy mWifiConfigStoreLegacy; 10709eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiConfigManager mWifiConfigManager; 10809eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiConnectivityHelper mWifiConnectivityHelper; 10909eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final LocalLog mConnectivityLocalLog; 11009eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final WifiNetworkSelector mWifiNetworkSelector; 11109eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final SavedNetworkEvaluator mSavedNetworkEvaluator; 11209eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final PasspointNetworkEvaluator mPasspointNetworkEvaluator; 11309eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final ScoredNetworkEvaluator mScoredNetworkEvaluator; 1149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiNetworkScoreCache mWifiNetworkScoreCache; 11509eb358bbbb9aad3fe48dd3368c8a7a481cbda1cElliott Hughes private final NetworkScoreManager mNetworkScoreManager; 1169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private WifiScanner mWifiScanner; 1179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiPermissionsWrapper mWifiPermissionsWrapper; 11864c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath private final WifiPermissionsUtil mWifiPermissionsUtil; 11964c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath private final PasspointManager mPasspointManager; 1209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final SIMAccessor mSimAccessor; 1219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private HandlerThread mWifiAwareHandlerThread; 1229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private HalDeviceManager mHalDeviceManager; 123381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes private final IBatteryStats mBatteryStats; 1249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final WifiStateTracker mWifiStateTracker; 125381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes private final Runtime mJavaRuntime; 1269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final SelfRecovery mSelfRecovery; 1279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private final boolean mUseRealLogger; 1299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiInjector(Context context) { 1319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (context == null) { 1329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project throw new IllegalStateException( 1339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project "WifiInjector should not be initialized with a null Context."); 1349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (sWifiInjector != null) { 1379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project throw new IllegalStateException( 1389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project "WifiInjector was already created, use getInstance instead."); 1399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project sWifiInjector = this; 1429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mContext = context; 1449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mUseRealLogger = mContext.getResources().getBoolean( 1459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project R.bool.config_wifi_enable_wifi_firmware_debugging); 1469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mSettingsStore = new WifiSettingsStore(mContext); 1479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiPermissionsWrapper = new WifiPermissionsWrapper(mContext); 1489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mNetworkScoreManager = mContext.getSystemService(NetworkScoreManager.class); 1499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNetworkScoreCache = new WifiNetworkScoreCache(mContext); 1509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mNetworkScoreManager.registerNetworkScoreCache(NetworkKey.TYPE_WIFI, 1519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNetworkScoreCache, NetworkScoreManager.CACHE_FILTER_NONE); 152381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes mWifiPermissionsUtil = new WifiPermissionsUtil(mWifiPermissionsWrapper, mContext, 1539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mSettingsStore, UserManager.get(mContext), mNetworkScoreManager, this); 1549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiBackupRestore = new WifiBackupRestore(mWifiPermissionsUtil); 1559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mBatteryStats = IBatteryStats.Stub.asInterface(mFrameworkFacade.getService( 1569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project BatteryStats.SERVICE_NAME)); 1579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiStateTracker = new WifiStateTracker(mBatteryStats); 1589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Now create and start handler threads 1599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiServiceHandlerThread = new HandlerThread("WifiService"); 1609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiServiceHandlerThread.start(); 1619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiStateMachineHandlerThread = new HandlerThread("WifiStateMachine"); 1629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiStateMachineHandlerThread.start(); 163381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes Looper wifiStateMachineLooper = mWifiStateMachineHandlerThread.getLooper(); 1649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WifiAwareMetrics awareMetrics = new WifiAwareMetrics(mClock); 1659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiMetrics = new WifiMetrics(mClock, wifiStateMachineLooper, awareMetrics); 1669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Modules interacting with Native. 1679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiMonitor = new WifiMonitor(this); 1689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mHalDeviceManager = new HalDeviceManager(); 1699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiVendorHal = 1709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project new WifiVendorHal(mHalDeviceManager, mWifiStateMachineHandlerThread.getLooper()); 1719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mSupplicantStaIfaceHal = new SupplicantStaIfaceHal(mContext, mWifiMonitor); 1729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWificondControl = new WificondControl(this, mWifiMonitor, 1739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project new CarrierNetworkConfig(mContext)); 1749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNative = new WifiNative(SystemProperties.get("wifi.interface", "wlan0"), 1759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiVendorHal, mSupplicantStaIfaceHal, mWificondControl); 176381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes mWifiP2pMonitor = new WifiP2pMonitor(this); 1779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mSupplicantP2pIfaceHal = new SupplicantP2pIfaceHal(mWifiP2pMonitor); 1789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiP2pNative = new WifiP2pNative(SystemProperties.get("wifi.direct.interface", "p2p0"), 1799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mSupplicantP2pIfaceHal); 1809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Now get instances of all the objects that depend on the HandlerThreads 1829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mTrafficPoller = new WifiTrafficPoller(mContext, mWifiServiceHandlerThread.getLooper(), 1839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNative.getInterfaceName()); 1849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mCountryCode = new WifiCountryCode(mWifiNative, 1859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project SystemProperties.get(BOOT_DEFAULT_WIFI_COUNTRY_CODE), 1869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mContext.getResources() 187ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes .getBoolean(R.bool.config_wifi_revert_country_code_on_cellular_loss)); 1889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiApConfigStore = new WifiApConfigStore(mContext, mBackupManagerProxy); 1899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // WifiConfigManager/Store objects and their dependencies. 1919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // New config store 1929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiKeyStore = new WifiKeyStore(mKeyStore); 1939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiConfigStore = new WifiConfigStore( 1949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mContext, wifiStateMachineLooper, mClock, 1959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project WifiConfigStore.createSharedFile()); 1969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Legacy config store 1979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project DelayedDiskWrite writer = new DelayedDiskWrite(); 1989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNetworkHistory = new WifiNetworkHistory(mContext, writer); 1999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mIpConfigStore = new IpConfigStore(writer); 2009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiConfigStoreLegacy = new WifiConfigStoreLegacy( 2019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNetworkHistory, mWifiNative, mIpConfigStore, 2029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project new LegacyPasspointConfigParser()); 2039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // Config Manager 2049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiConfigManager = new WifiConfigManager(mContext, mClock, 2059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project UserManager.get(mContext), TelephonyManager.from(mContext), 2069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiKeyStore, mWifiConfigStore, mWifiConfigStoreLegacy, mWifiPermissionsUtil, 2079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiPermissionsWrapper, new NetworkListStoreData(), 2089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project new DeletedEphemeralSsidsStoreData()); 2099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiMetrics.setWifiConfigManager(mWifiConfigManager); 2109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiConnectivityHelper = new WifiConnectivityHelper(mWifiNative); 2119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mConnectivityLocalLog = new LocalLog(ActivityManager.isLowRamDeviceStatic() ? 256 : 512); 2129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNetworkSelector = new WifiNetworkSelector(mContext, mWifiConfigManager, mClock, 2139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mConnectivityLocalLog); 2149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiMetrics.setWifiNetworkSelector(mWifiNetworkSelector); 2159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mSavedNetworkEvaluator = new SavedNetworkEvaluator(mContext, 2169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiConfigManager, mClock, mConnectivityLocalLog, mWifiConnectivityHelper); 2179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mScoredNetworkEvaluator = new ScoredNetworkEvaluator(context, wifiStateMachineLooper, 2189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mFrameworkFacade, mNetworkScoreManager, mWifiConfigManager, mConnectivityLocalLog, 2199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiNetworkScoreCache); 220381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes mSimAccessor = new SIMAccessor(mContext); 2219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mPasspointManager = new PasspointManager(mContext, mWifiNative, mWifiKeyStore, mClock, 22264c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath mSimAccessor, new PasspointObjectFactory(), mWifiConfigManager, mWifiConfigStore, 2239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiMetrics); 2249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mPasspointNetworkEvaluator = new PasspointNetworkEvaluator( 2259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mPasspointManager, mWifiConfigManager, mConnectivityLocalLog); 2269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiMetrics.setPasspointManager(mPasspointManager); 2279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // mWifiStateMachine has an implicit dependency on mJavaRuntime due to WifiDiagnostics. 2289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mJavaRuntime = Runtime.getRuntime(); 2299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiStateMachine = new WifiStateMachine(mContext, mFrameworkFacade, 2309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project wifiStateMachineLooper, UserManager.get(mContext), 2319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project this, mBackupManagerProxy, mCountryCode, mWifiNative, 2329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project new WrongPasswordNotifier(mContext, mFrameworkFacade)); 2339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mCertManager = new WifiCertManager(mContext); 2349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mNotificationController = new WifiNotificationController(mContext, 2359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiStateMachineHandlerThread.getLooper(), mFrameworkFacade, null, 2369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project new OpenNetworkRecommender()); 2379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mLockManager = new WifiLockManager(mContext, BatteryStatsService.getService()); 2389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiController = new WifiController(mContext, mWifiStateMachine, mSettingsStore, 2399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mLockManager, mWifiServiceHandlerThread.getLooper(), mFrameworkFacade); 2409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mSelfRecovery = new SelfRecovery(mWifiController, mClock); 2419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiLastResortWatchdog = new WifiLastResortWatchdog(mSelfRecovery, mWifiMetrics); 2429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project mWifiMulticastLockManager = new WifiMulticastLockManager(mWifiStateMachine, 2439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project BatteryStatsService.getService()); 244381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes } 2459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /** 2479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Obtain an instance of the WifiInjector class. 2489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 2499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * This is the generic method to get an instance of the class. The first instance should be 2509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * retrieved using the getInstanceWithContext method. 2519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 2529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public static WifiInjector getInstance() { 2539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project if (sWifiInjector == null) { 2549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project throw new IllegalStateException( 2559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project "Attempted to retrieve a WifiInjector instance before constructor was called."); 2569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return sWifiInjector; 2589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public UserManager getUserManager() { 2619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return UserManager.get(mContext); 26264c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath } 2639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiMetrics getWifiMetrics() { 2659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mWifiMetrics; 2669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public SupplicantStaIfaceHal getSupplicantStaIfaceHal() { 2699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mSupplicantStaIfaceHal; 2709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public BackupManagerProxy getBackupManagerProxy() { 2739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mBackupManagerProxy; 2749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public FrameworkFacade getFrameworkFacade() { 2779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mFrameworkFacade; 2789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 279381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes 2809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public HandlerThread getWifiServiceHandlerThread() { 28164c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath return mWifiServiceHandlerThread; 2829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public HandlerThread getWifiStateMachineHandlerThread() { 285381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes return mWifiStateMachineHandlerThread; 2869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 28764c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath 2889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiTrafficPoller getWifiTrafficPoller() { 2899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mTrafficPoller; 2909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiCountryCode getWifiCountryCode() { 2939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mCountryCode; 2949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiApConfigStore getWifiApConfigStore() { 2979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mWifiApConfigStore; 2989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiStateMachine getWifiStateMachine() { 3019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mWifiStateMachine; 3029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 3039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 304381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes public WifiSettingsStore getWifiSettingsStore() { 3059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mSettingsStore; 3069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 3079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiCertManager getWifiCertManager() { 30964c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath return mCertManager; 3109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 3119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiLockManager getWifiLockManager() { 3139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mLockManager; 314381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes } 3159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiController getWifiController() { 3179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mWifiController; 3189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 31964c8fd52127407737beccba617e02eaf4a58ae7fNarayan Kamath 3209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public WifiLastResortWatchdog getWifiLastResortWatchdog() { 3219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return mWifiLastResortWatchdog; 3229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 323ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes 324ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes public Clock getClock() { 325 return mClock; 326 } 327 328 public PropertyService getPropertyService() { 329 return mPropertyService; 330 } 331 332 public BuildProperties getBuildProperties() { 333 return mBuildProperties; 334 } 335 336 public KeyStore getKeyStore() { 337 return mKeyStore; 338 } 339 340 public WifiBackupRestore getWifiBackupRestore() { 341 return mWifiBackupRestore; 342 } 343 344 public WifiMulticastLockManager getWifiMulticastLockManager() { 345 return mWifiMulticastLockManager; 346 } 347 348 public WifiConfigManager getWifiConfigManager() { 349 return mWifiConfigManager; 350 } 351 352 public PasspointManager getPasspointManager() { 353 return mPasspointManager; 354 } 355 356 public TelephonyManager makeTelephonyManager() { 357 // may not be available when WiFi starts 358 return (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 359 } 360 361 public WifiStateTracker getWifiStateTracker() { 362 return mWifiStateTracker; 363 } 364 365 public IWificond makeWificond() { 366 // We depend on being able to refresh our binder in WifiStateMachine, so don't cache it. 367 IBinder binder = ServiceManager.getService(WIFICOND_SERVICE_NAME); 368 return IWificond.Stub.asInterface(binder); 369 } 370 371 /** 372 * Create a SoftApManager. 373 * @param nmService NetworkManagementService allowing SoftApManager to listen for interface 374 * changes 375 * @param listener listener for SoftApManager 376 * @param apInterface network interface to start hostapd against 377 * @param config softAp WifiConfiguration 378 * @return an instance of SoftApManager 379 */ 380 public SoftApManager makeSoftApManager(INetworkManagementService nmService, 381 SoftApManager.Listener listener, 382 IApInterface apInterface, 383 WifiConfiguration config) { 384 return new SoftApManager(mWifiServiceHandlerThread.getLooper(), 385 mWifiNative, mCountryCode.getCountryCode(), 386 listener, apInterface, nmService, 387 mWifiApConfigStore, config, mWifiMetrics); 388 } 389 390 /** 391 * Create a WifiLog instance. 392 * @param tag module name to include in all log messages 393 */ 394 public WifiLog makeLog(String tag) { 395 return new LogcatLog(tag); 396 } 397 398 public BaseWifiDiagnostics makeWifiDiagnostics(WifiNative wifiNative) { 399 if (mUseRealLogger) { 400 return new WifiDiagnostics( 401 mContext, this, mWifiStateMachine, wifiNative, mBuildProperties, 402 new LastMileLogger(this)); 403 } else { 404 return new BaseWifiDiagnostics(wifiNative); 405 } 406 } 407 408 /** 409 * Obtain an instance of WifiScanner. 410 * If it was not already created, then obtain an instance. Note, this must be done lazily since 411 * WifiScannerService is separate and created later. 412 */ 413 public synchronized WifiScanner getWifiScanner() { 414 if (mWifiScanner == null) { 415 mWifiScanner = new WifiScanner(mContext, 416 IWifiScanner.Stub.asInterface(ServiceManager.getService( 417 Context.WIFI_SCANNING_SERVICE)), 418 mWifiStateMachineHandlerThread.getLooper()); 419 } 420 return mWifiScanner; 421 } 422 423 /** 424 * Obtain a new instance of WifiConnectivityManager. 425 * 426 * Create and return a new WifiConnectivityManager. 427 * @param wifiInfo WifiInfo object for updating wifi state. 428 * @param hasConnectionRequests boolean indicating if WifiConnectivityManager to start 429 * immediately based on connection requests. 430 */ 431 public WifiConnectivityManager makeWifiConnectivityManager(WifiInfo wifiInfo, 432 boolean hasConnectionRequests) { 433 return new WifiConnectivityManager(mContext, mWifiStateMachine, getWifiScanner(), 434 mWifiConfigManager, wifiInfo, mWifiNetworkSelector, mWifiConnectivityHelper, 435 mWifiLastResortWatchdog, mNotificationController, mWifiMetrics, 436 mWifiStateMachineHandlerThread.getLooper(), mClock, mConnectivityLocalLog, 437 hasConnectionRequests, mFrameworkFacade, mSavedNetworkEvaluator, 438 mScoredNetworkEvaluator, mPasspointNetworkEvaluator); 439 } 440 441 public WifiPermissionsUtil getWifiPermissionsUtil() { 442 return mWifiPermissionsUtil; 443 } 444 445 public WifiPermissionsWrapper getWifiPermissionsWrapper() { 446 return mWifiPermissionsWrapper; 447 } 448 449 /** 450 * Returns a singleton instance of a HandlerThread for injection. Uses lazy initialization. 451 * 452 * TODO: share worker thread with other Wi-Fi handlers (b/27924886) 453 */ 454 public HandlerThread getWifiAwareHandlerThread() { 455 if (mWifiAwareHandlerThread == null) { // lazy initialization 456 mWifiAwareHandlerThread = new HandlerThread("wifiAwareService"); 457 mWifiAwareHandlerThread.start(); 458 } 459 return mWifiAwareHandlerThread; 460 } 461 462 /** 463 * Returns a single instance of HalDeviceManager for injection. 464 */ 465 public HalDeviceManager getHalDeviceManager() { 466 return mHalDeviceManager; 467 } 468 469 public Runtime getJavaRuntime() { 470 return mJavaRuntime; 471 } 472 473 public WifiNative getWifiNative() { 474 return mWifiNative; 475 } 476 477 public WifiMonitor getWifiMonitor() { 478 return mWifiMonitor; 479 } 480 481 public WifiP2pNative getWifiP2pNative() { 482 return mWifiP2pNative; 483 } 484 485 public WifiP2pMonitor getWifiP2pMonitor() { 486 return mWifiP2pMonitor; 487 } 488 489 public SelfRecovery getSelfRecovery() { 490 return mSelfRecovery; 491 } 492} 493