cherry-pick 288b4ac94571e6f77036831708e7bb7c31874688 into froyo

Killing the WifiWatchdogService thread from
WifiService can cause messages to be handled on
a dead thread. Quit the thread on the broadcast
instead.

A couple of more fixes:
- Do an asynchronous bring up of Wifi. This will
allow WifiWatchdogServiceThread to be immediately
brought up, instead of relying on an update.

- There is no need to listen on supplicant connection
in wifiwatchdog anymore. We kill the thread when
supplicant connection is no more.

Bug: 2546756
Change-Id: I15a188e031bc79856c55aabdd271287b0df0377d
diff --git a/services/java/com/android/server/WifiWatchdogService.java b/services/java/com/android/server/WifiWatchdogService.java
index e2c523d..87f8a6e 100644
--- a/services/java/com/android/server/WifiWatchdogService.java
+++ b/services/java/com/android/server/WifiWatchdogService.java
@@ -251,7 +251,6 @@
     private void registerForWifiBroadcasts() {
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
         intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         mContext.registerReceiver(mReceiver, intentFilter);
     }
@@ -276,7 +275,7 @@
     /**
      * Unregister broadcasts and quit the watchdog thread
      */
-    public void quit() {
+    private void quit() {
         unregisterForWifiBroadcasts();
         mContext.getContentResolver().unregisterContentObserver(mContentObserver);
         mHandler.removeAllActions();
@@ -1117,9 +1116,6 @@
             if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
                 handleNetworkStateChanged(
                         (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO));
-            } else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
-                handleSupplicantConnectionChanged(
-                        intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false));
             } else if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
                 handleWifiStateChanged(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                         WifiManager.WIFI_STATE_UNKNOWN));
@@ -1153,15 +1149,9 @@
             }
         }
 
-        private void handleSupplicantConnectionChanged(boolean connected) {
-            if (!connected) {
-                onDisconnected();
-            }
-        }
-        
         private void handleWifiStateChanged(int wifiState) {
             if (wifiState == WifiManager.WIFI_STATE_DISABLED) {
-                onDisconnected();
+                quit();
             } else if (wifiState == WifiManager.WIFI_STATE_ENABLED) {
                 onEnabled();
             }