summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2012-10-04 17:34:21 -0700
committerAmith Yamasani <yamasani@google.com>2012-10-04 17:34:21 -0700
commit634cf31345ae843392215237e741d76271a5cfed (patch)
treeee052a043f0d9522f55595068ac79763ce7818d4 /services
parent33c36895a294c7b731fd59017a7ea0f06ac2a356 (diff)
downloadframeworks_base-634cf31345ae843392215237e741d76271a5cfed.zip
frameworks_base-634cf31345ae843392215237e741d76271a5cfed.tar.gz
frameworks_base-634cf31345ae843392215237e741d76271a5cfed.tar.bz2
Fix serial number assignment for new user on a freshly wiped device
Bug: 7280093 User serial number was not being bumped up from 0 on a freshly wiped device due to the userlist not existing. This was resulting in the first 2 users getting the same serial number, messing up C2DM message delivery. This issue doesn't show up if you boot the device before adding a user, so it wasn't discovered earlier. Change-Id: I8a5d99b9ad2ccfb66a16cacac9548ba53f0be387
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/pm/UserManagerService.java7
1 files changed, 5 insertions, 2 deletions
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java
index a0326c5..4f9375a 100644
--- a/services/java/com/android/server/pm/UserManagerService.java
+++ b/services/java/com/android/server/pm/UserManagerService.java
@@ -78,6 +78,8 @@ public class UserManagerService extends IUserManager.Stub {
private static final String USER_LIST_FILENAME = "userlist.xml";
private static final String USER_PHOTO_FILENAME = "photo.png";
+ private static final int MIN_USER_ID = 10;
+
private static final long EPOCH_PLUS_30_YEARS = 30L * 365 * 24 * 60 * 60 * 1000L; // ms
private final Context mContext;
@@ -459,6 +461,7 @@ public class UserManagerService extends IUserManager.Stub {
UserInfo primary = new UserInfo(0, "Primary", null,
UserInfo.FLAG_ADMIN | UserInfo.FLAG_PRIMARY);
mUsers.put(0, primary);
+ mNextSerialNumber = MIN_USER_ID;
updateUserIdsLocked();
writeUserListLocked();
@@ -832,7 +835,7 @@ public class UserManagerService extends IUserManager.Stub {
*/
private int getNextAvailableIdLocked() {
synchronized (mPackagesLock) {
- int i = 10;
+ int i = MIN_USER_ID;
while (i < Integer.MAX_VALUE) {
if (mUsers.indexOfKey(i) < 0 && !mRemovingUserIds.contains(i)) {
break;
@@ -862,7 +865,7 @@ public class UserManagerService extends IUserManager.Stub {
for (int i = 0; i < mUsers.size(); i++) {
UserInfo user = mUsers.valueAt(i);
if (user == null) continue;
- pw.print(" "); pw.print(user);
+ pw.print(" "); pw.print(user); pw.print(" serialNo="); pw.print(user.serialNumber);
if (mRemovingUserIds.contains(mUsers.keyAt(i))) pw.print(" <removing> ");
if (user.partial) pw.print(" <partial>");
pw.println();