diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java index 1343895ed93dd..85ba2571c17f4 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java @@ -30,6 +30,7 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WifiNetworkScoreCache; import android.os.Handler; +import android.os.HandlerThread; import android.os.Looper; import android.provider.Settings; @@ -53,20 +54,15 @@ public class WifiStatusTracker { private final WifiManager mWifiManager; private final NetworkScoreManager mNetworkScoreManager; private final ConnectivityManager mConnectivityManager; - private final Handler mHandler = new Handler(Looper.getMainLooper()); + private final HandlerThread mHandlerThread; + private final Handler mHandler; + private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper()); private final Set mNetworks = new HashSet<>(); // Save the previous HISTORY_SIZE states for logging. private final String[] mHistory = new String[HISTORY_SIZE]; // Where to copy the next state into. private int mHistoryIndex; - private final WifiNetworkScoreCache.CacheListener mCacheListener = - new WifiNetworkScoreCache.CacheListener(mHandler) { - @Override - public void networkCacheUpdated(List updatedNetworks) { - updateStatusLabel(); - mCallback.run(); - } - }; + private final WifiNetworkScoreCache.CacheListener mCacheListener; private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder() .clearCapabilities() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) @@ -113,7 +109,7 @@ public class WifiStatusTracker { } updateWifiInfo(wifiInfo); updateStatusLabel(); - mCallback.run(); + mMainThreadHandler.post(() -> postResults()); } @Override @@ -128,7 +124,7 @@ public class WifiStatusTracker { mNetworks.remove(network.getNetId()); updateWifiInfo(null); updateStatusLabel(); - mCallback.run(); + mMainThreadHandler.post(() -> postResults()); } } }; @@ -143,7 +139,7 @@ public class WifiStatusTracker { mDefaultNetwork = network; mDefaultNetworkCapabilities = nc; updateStatusLabel(); - mCallback.run(); + mMainThreadHandler.post(() -> postResults()); } @Override public void onLost(Network network) { @@ -151,7 +147,7 @@ public class WifiStatusTracker { mDefaultNetwork = null; mDefaultNetworkCapabilities = null; updateStatusLabel(); - mCallback.run(); + mMainThreadHandler.post(() -> postResults()); } }; private Network mDefaultNetwork = null; @@ -180,6 +176,17 @@ public class WifiStatusTracker { mNetworkScoreManager = networkScoreManager; mConnectivityManager = connectivityManager; mCallback = callback; + mHandlerThread = new HandlerThread("WifiStatusTrackerHandler"); + mHandlerThread.start(); + mHandler = new Handler(mHandlerThread.getLooper()); + mCacheListener = + new WifiNetworkScoreCache.CacheListener(mHandler) { + @Override + public void networkCacheUpdated(List updatedNetworks) { + updateStatusLabel(); + mMainThreadHandler.post(() -> postResults()); + } + }; } public void setListening(boolean listening) { @@ -332,7 +339,7 @@ public class WifiStatusTracker { /** Refresh the status label on Locale changed. */ public void refreshLocale() { updateStatusLabel(); - mCallback.run(); + mMainThreadHandler.post(() -> postResults()); } private String getValidSsid(WifiInfo info) { @@ -348,6 +355,10 @@ public class WifiStatusTracker { mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE; } + private void postResults() { + mCallback.run(); + } + /** Dump function. */ public void dump(PrintWriter pw) { pw.println(" - WiFi Network History ------");