Merge "Use new color avatar assets" into jb-mr1-dev
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index a5f021f..c0440c8 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -182,6 +182,10 @@
         }
     }
 
+    public void onDialogShowing() {
+        // override in subclass to attach a dismiss listener, for instance
+    }
+
     public static class SettingsDialogFragment extends DialogFragment {
         private static final String KEY_DIALOG_ID = "key_dialog_id";
         private static final String KEY_PARENT_FRAGMENT_ID = "key_parent_fragment_id";
@@ -216,6 +220,15 @@
         }
 
         @Override
+        public void onStart() {
+            super.onStart();
+
+            if (mParentFragment != null && mParentFragment instanceof SettingsPreferenceFragment) {
+                ((SettingsPreferenceFragment) mParentFragment).onDialogShowing();
+            }
+        }
+
+        @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             if (savedInstanceState != null) {
                 mDialogId = savedInstanceState.getInt(KEY_DIALOG_ID, 0);
diff --git a/src/com/android/settings/SoundSettings.java b/src/com/android/settings/SoundSettings.java
index 3b02739..587acab 100644
--- a/src/com/android/settings/SoundSettings.java
+++ b/src/com/android/settings/SoundSettings.java
@@ -170,8 +170,11 @@
 
         Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
         if (vibrator == null || !vibrator.hasVibrator()) {
-            getPreferenceScreen().removePreference(mVibrateWhenRinging);
-            getPreferenceScreen().removePreference(mHapticFeedback);
+            removePreference(KEY_VIBRATE);
+            removePreference(KEY_HAPTIC_FEEDBACK);
+        }
+        if (!Utils.isVoiceCapable(getActivity())) {
+            removePreference(KEY_VIBRATE);
         }
 
         if (TelephonyManager.PHONE_TYPE_CDMA == activePhoneType) {
diff --git a/src/com/android/settings/accounts/AddAccountSettings.java b/src/com/android/settings/accounts/AddAccountSettings.java
index c5f2a9b..dffb1ee 100644
--- a/src/com/android/settings/accounts/AddAccountSettings.java
+++ b/src/com/android/settings/accounts/AddAccountSettings.java
@@ -55,7 +55,7 @@
  */
 public class AddAccountSettings extends Activity {
     /**
-     * 
+     *
      */
     private static final String KEY_ADD_CALLED = "AddAccountCalled";
 
@@ -71,6 +71,9 @@
 
     /* package */ static final String EXTRA_SELECTED_ACCOUNT = "selected_account";
 
+    // show additional info regarding the use of a device with multiple users
+    static final String EXTRA_HAS_MULTIPLE_USERS = "hasMultipleUsers";
+
     private static final int CHOOSE_ACCOUNT_REQUEST = 1;
 
     private static final int DLG_MULTIUSER_WARNING = 1;
@@ -193,6 +196,7 @@
         Bundle addAccountOptions = new Bundle();
         mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0);
         addAccountOptions.putParcelable(KEY_CALLER_IDENTITY, mPendingIntent);
+        addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS, Utils.hasMultipleUsers(this));
         AccountManager.get(this).addAccount(
                 accountType,
                 null, /* authTokenType */
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 7588c1a..c5b3f8c 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -605,7 +605,7 @@
             Log.i(TAG, "Have " + prefActList.size() + " number of activities in preferred list");
         boolean hasUsbDefaults = false;
         try {
-            hasUsbDefaults = mUsbManager.hasDefaults(packageName);
+            hasUsbDefaults = mUsbManager.hasDefaults(packageName, UserHandle.myUserId());
         } catch (RemoteException e) {
             Log.e(TAG, "mUsbManager.hasDefaults", e);
         }
@@ -1218,7 +1218,7 @@
         } else if(v == mActivitiesButton) {
             mPm.clearPackagePreferredActivities(packageName);
             try {
-                mUsbManager.clearDefaults(packageName);
+                mUsbManager.clearDefaults(packageName, UserHandle.myUserId());
             } catch (RemoteException e) {
                 Log.e(TAG, "mUsbManager.clearDefaults", e);
             }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 7d08d75..984ac08 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -56,6 +56,7 @@
 import com.android.settings.SelectableEditTextPreference;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -66,6 +67,11 @@
 
     private static final String TAG = "UserSettings";
 
+    /** UserId of the user being removed */
+    private static final String SAVE_REMOVING_USER = "removing_user";
+    /** UserId of the user that was just added */
+    private static final String SAVE_ADDING_USER = "adding_user";
+
     private static final String KEY_USER_NICKNAME = "user_nickname";
     private static final String KEY_USER_LIST = "user_list";
     private static final String KEY_USER_ME = "user_me";
@@ -142,6 +148,15 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        if (icicle != null) {
+            if (icicle.containsKey(SAVE_ADDING_USER)) {
+                mAddedUserId = icicle.getInt(SAVE_ADDING_USER);
+            }
+            if (icicle.containsKey(SAVE_REMOVING_USER)) {
+                mRemovingUserId = icicle.getInt(SAVE_REMOVING_USER);
+            }
+        }
+
         mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
         addPreferencesFromResource(R.xml.user_settings);
         mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST);
@@ -182,6 +197,14 @@
     }
 
     @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        outState.putInt(SAVE_ADDING_USER, mAddedUserId);
+        outState.putInt(SAVE_REMOVING_USER, mRemovingUserId);
+    }
+
+    @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         if (mIsOwner) {
             if (UserManager.getMaxSupportedUsers() > mUserManager.getUsers(false).size()) {
@@ -247,7 +270,6 @@
         synchronized (mUserLock) {
             if (mRemovingUserId == -1 && !mAddingUser) {
                 showDialog(DIALOG_ADD_USER);
-                setOnDismissListener(this);
             }
         }
     }
@@ -257,7 +279,6 @@
             if (mRemovingUserId == -1 && !mAddingUser) {
                 mRemovingUserId = userId;
                 showDialog(DIALOG_CONFIRM_REMOVE);
-                setOnDismissListener(this);
             }
         }
     }
@@ -268,10 +289,17 @@
     }
 
     @Override
+    public void onDialogShowing() {
+        super.onDialogShowing();
+
+        setOnDismissListener(this);
+    }
+
+    @Override
     public Dialog onCreateDialog(int dialogId) {
         switch (dialogId) {
-            case DIALOG_CONFIRM_REMOVE:
-                return new AlertDialog.Builder(getActivity())
+            case DIALOG_CONFIRM_REMOVE: {
+                Dialog dlg = new AlertDialog.Builder(getActivity())
                     .setTitle(UserHandle.myUserId() == mRemovingUserId
                             ? R.string.user_confirm_remove_self_title
                             : R.string.user_confirm_remove_title)
@@ -286,12 +314,14 @@
                     })
                     .setNegativeButton(android.R.string.cancel, null)
                     .create();
+                return dlg;
+            }
             case DIALOG_USER_CANNOT_MANAGE:
                 return new AlertDialog.Builder(getActivity())
                     .setMessage(R.string.user_cannot_manage_message)
                     .setPositiveButton(android.R.string.ok, null)
                     .create();
-            case DIALOG_ADD_USER:
+            case DIALOG_ADD_USER: {
                 final SharedPreferences preferences = getActivity().getPreferences(
                         Context.MODE_PRIVATE);
                 final boolean longMessageDisplayed = preferences.getBoolean(
@@ -299,7 +329,7 @@
                 final int messageResId = longMessageDisplayed
                         ? R.string.user_add_user_message_short
                         : R.string.user_add_user_message_long;
-                return new AlertDialog.Builder(getActivity())
+                Dialog dlg = new AlertDialog.Builder(getActivity())
                 .setTitle(R.string.user_add_user_title)
                 .setMessage(messageResId)
                 .setPositiveButton(android.R.string.ok,
@@ -314,8 +344,10 @@
                 })
                 .setNegativeButton(android.R.string.cancel, null)
                 .create();
-            case DIALOG_SETUP_USER:
-                return new AlertDialog.Builder(getActivity())
+                return dlg;
+            }
+            case DIALOG_SETUP_USER: {
+                Dialog dlg = new AlertDialog.Builder(getActivity())
                 .setTitle(R.string.user_setup_dialog_title)
                 .setMessage(R.string.user_setup_dialog_message)
                 .setPositiveButton(R.string.user_setup_button_setup_now,
@@ -326,7 +358,8 @@
                 })
                 .setNegativeButton(R.string.user_setup_button_setup_later, null)
                 .create();
-
+                return dlg;
+            }
             default:
                 return null;
         }
@@ -398,9 +431,7 @@
         final ArrayList<Integer> missingIcons = new ArrayList<Integer>();
         for (UserInfo user : users) {
             Preference pref;
-            if (user.id == mRemovingUserId) {
-                continue;
-            } else if (user.id == UserHandle.myUserId()) {
+            if (user.id == UserHandle.myUserId()) {
                 pref = mMePreference;
                 mNicknamePreference.setText(user.name);
                 mNicknamePreference.setSummary(user.name);
@@ -546,6 +577,7 @@
         synchronized (mUserLock) {
             mAddingUser = false;
             mRemovingUserId = -1;
+            updateUserList();
         }
     }