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 ------");