Restrict changing wi-fi networks

Bug: 31852835
Test: manual - verify unrestricted as regular user, but that a password
is required in demo mode.
Change-Id: I60f95ccbb10ba728b384b9c8c2ae723934fb2928
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 2b2ca8c..eecc8c2 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -74,7 +74,6 @@
 import android.provider.ContactsContract.Profile;
 import android.provider.ContactsContract.RawContacts;
 import android.provider.Settings;
-import android.provider.Settings.Secure;
 import android.support.annotation.StringRes;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
@@ -1282,13 +1281,12 @@
     }
 
     public static String getDemoModePackageName(Context context) {
-        return context.getResources().getString(
-                com.android.internal.R.string.config_demoModePackage);
+        return context.getString(com.android.internal.R.string.config_demoModePackage);
     }
 
     /**
      * Returns if a given user is a profile of another user.
-     * @param user The user whose profiles will be checked.
+     * @param user The user whose profiles wibe checked.
      * @param profile The (potential) profile.
      * @return if the profile is actually a profile
      */
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index bd35851..e3d732b 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -200,6 +200,15 @@
         // loaded (ODR).
         setAnimationAllowed(false);
 
+        addPreferences();
+
+        mIsRestricted = isUiRestricted();
+
+        mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
+        mBgThread.start();
+    }
+
+    private void addPreferences() {
         addPreferencesFromResource(R.xml.wifi_settings);
 
         mConnectedAccessPointPreferenceCategory =
@@ -218,11 +227,6 @@
         mStatusMessagePreference = new LinkablePreference(prefContext);
 
         mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());
-
-        mIsRestricted = isUiRestricted();
-
-        mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
-        mBgThread.start();
     }
 
     @Override
@@ -341,16 +345,20 @@
         mWifiTracker.startTracking();
 
         if (mIsRestricted) {
-            if (!isUiRestrictedByOnlyAdmin()) {
-                getEmptyTextView().setText(R.string.wifi_empty_list_user_restricted);
-            }
-            getPreferenceScreen().removeAll();
+            restrictUi();
             return;
         }
 
         onWifiStateChanged(mWifiManager.getWifiState());
     }
 
+    private void restrictUi() {
+        if (!isUiRestrictedByOnlyAdmin()) {
+            getEmptyTextView().setText(R.string.wifi_empty_list_user_restricted);
+        }
+        getPreferenceScreen().removeAll();
+    }
+
     /**
      * Only update the AP list if there are not any APs currently shown.
      *
@@ -390,6 +398,15 @@
     public void onResume() {
         final Activity activity = getActivity();
         super.onResume();
+
+        // Because RestrictedSettingsFragment's onResume potentially requests authorization,
+        // which changes the restriction state, recalculate it.
+        final boolean alreadyImmutablyRestricted = mIsRestricted;
+        mIsRestricted = isUiRestricted();
+        if (!alreadyImmutablyRestricted && mIsRestricted) {
+            restrictUi();
+        }
+
         if (mWifiEnabler != null) {
             mWifiEnabler.resume(activity);
         }
@@ -412,6 +429,19 @@
     }
 
     @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        final boolean formerlyRestricted = mIsRestricted;
+        mIsRestricted = isUiRestricted();
+        if (formerlyRestricted && !mIsRestricted
+                && getPreferenceScreen().getPreferenceCount() == 0) {
+            // De-restrict the ui
+            addPreferences();
+        }
+    }
+
+    @Override
     public int getMetricsCategory() {
         return MetricsEvent.WIFI;
     }