settings variable for wifi saved state

We add a variable for saving wifi state
to restore after tethering.

Bring up wifi on boot up if the state indicates so.

Bug: 2537983
Change-Id: I9c6548b93df6fcbc0cec1e6b857f7224dc6d1b2c
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 6e37f69..b8e5747 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2508,11 +2508,13 @@
         public static final String WIFI_ON = "wifi_on";
 
         /**
-         * Whether the Wi-Fi AP should be on.
+         * Used to save the Wifi_ON state prior to tethering.
+         * This state will be checked to restore Wifi after
+         * the user turns off tethering.
          *
          * @hide
          */
-        public static final String WIFI_AP_ON = "wifi_ap_on";
+        public static final String WIFI_SAVED_STATE = "wifi_saved_state";
 
         /**
          * AP SSID
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index 6fe4c98..e4d7623 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -264,10 +264,11 @@
      * if needed
      */
     public void startWifi() {
-        boolean wifiEnabled = getPersistedWifiEnabled();
+        /* Start if Wi-Fi is enabled or the saved state indicates Wi-Fi was on */
+        boolean wifiEnabled = getPersistedWifiEnabled() || testAndClearWifiSavedState();
         Slog.i(TAG, "WifiService starting up with Wi-Fi " +
                 (wifiEnabled ? "enabled" : "disabled"));
-        setWifiEnabledBlocking(wifiEnabled, false, Process.myUid());
+        setWifiEnabledBlocking(wifiEnabled, true, Process.myUid());
     }
 
     private void updateTetherState(ArrayList<String> available, ArrayList<String> tethered) {
@@ -316,6 +317,19 @@
         }
     }
 
+    private boolean testAndClearWifiSavedState() {
+        final ContentResolver cr = mContext.getContentResolver();
+        int wifiSavedState = 0;
+        try {
+            wifiSavedState = Settings.Secure.getInt(cr, Settings.Secure.WIFI_SAVED_STATE);
+            if(wifiSavedState == 1)
+                Settings.Secure.putInt(cr, Settings.Secure.WIFI_SAVED_STATE, 0);
+        } catch (Settings.SettingNotFoundException e) {
+            ;
+        }
+        return (wifiSavedState == 1);
+    }
+
     private boolean getPersistedWifiEnabled() {
         final ContentResolver cr = mContext.getContentResolver();
         try {