Loading core/java/android/app/SystemServiceRegistry.java +3 −1 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ import android.media.soundtrigger.SoundTriggerManager; import android.media.tv.ITvInputManager; import android.media.tv.TvInputManager; import android.net.ConnectivityManager; import android.net.ConnectivityThread; import android.net.EthernetManager; import android.net.IConnectivityManager; import android.net.IEthernetManager; Loading Loading @@ -500,7 +501,8 @@ final class SystemServiceRegistry { public WifiManager createService(ContextImpl ctx) { IBinder b = ServiceManager.getService(Context.WIFI_SERVICE); IWifiManager service = IWifiManager.Stub.asInterface(b); return new WifiManager(ctx.getOuterContext(), service); return new WifiManager(ctx.getOuterContext(), service, ConnectivityThread.getInstanceLooper()); }}); registerService(Context.WIFI_P2P_SERVICE, WifiP2pManager.class, Loading core/java/android/net/ConnectivityThread.java 0 → 100644 +51 −0 Original line number Diff line number Diff line /* * 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 android.net; import android.os.HandlerThread; import android.os.Looper; /** * Shared singleton connectivity thread for the system. This is a thread for * connectivity operations such as AsyncChannel connections to system services. * Various connectivity manager objects can use this singleton as a common * resource for their handlers instead of creating separate threads of their own. * @hide */ public final class ConnectivityThread extends HandlerThread { private static ConnectivityThread sInstance; private ConnectivityThread() { super("ConnectivityThread"); } private static synchronized ConnectivityThread getInstance() { if (sInstance == null) { sInstance = new ConnectivityThread(); sInstance.start(); } return sInstance; } public static ConnectivityThread get() { return getInstance(); } public static Looper getInstanceLooper() { return getInstance().getLooper(); } } wifi/java/android/net/wifi/WifiManager.java +4 −7 Original line number Diff line number Diff line Loading @@ -671,9 +671,7 @@ public class WifiManager { private AsyncChannel mAsyncChannel; private CountDownLatch mConnected; /* TODO(b/27432949): Use a common connectivity thread for this. */ private HandlerThread mHandlerThread; private Looper mLooper; /** * Create a new WifiManager instance. Loading @@ -685,9 +683,10 @@ public class WifiManager { * @hide - hide this because it takes in a parameter of type IWifiManager, which * is a system private class. */ public WifiManager(Context context, IWifiManager service) { public WifiManager(Context context, IWifiManager service, Looper looper) { mContext = context; mService = service; mLooper = looper; mTargetSdkVersion = context.getApplicationInfo().targetSdkVersion; } Loading Loading @@ -1978,12 +1977,10 @@ public class WifiManager { "getWifiServiceMessenger() returned null! This is invalid."); } mHandlerThread = new HandlerThread("WifiManager"); mAsyncChannel = new AsyncChannel(); mConnected = new CountDownLatch(1); mHandlerThread.start(); Handler handler = new ServiceHandler(mHandlerThread.getLooper()); Handler handler = new ServiceHandler(mLooper); mAsyncChannel.connect(mContext, handler, messenger); try { mConnected.await(); Loading Loading
core/java/android/app/SystemServiceRegistry.java +3 −1 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ import android.media.soundtrigger.SoundTriggerManager; import android.media.tv.ITvInputManager; import android.media.tv.TvInputManager; import android.net.ConnectivityManager; import android.net.ConnectivityThread; import android.net.EthernetManager; import android.net.IConnectivityManager; import android.net.IEthernetManager; Loading Loading @@ -500,7 +501,8 @@ final class SystemServiceRegistry { public WifiManager createService(ContextImpl ctx) { IBinder b = ServiceManager.getService(Context.WIFI_SERVICE); IWifiManager service = IWifiManager.Stub.asInterface(b); return new WifiManager(ctx.getOuterContext(), service); return new WifiManager(ctx.getOuterContext(), service, ConnectivityThread.getInstanceLooper()); }}); registerService(Context.WIFI_P2P_SERVICE, WifiP2pManager.class, Loading
core/java/android/net/ConnectivityThread.java 0 → 100644 +51 −0 Original line number Diff line number Diff line /* * 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 android.net; import android.os.HandlerThread; import android.os.Looper; /** * Shared singleton connectivity thread for the system. This is a thread for * connectivity operations such as AsyncChannel connections to system services. * Various connectivity manager objects can use this singleton as a common * resource for their handlers instead of creating separate threads of their own. * @hide */ public final class ConnectivityThread extends HandlerThread { private static ConnectivityThread sInstance; private ConnectivityThread() { super("ConnectivityThread"); } private static synchronized ConnectivityThread getInstance() { if (sInstance == null) { sInstance = new ConnectivityThread(); sInstance.start(); } return sInstance; } public static ConnectivityThread get() { return getInstance(); } public static Looper getInstanceLooper() { return getInstance().getLooper(); } }
wifi/java/android/net/wifi/WifiManager.java +4 −7 Original line number Diff line number Diff line Loading @@ -671,9 +671,7 @@ public class WifiManager { private AsyncChannel mAsyncChannel; private CountDownLatch mConnected; /* TODO(b/27432949): Use a common connectivity thread for this. */ private HandlerThread mHandlerThread; private Looper mLooper; /** * Create a new WifiManager instance. Loading @@ -685,9 +683,10 @@ public class WifiManager { * @hide - hide this because it takes in a parameter of type IWifiManager, which * is a system private class. */ public WifiManager(Context context, IWifiManager service) { public WifiManager(Context context, IWifiManager service, Looper looper) { mContext = context; mService = service; mLooper = looper; mTargetSdkVersion = context.getApplicationInfo().targetSdkVersion; } Loading Loading @@ -1978,12 +1977,10 @@ public class WifiManager { "getWifiServiceMessenger() returned null! This is invalid."); } mHandlerThread = new HandlerThread("WifiManager"); mAsyncChannel = new AsyncChannel(); mConnected = new CountDownLatch(1); mHandlerThread.start(); Handler handler = new ServiceHandler(mHandlerThread.getLooper()); Handler handler = new ServiceHandler(mLooper); mAsyncChannel.connect(mContext, handler, messenger); try { mConnected.await(); Loading