Use UserManager instead of PackageManager for user management

Show Accounts in secondary settings
Move Users & restrictions to Device section

Change-Id: Idcd7ed44801fe92c847cff81d11f3d6f6d06ba81
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index ebbec5dd..e6e6cff 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -96,12 +96,17 @@
 
     // Show only these settings for restricted users
     private int[] SETTINGS_FOR_RESTRICTED = {
+            R.id.wireless_section,
             R.id.wifi_settings,
             R.id.bluetooth_settings,
+            R.id.device_section,
             R.id.sound_settings,
             R.id.display_settings,
+            R.id.personal_section,
             R.id.security_settings,
             R.id.account_settings,
+            R.id.account_add,
+            R.id.system_section,
             R.id.about_settings
     };
 
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index 2a8c29c..1f4f39b 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -35,6 +36,7 @@
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.UserManager;
 import android.preference.CheckBoxPreference;
 import android.preference.EditTextPreference;
 import android.preference.Preference;
@@ -91,6 +93,7 @@
 
     private IPackageManager mIPm;
     private PackageManager mPm;
+    private UserManager mUm;
     private int mUserId;
     private boolean mNewUser;
 
@@ -102,12 +105,10 @@
         mNewUser = args == null || args.getInt(EXTRA_USER_ID, -1) == -1;
         mUserId = mNewUser ? -1 : args.getInt(EXTRA_USER_ID, -1);
         mIPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
+        mUm = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
 
         if (mUserId == -1) {
-            try {
-                mUserId = mIPm.createUser(getString(R.string.user_new_user_name), 0).id;
-            } catch (RemoteException re) {
-            }
+            mUserId = mUm.createUser(getString(R.string.user_new_user_name), 0).id;
         }
         mSystemAppGroup = (PreferenceGroup) findPreference(KEY_SYSTEM_APPS);
         mInstalledAppGroup = (PreferenceGroup) findPreference(KEY_INSTALLED_APPS);
@@ -161,7 +162,7 @@
     }
 
     private void initExistingUser() {
-        List<UserInfo> users = mPm.getUsers();
+        List<UserInfo> users = mUm.getUsers();
         UserInfo foundUser = null;
         for (UserInfo user : users) {
             if (user.id == mUserId) {
@@ -193,12 +194,7 @@
     }
 
     private void removeUserNow() {
-        try {
-            mIPm.removeUser(mUserId);
-        } catch (RemoteException re) {
-            // Couldn't remove user. Shouldn't happen
-            Log.e(TAG, "Couldn't remove user " + mUserId + "\n" + re);
-        }
+        mUm.removeUser(mUserId);
         finish();
     }
 
@@ -276,12 +272,8 @@
             if (TextUtils.isEmpty(name)) {
                 return false;
             }
-            try {
-                mIPm.setUserName(mUserId, (String) newValue);
-                mNamePref.setSummary((String) newValue);
-            } catch (RemoteException re) {
-                return false;
-            }
+            mUm.setUserName(mUserId, (String) newValue);
+            mNamePref.setSummary((String) newValue);
         }
         return true;
     }
@@ -354,17 +346,14 @@
     }
 
     private void saveCroppedImage(Intent data) {
-        try {
-            if (data.hasExtra("data")) {
-                Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
-                ParcelFileDescriptor fd = mIPm.setUserIcon(mUserId);
-                if (fd != null) {
-                    bitmap.compress(CompressFormat.PNG, 100,
-                            new ParcelFileDescriptor.AutoCloseOutputStream(fd));
-                    setPhotoId(mPm.getUser(mUserId).iconPath);
-                }
+        if (data.hasExtra("data")) {
+            Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
+            ParcelFileDescriptor fd = mUm.setUserIcon(mUserId);
+            if (fd != null) {
+                bitmap.compress(CompressFormat.PNG, 100,
+                        new ParcelFileDescriptor.AutoCloseOutputStream(fd));
+                setPhotoId(mUm.getUserInfo(mUserId).iconPath);
             }
-        } catch (RemoteException re) {
         }
     }
 
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index d32cb45..e530493 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -16,9 +16,11 @@
 
 package com.android.settings.users;
 
+import android.content.Context;
 import android.content.pm.UserInfo;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceActivity;
@@ -80,7 +82,8 @@
     }
 
     private void updateUserList() {
-        List<UserInfo> users = getActivity().getPackageManager().getUsers();
+        List<UserInfo> users = ((UserManager) getActivity().getSystemService(Context.USER_SERVICE))
+                .getUsers();
 
         mUserListCategory.removeAll();
         for (UserInfo user : users) {