Show Error dialog when WPS is interrupted

When WPS searching is interruptd by turning Wi-Fi off,
Error dialog should be displayed.

Bug: 29883134
Test: manual - tap WPS Push Button and turn Airplane mode on

Change-Id: Ie6667c6b7d09540af21b015e0d5b991d818d2c77
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e177112..648bd2b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1687,6 +1687,8 @@
     <string name="wifi_wps_failed_auth">Authentication failure. Please try again.</string>
      <!-- Text displayed when WPS fails due to another session [CHAR LIMIT=150] -->
     <string name="wifi_wps_failed_overlap">Another WPS session was detected. Please try again in a few minutes.</string>
+    <!-- Text displayed when WPS fails due to wifi disconnected [CHAR LIMIT=150] -->
+    <string name="wifi_wps_failed_wifi_disconnected">Wi\u2011Fi disconnected. WPS setup canceled.</string>
     <!-- Label for the SSID of the network -->
     <string name="wifi_ssid">Network name</string>
     <!-- Hint for a text field to enter the SSID of a hidden wifi network. [CHAR LIMIT=35] -->
diff --git a/src/com/android/settings/wifi/WpsDialog.java b/src/com/android/settings/wifi/WpsDialog.java
index 3de2729..440b72d 100644
--- a/src/com/android/settings/wifi/WpsDialog.java
+++ b/src/com/android/settings/wifi/WpsDialog.java
@@ -125,6 +125,7 @@
 
 
         mFilter = new IntentFilter();
+        mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
         mReceiver = new BroadcastReceiver() {
             @Override
@@ -261,7 +262,18 @@
 
     private void handleEvent(Context context, Intent intent) {
         String action = intent.getAction();
-        if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
+        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
+            final int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
+                    WifiManager.WIFI_STATE_UNKNOWN);
+            if (state == WifiManager.WIFI_STATE_DISABLED) {
+                if (mTimer != null) {
+                    mTimer.cancel();
+                    mTimer = null;
+                }
+                String msg = mContext.getString(R.string.wifi_wps_failed_wifi_disconnected);
+                updateDialog(DialogState.WPS_FAILED, msg);
+            }
+        } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
             NetworkInfo info = (NetworkInfo) intent.getParcelableExtra(
                     WifiManager.EXTRA_NETWORK_INFO);
             final NetworkInfo.DetailedState state = info.getDetailedState();