Merge "Slate ephemeral user deletion in systemReady()" into sc-dev
This commit is contained in:
@@ -24228,7 +24228,13 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mPermissionManager.onSystemReady();
|
||||
|
||||
int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
|
||||
for (int userId : UserManagerService.getInstance().getUserIds()) {
|
||||
final List<UserInfo> livingUsers = mInjector.getUserManagerInternal().getUsers(
|
||||
/* excludePartial= */ true,
|
||||
/* excludeDying= */ true,
|
||||
/* excludePreCreated= */ false);
|
||||
final int livingUserCount = livingUsers.size();
|
||||
for (int i = 0; i < livingUserCount; i++) {
|
||||
final int userId = livingUsers.get(i).id;
|
||||
if (mPmInternal.isPermissionUpgradeNeeded(userId)) {
|
||||
grantPermissionsUserIds = ArrayUtils.appendInt(
|
||||
grantPermissionsUserIds, userId);
|
||||
|
||||
@@ -699,6 +699,8 @@ public class UserManagerService extends IUserManager.Stub {
|
||||
mContext.registerReceiver(mConfigurationChangeReceiver,
|
||||
new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED),
|
||||
null, mHandler);
|
||||
|
||||
markEphemeralUsersForRemoval();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -709,17 +711,33 @@ public class UserManagerService extends IUserManager.Stub {
|
||||
return mLocalService;
|
||||
}
|
||||
|
||||
/** Marks all ephemeral users as slated for deletion. **/
|
||||
private void markEphemeralUsersForRemoval() {
|
||||
synchronized (mUsersLock) {
|
||||
final int userSize = mUsers.size();
|
||||
for (int i = 0; i < userSize; i++) {
|
||||
final UserInfo ui = mUsers.valueAt(i).info;
|
||||
if (ui.isEphemeral() && !ui.preCreated && ui.id != UserHandle.USER_SYSTEM) {
|
||||
addRemovingUserIdLocked(ui.id);
|
||||
ui.partial = true;
|
||||
ui.flags |= UserInfo.FLAG_DISABLED;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Prunes out any partially created or partially removed users. */
|
||||
void cleanupPartialUsers() {
|
||||
// Prune out any partially created, partially removed and ephemeral users.
|
||||
ArrayList<UserInfo> partials = new ArrayList<>();
|
||||
synchronized (mUsersLock) {
|
||||
final int userSize = mUsers.size();
|
||||
for (int i = 0; i < userSize; i++) {
|
||||
UserInfo ui = mUsers.valueAt(i).info;
|
||||
if ((ui.partial || ui.guestToRemove || (ui.isEphemeral() && !ui.preCreated))
|
||||
&& i != 0) {
|
||||
if ((ui.partial || ui.guestToRemove) && ui.id != UserHandle.USER_SYSTEM) {
|
||||
partials.add(ui);
|
||||
addRemovingUserIdLocked(ui.id);
|
||||
if (!mRemovingUserIds.get(ui.id)) {
|
||||
addRemovingUserIdLocked(ui.id);
|
||||
}
|
||||
ui.partial = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user