Merge "Update strings for guest removal affordance and dialog" into lmp-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 27738c3..af5af30 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -97,8 +97,7 @@
 
         <receiver android:name="ManagedProfileSetup">
             <intent-filter>
-                <action android:name="android.intent.action.BOOT_COMPLETED"/>
-                <action android:name="android.intent.action.PRE_BOOT_COMPLETED"/>
+                <action android:name="android.intent.action.USER_INITIALIZE"/>
             </intent-filter>
         </receiver>
 
diff --git a/src/com/android/settings/ManagedProfileSetup.java b/src/com/android/settings/ManagedProfileSetup.java
index 1b3c838..198abe0 100644
--- a/src/com/android/settings/ManagedProfileSetup.java
+++ b/src/com/android/settings/ManagedProfileSetup.java
@@ -22,6 +22,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.util.Log;
 import android.os.UserHandle;
 import android.os.UserManager;
 
@@ -37,6 +38,7 @@
  * adds cross-profile intent filters for the appropriate Settings activities).
  */
 public class ManagedProfileSetup extends BroadcastReceiver {
+    private static final String TAG = "Settings";
     private static final String PRIMARY_PROFILE_SETTING =
             "com.android.settings.PRIMARY_PROFILE_CONTROLLED";
 
@@ -46,7 +48,8 @@
         if (!Utils.isManagedProfile(um)) {
             return;
         }
-
+        Log.i(TAG, "Received broadcast: " + broadcast.getAction()
+                + ". Setting up intent forwarding for managed profile.");
         final PackageManager pm  = context.getPackageManager();
         // Clear any previous intent forwarding we set up
         pm.clearCrossProfileIntentFilters(UserHandle.myUserId());
diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java
index 2eb89b0..891fdbb 100644
--- a/src/com/android/settings/accounts/AccountSettings.java
+++ b/src/com/android/settings/accounts/AccountSettings.java
@@ -137,7 +137,7 @@
                             currentProfile.getIdentifier()));
             menu.findItem(R.id.account_settings_menu_auto_sync_personal).setVisible(false);
             menu.findItem(R.id.account_settings_menu_auto_sync_work).setVisible(false);
-        } else {
+        } else if (mProfiles.size() > 1) {
             // We assume there's only one managed profile, otherwise UI needs to change
             final UserHandle managedProfile = mProfiles.valueAt(1).userInfo.getUserHandle();
 
@@ -152,6 +152,8 @@
                     .setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser(
                             managedProfile.getIdentifier()));
             menu.findItem(R.id.account_settings_menu_auto_sync).setVisible(false);
+         } else {
+             Log.w(TAG, "Method onPrepareOptionsMenu called before mProfiles was initialized");
          }
     }
 
diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index e24d83f..c15ac41 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -124,7 +124,7 @@
     public void setEnabled(boolean enabled) {
         super.setEnabled(enabled);
         mTextView.setEnabled(enabled);
-        mSwitch.setEnabled(false);
+        mSwitch.setEnabled(enabled);
     }
 
     public final ToggleSwitch getSwitch() {
diff --git a/src/com/android/settings/wifi/AdvancedWifiSettings.java b/src/com/android/settings/wifi/AdvancedWifiSettings.java
index 236aecd..a57097b 100644
--- a/src/com/android/settings/wifi/AdvancedWifiSettings.java
+++ b/src/com/android/settings/wifi/AdvancedWifiSettings.java
@@ -135,7 +135,9 @@
             wifiAssistant.setOnPreferenceChangeListener(this);
             wifiAssistant.setChecked(checked);
         } else {
-            getPreferenceScreen().removePreference(wifiAssistant);
+            if (wifiAssistant != null) {
+                getPreferenceScreen().removePreference(wifiAssistant);
+            }
         }
 
         Intent wifiDirectIntent = new Intent(context,
diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
index a91d153..10c86dc 100644
--- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
@@ -53,6 +53,9 @@
     private Bundle mAccessPointSavedState;
     private AccessPoint mSelectedAccessPoint;
 
+    // Instance state key
+    private static final String SAVE_DIALOG_ACCESS_POINT_STATE = "wifi_ap_state";
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -69,6 +72,13 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
+
+        if (savedInstanceState != null) {
+            if (savedInstanceState.containsKey(SAVE_DIALOG_ACCESS_POINT_STATE)) {
+                mAccessPointSavedState =
+                    savedInstanceState.getBundle(SAVE_DIALOG_ACCESS_POINT_STATE);
+            }
+        }
     }
 
     private void initPreferences() {
@@ -150,6 +160,11 @@
     public Dialog onCreateDialog(int dialogId) {
         switch (dialogId) {
             case WifiSettings.WIFI_DIALOG_ID:
+                if (mDlgAccessPoint == null) { // For re-launch from saved state
+                    mDlgAccessPoint = new AccessPoint(getActivity(), mAccessPointSavedState);
+                    // Reset the saved access point data
+                    mAccessPointSavedState = null;
+                }
                 mSelectedAccessPoint = mDlgAccessPoint;
                 mDialog = new WifiDialog(getActivity(), this, mDlgAccessPoint, false);
                 return mDialog;
@@ -159,6 +174,20 @@
     }
 
     @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        // If the dialog is showing, save its state.
+        if (mDialog != null && mDialog.isShowing()) {
+            if (mDlgAccessPoint != null) {
+                mAccessPointSavedState = new Bundle();
+                mDlgAccessPoint.saveWifiState(mAccessPointSavedState);
+                outState.putBundle(SAVE_DIALOG_ACCESS_POINT_STATE, mAccessPointSavedState);
+            }
+        }
+    }
+
+    @Override
     public void onClick(DialogInterface dialogInterface, int button) {
         if (button == WifiDialog.BUTTON_FORGET && mSelectedAccessPoint != null) {
             mWifiManager.forget(mSelectedAccessPoint.networkId, null);