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();
|
mPermissionManager.onSystemReady();
|
||||||
|
|
||||||
int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
|
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)) {
|
if (mPmInternal.isPermissionUpgradeNeeded(userId)) {
|
||||||
grantPermissionsUserIds = ArrayUtils.appendInt(
|
grantPermissionsUserIds = ArrayUtils.appendInt(
|
||||||
grantPermissionsUserIds, userId);
|
grantPermissionsUserIds, userId);
|
||||||
|
|||||||
@@ -699,6 +699,8 @@ public class UserManagerService extends IUserManager.Stub {
|
|||||||
mContext.registerReceiver(mConfigurationChangeReceiver,
|
mContext.registerReceiver(mConfigurationChangeReceiver,
|
||||||
new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED),
|
new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED),
|
||||||
null, mHandler);
|
null, mHandler);
|
||||||
|
|
||||||
|
markEphemeralUsersForRemoval();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -709,17 +711,33 @@ public class UserManagerService extends IUserManager.Stub {
|
|||||||
return mLocalService;
|
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() {
|
void cleanupPartialUsers() {
|
||||||
// Prune out any partially created, partially removed and ephemeral users.
|
|
||||||
ArrayList<UserInfo> partials = new ArrayList<>();
|
ArrayList<UserInfo> partials = new ArrayList<>();
|
||||||
synchronized (mUsersLock) {
|
synchronized (mUsersLock) {
|
||||||
final int userSize = mUsers.size();
|
final int userSize = mUsers.size();
|
||||||
for (int i = 0; i < userSize; i++) {
|
for (int i = 0; i < userSize; i++) {
|
||||||
UserInfo ui = mUsers.valueAt(i).info;
|
UserInfo ui = mUsers.valueAt(i).info;
|
||||||
if ((ui.partial || ui.guestToRemove || (ui.isEphemeral() && !ui.preCreated))
|
if ((ui.partial || ui.guestToRemove) && ui.id != UserHandle.USER_SYSTEM) {
|
||||||
&& i != 0) {
|
|
||||||
partials.add(ui);
|
partials.add(ui);
|
||||||
addRemovingUserIdLocked(ui.id);
|
if (!mRemovingUserIds.get(ui.id)) {
|
||||||
|
addRemovingUserIdLocked(ui.id);
|
||||||
|
}
|
||||||
ui.partial = true;
|
ui.partial = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user