diff options
author | Glen Kuhne <kuh@google.com> | 2016-03-11 20:56:50 +0000 |
---|---|---|
committer | Android Partner Code Review <android-gerrit-partner@google.com> | 2016-03-11 20:56:50 +0000 |
commit | ea91131081772e97c65581b9a290dee21ee79a83 (patch) | |
tree | a2fa75660ee7a8ac2b1551100e06f771c09a7563 /service | |
parent | 03e6c26c18a2bc89471569a899bef913c2770b36 (diff) | |
parent | 637a86ffb3a036a4f26a471378b57d8817f35c25 (diff) |
Merge "Created WifiInjector, dependency injector for wifi" into mm-wireless-dev
Diffstat (limited to 'service')
3 files changed, 45 insertions, 4 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 30458524c..f9b595449 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -151,6 +151,8 @@ public class WifiServiceImpl extends IWifiManager.Stub { final WifiSettingsStore mSettingsStore; /* Logs connection events and some general router and scan stats */ private final WifiMetrics mWifiMetrics; + + private final WifiInjector mWifiInjector; /** * Asynchronous channel to WifiStateMachine */ @@ -307,17 +309,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; |