diff options
4 files changed, 47 insertions, 5 deletions
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java new file mode 100644 index 000000000..b2792cb95 --- /dev/null +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2016 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wifi; + +/** + * WiFi dependency injector using thread-safe lazy singleton pattern. To be used for accessing + * various wifi class instances and as a handle for mock injection. + */ +public class WifiInjector { + // see: https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom + private static class LazyHolder { + public static final WifiInjector sInstance = new WifiInjector(); + } + + public static WifiInjector getInstance() { + return LazyHolder.sInstance; + } + + private final WifiMetrics mWifiMetrics = new WifiMetrics(); + + public WifiMetrics getWifiMetrics() { + return mWifiMetrics; + } +} diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 8ea51814e..925686c1b 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -154,6 +154,7 @@ public class WifiServiceImpl extends IWifiManager.Stub { /* Manages affiliated certificates for current user */ private final WifiCertManager mCertManager; + private final WifiInjector mWifiInjector; /** * Asynchronous channel to WifiStateMachine */ @@ -310,17 +311,18 @@ public class WifiServiceImpl extends IWifiManager.Stub { public WifiServiceImpl(Context context) { mContext = context; + mWifiInjector = WifiInjector.getInstance(); FrameworkFacade facade = new FrameworkFacade(); HandlerThread wifiThread = new HandlerThread("WifiService"); wifiThread.start(); - mWifiMetrics = new WifiMetrics(); + mWifiMetrics = mWifiInjector.getWifiMetrics(); mTrafficPoller = new WifiTrafficPoller(mContext, wifiThread.getLooper(), WifiNative.getWlanNativeInterface().getInterfaceName()); mUserManager = UserManager.get(mContext); HandlerThread wifiStateMachineThread = new HandlerThread("WifiStateMachine"); wifiStateMachineThread.start(); mWifiStateMachine = new WifiStateMachine(mContext, facade, - wifiStateMachineThread.getLooper(), mUserManager, mWifiMetrics, + wifiStateMachineThread.getLooper(), mUserManager, mWifiInjector, new BackupManagerProxy()); mSettingsStore = new WifiSettingsStore(mContext); mWifiStateMachine.enableRssiPolling(true); diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index ef5d6e966..90539dfcc 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -1126,11 +1126,11 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven private final BackupManagerProxy mBackupManagerProxy; public WifiStateMachine(Context context, FrameworkFacade facade, Looper looper, - UserManager userManager, WifiMetrics wifiMetrics, + UserManager userManager, WifiInjector wifiInjector, BackupManagerProxy backupManagerProxy) { super("WifiStateMachine", looper); - mWifiMetrics = wifiMetrics; + mWifiMetrics = wifiInjector.getWifiMetrics(); mContext = context; mFacade = facade; mUserManager = userManager; diff --git a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java index 2663b0c8e..cee79cd60 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java @@ -343,6 +343,8 @@ public class WifiStateMachineTest { TestUtil.installWlanWifiNative(mWifiNative); mWifiMonitor = new MockWifiMonitor(); mWifiMetrics = mock(WifiMetrics.class); + WifiInjector wifiInjector = mock(WifiInjector.class); + when(wifiInjector.getWifiMetrics()).thenReturn(mWifiMetrics); FrameworkFacade factory = getFrameworkFacade(); Context context = getContext(); @@ -368,7 +370,7 @@ public class WifiStateMachineTest { new UserInfo(11, "managed profile", 0))); mWsm = new WifiStateMachine(context, factory, mLooper.getLooper(), - mUserManager, mWifiMetrics, mBackupManagerProxy); + mUserManager, wifiInjector, mBackupManagerProxy); mWsmThread = getWsmHandlerThread(mWsm); final AsyncChannel channel = new AsyncChannel(); |