summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/UserManager.java33
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java2
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java19
3 files changed, 52 insertions, 2 deletions
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 37294e7..984f12f 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -721,6 +721,39 @@ public class UserManager {
}
/**
+ * Creates a secondary user with the specified name and options and configures it with default
+ * restrictions.
+ * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+ *
+ * @param name the user's name
+ * @param flags flags that identify the type of user and other properties.
+ * @see UserInfo
+ *
+ * @return the UserInfo object for the created user, or null if the user could not be created.
+ * @hide
+ */
+ public UserInfo createSecondaryUser(String name, int flags) {
+ try {
+ UserInfo user = mService.createUser(name, flags);
+ if (user == null) {
+ return null;
+ }
+ Bundle userRestrictions = mService.getUserRestrictions(user.id);
+ addDefaultUserRestrictions(userRestrictions);
+ mService.setUserRestrictions(userRestrictions, user.id);
+ return user;
+ } catch (RemoteException re) {
+ Log.w(TAG, "Could not create a user", re);
+ return null;
+ }
+ }
+
+ private static void addDefaultUserRestrictions(Bundle restrictions) {
+ restrictions.putBoolean(DISALLOW_OUTGOING_CALLS, true);
+ restrictions.putBoolean(DISALLOW_SMS, true);
+ }
+
+ /**
* Creates a user with the specified name and options as a profile of another user.
* Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
*
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
index bbe6622..eb808c2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -571,7 +571,7 @@ public class UserSwitcherController {
cancel();
} else {
dismiss();
- UserInfo user = mUserManager.createUser(
+ UserInfo user = mUserManager.createSecondaryUser(
mContext.getString(R.string.user_new_user_name), 0 /* flags */);
if (user == null) {
// Couldn't create user, most likely because there are too many, but we haven't
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 26e0db3..0cf2249 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -119,7 +119,7 @@ public class UserManagerService extends IUserManager.Stub {
private static final int MIN_USER_ID = 10;
- private static final int USER_VERSION = 4;
+ private static final int USER_VERSION = 5;
private static final long EPOCH_PLUS_30_YEARS = 30L * 365 * 24 * 60 * 60 * 1000L; // ms
@@ -462,6 +462,17 @@ public class UserManagerService extends IUserManager.Stub {
}
}
+ /**
+ * If default guest restrictions haven't been initialized yet, add the basic
+ * restrictions.
+ */
+ private void initDefaultGuestRestrictions() {
+ if (mGuestRestrictions.isEmpty()) {
+ mGuestRestrictions.putBoolean(UserManager.DISALLOW_OUTGOING_CALLS, true);
+ writeUserListLocked();
+ }
+ }
+
@Override
public Bundle getDefaultGuestRestrictions() {
checkManageUsersPermission("getDefaultGuestRestrictions");
@@ -693,6 +704,11 @@ public class UserManagerService extends IUserManager.Stub {
userVersion = 4;
}
+ if (userVersion < 5) {
+ initDefaultGuestRestrictions();
+ userVersion = 5;
+ }
+
if (userVersion < USER_VERSION) {
Slog.w(LOG_TAG, "User version " + mUserVersion + " didn't upgrade as expected to "
+ USER_VERSION);
@@ -715,6 +731,7 @@ public class UserManagerService extends IUserManager.Stub {
mUserRestrictions.append(UserHandle.USER_OWNER, restrictions);
updateUserIdsLocked();
+ initDefaultGuestRestrictions();
writeUserListLocked();
writeUserLocked(primary);