Move the blocking API to a backgound thread
Bug: 190376958
Test: Manual testing
Change-Id: Ie0f40bbdb9e312156d362095e692140956b470f6
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
index 1343895..85ba257 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.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 @@
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<Integer> 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<ScoredNetwork> 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 @@
}
updateWifiInfo(wifiInfo);
updateStatusLabel();
- mCallback.run();
+ mMainThreadHandler.post(() -> postResults());
}
@Override
@@ -128,7 +124,7 @@
mNetworks.remove(network.getNetId());
updateWifiInfo(null);
updateStatusLabel();
- mCallback.run();
+ mMainThreadHandler.post(() -> postResults());
}
}
};
@@ -143,7 +139,7 @@
mDefaultNetwork = network;
mDefaultNetworkCapabilities = nc;
updateStatusLabel();
- mCallback.run();
+ mMainThreadHandler.post(() -> postResults());
}
@Override
public void onLost(Network network) {
@@ -151,7 +147,7 @@
mDefaultNetwork = null;
mDefaultNetworkCapabilities = null;
updateStatusLabel();
- mCallback.run();
+ mMainThreadHandler.post(() -> postResults());
}
};
private Network mDefaultNetwork = null;
@@ -180,6 +176,17 @@
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<ScoredNetwork> updatedNetworks) {
+ updateStatusLabel();
+ mMainThreadHandler.post(() -> postResults());
+ }
+ };
}
public void setListening(boolean listening) {
@@ -332,7 +339,7 @@
/** 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 @@
mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE;
}
+ private void postResults() {
+ mCallback.run();
+ }
+
/** Dump function. */
public void dump(PrintWriter pw) {
pw.println(" - WiFi Network History ------");