Merge "User restrictions for creds storage & user removal" into jb-mr2-dev
diff --git a/Android.mk b/Android.mk
index 22c7143..c8b81dc 100644
--- a/Android.mk
+++ b/Android.mk
@@ -13,6 +13,8 @@
 
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags
 
+LOCAL_AAPT_FLAGS += -c zz_ZZ
+
 include $(BUILD_PACKAGE)
 
 # Use the folloing include to make our test apk.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e9218e1..8a779c9 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -87,16 +87,6 @@
             </intent-filter>
         </activity>
 
-        <!-- User Restrictions activity -->
-
-        <activity android:name=".users.UserRestrictionsActivity"
-                android:label="@string/user_restrictions_title">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
         <activity android:name=".SubSettings"
                 android:taskAffinity="com.android.settings"
                 android:parentActivityName="Settings">
diff --git a/src/com/android/settings/LocalePicker.java b/src/com/android/settings/LocalePicker.java
index 8ea99a1..6600703 100644
--- a/src/com/android/settings/LocalePicker.java
+++ b/src/com/android/settings/LocalePicker.java
@@ -23,8 +23,10 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ListView;
+import android.content.Context;
 
 import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment;
+import com.android.settings.DevelopmentSettings;
 
 import java.util.Locale;
 
@@ -46,6 +48,15 @@
     }
 
     @Override
+    protected boolean isInDeveloperMode() {
+        final boolean showDev = getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
+                Context.MODE_PRIVATE).getBoolean(
+                DevelopmentSettings.PREF_SHOW,
+                android.os.Build.TYPE.equals("eng"));
+        return showDev;
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_TARGET_LOCALE)) {
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index c2ff0d9..2a5adb1 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -238,7 +238,16 @@
                 // and want to pretend that the language is valid for all locales.
                 // We need a way to support languages that aren't tied to a particular
                 // locale instead of hiding the locale qualifier.
-                if (hasOnlyOneLanguageInstance(language,
+                if (language.equals("zz")) {
+                    String country = conf.locale.getCountry();
+                    if (country.equals("ZZ")) {
+                        localeString = "[Developer] Accented English (zz_ZZ)";
+                    } else if (country.equals("ZY")) {
+                        localeString = "[Developer] Fake Bi-Directional (zz_ZY)";
+                    } else {
+                        localeString = "";
+                    }
+                } else if (hasOnlyOneLanguageInstance(language,
                         Resources.getSystem().getAssets().getLocales())) {
                     localeString = conf.locale.getDisplayLanguage(conf.locale);
                 } else {
diff --git a/src/com/android/settings/users/AppRestrictionsFragment.java b/src/com/android/settings/users/AppRestrictionsFragment.java
index 9c5d47a..5e2868e 100644
--- a/src/com/android/settings/users/AppRestrictionsFragment.java
+++ b/src/com/android/settings/users/AppRestrictionsFragment.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.users;
 
+import android.app.Activity;
 import android.app.AppGlobals;
 import android.appwidget.AppWidgetManager;
 import android.content.BroadcastReceiver;
@@ -37,6 +38,7 @@
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.preference.CheckBoxPreference;
@@ -71,6 +73,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.StringTokenizer;
 
@@ -95,9 +98,17 @@
     private static final int MAX_APP_RESTRICTIONS = 100;
 
     private static final String DELIMITER = ";";
+
+    /** Key for extra passed in from calling fragment for the userId of the user being edited */
+    public static final String EXTRA_USER_ID = "user_id";
+
+    /** Key for extra passed in from calling fragment to indicate if this is a newly created user */
+    public static final String EXTRA_NEW_USER = "new_user";
+
     HashMap<String,Boolean> mSelectedPackages = new HashMap<String,Boolean>();
     private boolean mFirstTime = true;
     private boolean mNewUser;
+    private boolean mAppListChanged;
 
     private int mCustomRequestCode;
     private HashMap<Integer, AppRestrictionsPreference> mCustomRequestMap =
@@ -117,16 +128,6 @@
         }
     }
 
-    public static class Activity extends PreferenceActivity {
-        @Override
-        public Intent getIntent() {
-            Intent modIntent = new Intent(super.getIntent());
-            modIntent.putExtra(EXTRA_SHOW_FRAGMENT, AppRestrictionsFragment.class.getName());
-            modIntent.putExtra(EXTRA_NO_HEADERS, true);
-            return modIntent;
-        }
-    }
-
     static class AppRestrictionsPreference extends SwitchPreference {
         private boolean hasSettings;
         private OnClickListener listener;
@@ -206,6 +207,17 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        if (icicle != null) {
+            mNewUser = icicle.getBoolean(EXTRA_NEW_USER, false);
+            mUser = new UserHandle(icicle.getInt(EXTRA_USER_ID));
+        } else {
+            Bundle args = getArguments();
+
+            if (args.containsKey(EXTRA_USER_ID)) {
+                mUser = new UserHandle(args.getInt(EXTRA_USER_ID));
+            }
+            mNewUser = args.getBoolean(EXTRA_NEW_USER, false);
+        }
         mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
         addPreferencesFromResource(R.xml.app_restrictions);
         mAppList = getPreferenceScreen();
@@ -218,13 +230,16 @@
         setHasOptionsMenu(true);
     }
 
-    void setUser(UserHandle user, boolean newUser) {
-        mUser = user;
-        mNewUser = newUser;
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putBoolean(EXTRA_NEW_USER, mNewUser);
+        outState.putInt(EXTRA_USER_ID, mUser.getIdentifier());
     }
 
     public void onResume() {
         super.onResume();
+        mAppListChanged = false;
         if (mFirstTime) {
             mFirstTime = false;
             populateApps();
@@ -238,6 +253,34 @@
         mUserPreference.setText(info.name);
     }
 
+    public void onPause() {
+        super.onPause();
+        if (mAppListChanged) {
+            updateUserAppList();
+        }
+    }
+
+    private void updateUserAppList() {
+        IPackageManager ipm = IPackageManager.Stub.asInterface(
+                ServiceManager.getService("package"));
+        for (Map.Entry<String,Boolean> entry : mSelectedPackages.entrySet()) {
+            if (entry.getValue()) {
+                // Enable selected apps
+                try {
+                    ipm.installExistingPackageAsUser(entry.getKey(), mUser.getIdentifier());
+                } catch (RemoteException re) {
+                }
+            } else {
+                // Blacklist all other apps, system or downloaded
+                try {
+                    ipm.deletePackageAsUser(entry.getKey(), null, mUser.getIdentifier(),
+                            PackageManager.DELETE_SYSTEM_APP);
+                } catch (RemoteException re) {
+                }
+            }
+        }
+    }
+
     private void addSystemApps(List<SelectableAppInfo> visibleApps, Intent intent) {
         final PackageManager pm = getActivity().getPackageManager();
         List<ResolveInfo> launchableApps = pm.queryIntentActivities(intent, 0);
@@ -341,6 +384,7 @@
             for (SelectableAppInfo app : visibleApps) {
                 String packageName = app.packageName;
                 if (packageName == null) continue;
+                final boolean isSettingsApp = packageName.equals(getActivity().getPackageName());
                 AppRestrictionsPreference p = new AppRestrictionsPreference(context, this);
                 final boolean hasSettings = resolveInfoListHasPackage(receivers, packageName);
                 p.setIcon(app.icon);
@@ -350,8 +394,7 @@
                             app.masterEntry.activityName));
                 }
                 p.setKey(PKG_PREFIX + packageName);
-                p.setSettingsEnabled(hasSettings
-                        || packageName.equals(getActivity().getPackageName()));
+                p.setSettingsEnabled(hasSettings || isSettingsApp);
                 p.setPersistent(false);
                 p.setOnPreferenceChangeListener(this);
                 p.setOnPreferenceClickListener(this);
@@ -368,7 +411,7 @@
                     p.setChecked(true);
                     p.setImmutable(true);
                     // If the app is required and has no restrictions, skip showing it
-                    if (!hasSettings) continue;
+                    if (!hasSettings && !isSettingsApp) continue;
                 } else if (!mNewUser && appInfoListHasPackage(userApps, packageName)) {
                     p.setChecked(true);
                 }
@@ -377,12 +420,13 @@
                     p.setChecked(mSelectedPackages.get(packageName));
                 }
                 mAppList.addPreference(p);
-                if (packageName.equals(getActivity().getPackageName())) {
+                if (isSettingsApp) {
                     p.setOrder(MAX_APP_RESTRICTIONS * 1);
                 } else {
                     p.setOrder(MAX_APP_RESTRICTIONS * (i + 2));
                 }
                 mSelectedPackages.put(packageName, p.isChecked());
+                mAppListChanged = true;
                 i++;
             }
         }
@@ -437,6 +481,7 @@
                 pref.setChecked(!pref.isChecked());
                 mSelectedPackages.put(pref.getKey().substring(PKG_PREFIX.length()),
                         pref.isChecked());
+                mAppListChanged = true;
                 updateAllEntries(pref.getKey(), pref.isChecked());
             }
         }
@@ -689,6 +734,7 @@
                 arp.setChecked(!arp.isChecked());
                 mSelectedPackages.put(arp.getKey().substring(PKG_PREFIX.length()), arp.isChecked());
                 updateAllEntries(arp.getKey(), arp.isChecked());
+                mAppListChanged = true;
             }
             return true;
         }
diff --git a/src/com/android/settings/users/UserRestrictionsActivity.java b/src/com/android/settings/users/UserRestrictionsActivity.java
deleted file mode 100644
index 1a90a81..0000000
--- a/src/com/android/settings/users/UserRestrictionsActivity.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.users;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.app.Activity;
-import android.content.Context;
-import android.content.pm.IPackageManager;
-import android.content.pm.PackageManager;
-import android.content.pm.UserInfo;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-
-import com.android.settings.R;
-
-import java.util.Map;
-
-public class UserRestrictionsActivity extends Activity implements OnClickListener {
-
-    private static final String TAG = UserRestrictionsActivity.class.getSimpleName();
-
-    static final String EXTRA_USER_NAME = "user_name";
-    static final String EXTRA_USER_ID = "user_id";
-    static final String EXTRA_ACCOUNTS = "accounts";
-
-    private Button mFinishButton;
-    private Button mBackButton;
-    private AppRestrictionsFragment mAppsFragment;
-    private UserInfo mUserInfo;
-    private boolean mNewUser;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.user_limits);
-
-        mBackButton = (Button) findViewById(R.id.back_button);
-        if (mBackButton != null) {
-            mBackButton.setOnClickListener(this);
-        }
-        mFinishButton = (Button) findViewById(R.id.next_button);
-        if (mFinishButton != null) {
-            mFinishButton.setOnClickListener(this);
-        }
-        mAppsFragment = (AppRestrictionsFragment)
-                getFragmentManager().findFragmentById(R.id.user_limits_fragment);
-
-        UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
-        String name = getIntent().getStringExtra(EXTRA_USER_NAME);
-        int userId = getIntent().getIntExtra(EXTRA_USER_ID, -1);
-        // Create the user so we have an id
-        if (userId == -1) {
-            mNewUser = true;
-            mUserInfo = um.createUser(name, UserInfo.FLAG_RESTRICTED);
-            um.setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true,
-                    new UserHandle(mUserInfo.id));
-
-            Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
-                    UserSettings.USER_DRAWABLES[
-                            mUserInfo.id % UserSettings.USER_DRAWABLES.length]);
-            um.setUserIcon(mUserInfo.id, bitmap);
-        } else {
-            mUserInfo = um.getUserInfo(userId);
-        }
-        if (mAppsFragment != null) {
-            mAppsFragment.setUser(new UserHandle(mUserInfo.id), mNewUser);
-        }
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v == mFinishButton) {
-            if (mNewUser) {
-                AccountManager am = AccountManager.get(this);
-                Account [] accounts = am.getAccounts();
-                if (accounts != null) {
-                    for (Account account : accounts) {
-                        am.addSharedAccount(account,
-                                new UserHandle(mUserInfo.id));
-                    }
-                }
-            }
-
-            IPackageManager ipm = IPackageManager.Stub.asInterface(
-                    ServiceManager.getService("package"));
-            for (Map.Entry<String,Boolean> entry : mAppsFragment.mSelectedPackages.entrySet()) {
-                if (entry.getValue()) {
-                    // Enable selected apps
-                    try {
-                        ipm.installExistingPackageAsUser(entry.getKey(), mUserInfo.id);
-                    } catch (RemoteException re) {
-                    }
-                } else {
-                    // Blacklist all other apps, system or downloaded
-                    try {
-                        ipm.deletePackageAsUser(entry.getKey(), null, mUserInfo.id,
-                                PackageManager.DELETE_SYSTEM_APP);
-                    } catch (RemoteException re) {
-                    }
-                }
-            }
-            setResult(RESULT_OK);
-            mUserInfo = null;
-            finish();
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-
-        if (mUserInfo != null && mNewUser) {
-            UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
-            um.removeUser(mUserInfo.id);
-        }
-    }
-}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 01d041a..a0e4c35 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -42,6 +42,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.preference.Preference;
+import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceGroup;
@@ -83,16 +84,20 @@
     private static final String KEY_ADD_RESTRICTED_USER = "user_add_restricted";
     private static final String KEY_ADD_TRUSTED_USER = "user_add_trusted";
 
-    private static final int MENU_ADD_USER = Menu.FIRST;
-    private static final int MENU_REMOVE_USER = Menu.FIRST+1;
+    private static final int MENU_REMOVE_USER = Menu.FIRST;
 
     private static final int DIALOG_CONFIRM_REMOVE = 1;
-    private static final int DIALOG_ADD_USER = 2;
-    private static final int DIALOG_SETUP_USER = 3;
-    private static final int DIALOG_USER_CANNOT_MANAGE = 4;
+    private static final int DIALOG_ADD_USER_TRUSTED = 2;
+    private static final int DIALOG_ADD_USER_LIMITED = 3;
+    private static final int DIALOG_SETUP_USER = 4;
+    private static final int DIALOG_USER_CANNOT_MANAGE = 5;
 
     private static final int MESSAGE_UPDATE_LIST = 1;
     private static final int MESSAGE_SETUP_USER = 2;
+    private static final int MESSAGE_CONFIG_USER = 3;
+
+    private static final int USER_TYPE_TRUSTED = 1;
+    private static final int USER_TYPE_LIMITED = 2;
 
     private static final String KEY_ADD_USER_LONG_MESSAGE_DISPLAYED =
             "key_add_user_long_message_displayed";
@@ -135,6 +140,9 @@
             case MESSAGE_SETUP_USER:
                 onUserCreated(msg.arg1);
                 break;
+            case MESSAGE_CONFIG_USER:
+                onManageUserClicked(msg.arg1, true);
+                break;
             }
         }
     };
@@ -238,10 +246,7 @@
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         final int itemId = item.getItemId();
-        if (itemId == MENU_ADD_USER) {
-            onAddUserClicked();
-            return true;
-        } else if (itemId == MENU_REMOVE_USER) {
+        if (itemId == MENU_REMOVE_USER) {
             onRemoveUserClicked(UserHandle.myUserId());
             return true;
         } else {
@@ -279,10 +284,17 @@
         }
     }
 
-    private void onAddUserClicked() {
+    private void onAddUserClicked(int userType) {
         synchronized (mUserLock) {
             if (mRemovingUserId == -1 && !mAddingUser) {
-                showDialog(DIALOG_ADD_USER);
+                switch (userType) {
+                case USER_TYPE_TRUSTED:
+                    showDialog(DIALOG_ADD_USER_TRUSTED);
+                    break;
+                case USER_TYPE_LIMITED:
+                    showDialog(DIALOG_ADD_USER_LIMITED);
+                    break;
+                }
             }
         }
     }
@@ -296,11 +308,50 @@
         }
     }
 
-    private void onManageUserClicked(int userId) {
-        Intent appsChooser = new Intent();
-        appsChooser.setClass(getActivity(), UserRestrictionsActivity.class);
-        appsChooser.putExtra(UserRestrictionsActivity.EXTRA_USER_ID, userId);
-        startActivity(appsChooser);
+    private UserInfo createLimitedUser() {
+        UserInfo newUserInfo = mUserManager.createUser(
+                getResources().getString(R.string.user_new_user_name),
+                UserInfo.FLAG_RESTRICTED);
+        int userId = newUserInfo.id;
+        UserHandle user = new UserHandle(userId);
+        mUserManager.setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true, user);
+
+        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
+                UserSettings.USER_DRAWABLES[
+                        userId % UserSettings.USER_DRAWABLES.length]);
+        mUserManager.setUserIcon(userId, bitmap);
+        // Add shared accounts
+        AccountManager am = AccountManager.get(getActivity());
+        Account [] accounts = am.getAccounts();
+        if (accounts != null) {
+            for (Account account : accounts) {
+                am.addSharedAccount(account, user);
+            }
+        }
+        return newUserInfo;
+    }
+
+    private UserInfo createTrustedUser() {
+        UserInfo newUserInfo = mUserManager.createUser(
+                getActivity().getResources().getString(R.string.user_new_user_name), 0);
+        if (newUserInfo != null) {
+            assignDefaultPhoto(newUserInfo);
+        }
+        return newUserInfo;
+    }
+
+    private void onManageUserClicked(int userId, boolean newUser) {
+        Bundle extras = new Bundle();
+        extras.putInt(AppRestrictionsFragment.EXTRA_USER_ID, userId);
+        extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
+        String title = getResources().getString(R.string.user_new_user_name);
+        if (userId > UserHandle.USER_OWNER) {
+            title = mUserManager.getUserInfo(userId).name;
+        }
+        ((PreferenceActivity) getActivity()).startPreferencePanel(
+                AppRestrictionsFragment.class.getName(),
+                extras, 0, title,
+                null, 0);
     }
 
     private void onUserCreated(int userId) {
@@ -341,7 +392,8 @@
                     .setMessage(R.string.user_cannot_manage_message)
                     .setPositiveButton(android.R.string.ok, null)
                     .create();
-            case DIALOG_ADD_USER: {
+            case DIALOG_ADD_USER_TRUSTED:
+            case DIALOG_ADD_USER_LIMITED: {
                 final SharedPreferences preferences = getActivity().getPreferences(
                         Context.MODE_PRIVATE);
                 final boolean longMessageDisplayed = preferences.getBoolean(
@@ -349,13 +401,15 @@
                 final int messageResId = longMessageDisplayed
                         ? R.string.user_add_user_message_short
                         : R.string.user_add_user_message_long;
+                final int userType = dialogId == DIALOG_ADD_USER_TRUSTED
+                        ? USER_TYPE_TRUSTED : USER_TYPE_LIMITED;
                 Dialog dlg = new AlertDialog.Builder(getActivity())
                 .setTitle(R.string.user_add_user_title)
                 .setMessage(messageResId)
                 .setPositiveButton(android.R.string.ok,
                     new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int which) {
-                            addUserNow();
+                            addUserNow(userType);
                             if (!longMessageDisplayed) {
                                 preferences.edit().putBoolean(KEY_ADD_USER_LONG_MESSAGE_DISPLAYED,
                                         true).commit();
@@ -410,23 +464,29 @@
         }
     }
 
-    private void addUserNow() {
+    private void addUserNow(final int userType) {
         synchronized (mUserLock) {
             mAddingUser = true;
             updateUserList();
             new Thread() {
                 public void run() {
+                    UserInfo user = null;
                     // Could take a few seconds
-                    UserInfo user = mUserManager.createUser(
-                            getActivity().getResources().getString(R.string.user_new_user_name), 0);
-                    if (user != null) {
-                        assignDefaultPhoto(user);
+                    if (userType == USER_TYPE_TRUSTED) {
+                        user = createTrustedUser();
+                    } else {
+                        user = createLimitedUser();
                     }
                     synchronized (mUserLock) {
                         mAddingUser = false;
                         mHandler.sendEmptyMessage(MESSAGE_UPDATE_LIST);
-                        mHandler.sendMessage(mHandler.obtainMessage(
-                                MESSAGE_SETUP_USER, user.id, user.serialNumber));
+                        if (userType == USER_TYPE_TRUSTED) {
+                            mHandler.sendMessage(mHandler.obtainMessage(
+                                    MESSAGE_SETUP_USER, user.id, user.serialNumber));
+                        } else {
+                            mHandler.sendMessage(mHandler.obtainMessage(
+                                    MESSAGE_CONFIG_USER, user.id, user.serialNumber));
+                        }
                     }
                 }
             }.start();
@@ -590,16 +650,9 @@
                 }
             }
         } else if (pref == mAddTrustedUser) {
-            onAddUserClicked();
+            onAddUserClicked(USER_TYPE_TRUSTED);
         } else if (pref == mAddRestrictedUser) {
-            Account[] accounts = ((AccountManager) getSystemService(Context.ACCOUNT_SERVICE))
-                    .getAccounts();
-            Intent intent = new Intent(getActivity(), UserRestrictionsActivity.class);
-            intent.putExtra(UserRestrictionsActivity.EXTRA_USER_NAME,
-                    getResources().getString(R.string.user_new_user_name));
-            intent.putExtra(UserRestrictionsActivity.EXTRA_ACCOUNTS,
-                    accounts);
-            startActivity(intent);
+            onAddUserClicked(USER_TYPE_LIMITED);
         }
         return false;
     }
@@ -627,7 +680,7 @@
                 onRemoveUserClicked(userId);
                 break;
             case UserPreference.SETTINGS_ID:
-                onManageUserClicked(userId);
+                onManageUserClicked(userId, false);
                 break;
             }
         }
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 138a9d3..63ef549 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -45,6 +45,7 @@
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
+import android.text.InputFilter;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
@@ -430,6 +431,7 @@
             return dialog;
         } else if (id == DIALOG_RENAME) {
             mDeviceNameText = new EditText(getActivity());
+            mDeviceNameText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(30)});
             if (mSavedDeviceName != null) {
                 mDeviceNameText.setText(mSavedDeviceName);
                 mDeviceNameText.setSelection(mSavedDeviceName.length());