diff options
author | Roshan Pius <rpius@google.com> | 2018-09-21 09:18:13 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-10-09 10:35:37 -0700 |
commit | 29f2a62b0e6d38d5cc8a6b5ed5b096d6f3654340 (patch) | |
tree | 512cd0f187c83cb6897e3c0b65437f2b3768597e /service | |
parent | afa78c953b73d7024e3d8ef49a021f8dac4999f6 (diff) |
ClientModeImpl: Construct network factories in constructor
Also, refactor the ClientModeImpl tests to just use mocks for the
NetworkFactory.
Bug: 116210817
Test: Unit tests
Test: Device boots up & auto-connects to wifi networks
Change-Id: I5b1baad80eb7dcfb4ae46aa7062f143b510a74fd
Diffstat (limited to 'service')
4 files changed, 46 insertions, 33 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index 1372e5ee1..dd63d10b8 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -807,6 +807,16 @@ public class ClientModeImpl extends StateMachine { // TODO - needs to be a bit more dynamic mDfltNetworkCapabilities = new NetworkCapabilities(mNetworkCapabilitiesFilter); + // Make the network factories. + mNetworkFactory = mWifiInjector.makeWifiNetworkFactory( + mNetworkCapabilitiesFilter, mWifiConnectivityManager); + // We can't filter untrusted network in the capabilities filter because a trusted + // network would still satisfy a request that accepts untrusted ones. + // We need a second network factory for untrusted network requests because we need a + // different score filter for these requests. + mUntrustedNetworkFactory = mWifiInjector.makeUntrustedWifiNetworkFactory( + mNetworkCapabilitiesFilter, mWifiConnectivityManager); + IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); @@ -1907,18 +1917,8 @@ public class ClientModeImpl extends StateMachine { pw.println("mUserWantsSuspendOpt " + mUserWantsSuspendOpt); pw.println("mSuspendOptNeedsDisabled " + mSuspendOptNeedsDisabled); mCountryCode.dump(fd, pw, args); - - if (mNetworkFactory != null) { - mNetworkFactory.dump(fd, pw, args); - } else { - pw.println("mNetworkFactory is not initialized"); - } - - if (mUntrustedNetworkFactory != null) { - mUntrustedNetworkFactory.dump(fd, pw, args); - } else { - pw.println("mUntrustedNetworkFactory is not initialized"); - } + mNetworkFactory.dump(fd, pw, args); + mUntrustedNetworkFactory.dump(fd, pw, args); pw.println("Wlan Wake Reasons:" + mWifiNative.getWlanWakeReasonCount()); pw.println(); @@ -2423,10 +2423,15 @@ public class ClientModeImpl extends StateMachine { if (mVerboseLoggingEnabled) log("handleScreenStateChanged Exit: " + screenOn); } - private void checkAndSetConnectivityInstance() { + private boolean checkAndSetConnectivityInstance() { if (mCm == null) { mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); } + if (mCm == null) { + Log.e(TAG, "Cannot retrieve connectivity service"); + return false; + } + return true; } private void setSuspendOptimizationsNative(int reason, boolean enabled) { @@ -3091,23 +3096,10 @@ public class ClientModeImpl extends StateMachine { return true; } - void maybeRegisterNetworkFactory() { - if (mNetworkFactory == null) { - checkAndSetConnectivityInstance(); - if (mCm != null) { - mNetworkFactory = new WifiNetworkFactory(getHandler().getLooper(), mContext, - mNetworkCapabilitiesFilter, mWifiConnectivityManager); - mNetworkFactory.register(); - - // We can't filter untrusted network in the capabilities filter because a trusted - // network would still satisfy a request that accepts untrusted ones. - // We need a second network factory for untrusted network requests because we need a - // different score filter for these requests. - mUntrustedNetworkFactory = new UntrustedWifiNetworkFactory(getHandler().getLooper(), - mContext, mNetworkCapabilitiesFilter, mWifiConnectivityManager); - mUntrustedNetworkFactory.register(); - } - } + void registerNetworkFactory() { + if (!checkAndSetConnectivityInstance()) return; + mNetworkFactory.register(); + mUntrustedNetworkFactory.register(); } /** @@ -3296,7 +3288,7 @@ public class ClientModeImpl extends StateMachine { if (!mWifiConfigManager.loadFromStore()) { Log.e(TAG, "Failed to load from config store"); } - maybeRegisterNetworkFactory(); + registerNetworkFactory(); break; case CMD_SCREEN_STATE_CHANGED: handleScreenStateChanged(message.arg1 != 0); diff --git a/service/java/com/android/server/wifi/UntrustedWifiNetworkFactory.java b/service/java/com/android/server/wifi/UntrustedWifiNetworkFactory.java index 86f3cd87e..7eae75827 100644 --- a/service/java/com/android/server/wifi/UntrustedWifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/UntrustedWifiNetworkFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 8e367e92f..bb0a37176 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -21,6 +21,7 @@ import android.app.ActivityManager; import android.app.AppOpsManager; import android.content.Context; import android.hardware.SystemSensorManager; +import android.net.NetworkCapabilities; import android.net.NetworkKey; import android.net.NetworkScoreManager; import android.net.wifi.IWifiScanner; @@ -537,6 +538,26 @@ public class WifiInjector { mSavedNetworkEvaluator, mScoredNetworkEvaluator, mPasspointNetworkEvaluator); } + /** + * Construct a new instance of {@link WifiNetworkFactory}. + * TODO(b/116233964): Remove cyclic dependency between WifiConnectivityManager & ClientModeImpl. + */ + public WifiNetworkFactory makeWifiNetworkFactory( + NetworkCapabilities nc, WifiConnectivityManager wifiConnectivityManager) { + return new WifiNetworkFactory( + mWifiCoreHandlerThread.getLooper(), mContext, nc, wifiConnectivityManager); + } + + /** + * Construct a new instance of {@link UntrustedWifiNetworkFactory}. + * TODO(b/116233964): Remove cyclic dependency between WifiConnectivityManager & ClientModeImpl. + */ + public UntrustedWifiNetworkFactory makeUntrustedWifiNetworkFactory( + NetworkCapabilities nc, WifiConnectivityManager wifiConnectivityManager) { + return new UntrustedWifiNetworkFactory( + mWifiCoreHandlerThread.getLooper(), mContext, nc, wifiConnectivityManager); + } + public WifiPermissionsUtil getWifiPermissionsUtil() { return mWifiPermissionsUtil; } diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index 8bc2dab2a..489601d0d 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. |