Merge "Adding internal version of getUsers without permission check." into rvc-dev am: 467891337c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11909341

Change-Id: Ib83d521361216540d619d7a758c39fafabe6a4b9
This commit is contained in:
TreeHugger Robot
2020-06-19 16:05:42 +00:00
committed by Automerger Merge Worker
3 changed files with 24 additions and 4 deletions

View File

@@ -27,6 +27,7 @@ import com.android.server.pm.RestrictionsSet;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
/**
* @hide Only for use within the system server.
@@ -218,6 +219,13 @@ public abstract class UserManagerInternal {
*/
public abstract int[] getUserIds();
/**
* Internal implementation of getUsers does not check permissions.
* This improves performance for calls from inside system server which already have permissions
* checked.
*/
public abstract @NonNull List<UserInfo> getUsers(boolean excludeDying);
/**
* Checks if the {@code callingUserId} and {@code targetUserId} are same or in same group
* and that the {@code callingUserId} is not a profile and {@code targetUserId} is enabled.

View File

@@ -2988,7 +2988,7 @@ public class PackageManagerService extends IPackageManager.Stub
t.traceEnd();
t.traceBegin("read user settings");
mFirstBoot = !mSettings.readLPw(mUserManager.getUsers(false));
mFirstBoot = !mSettings.readLPw(mInjector.getUserManagerInternal().getUsers(false));
t.traceEnd();
// Clean up orphaned packages for which the code path doesn't exist
@@ -3431,7 +3431,7 @@ public class PackageManagerService extends IPackageManager.Stub
// boot, then we need to initialize the default preferred apps across
// all defined users.
if (!mOnlyCore && (mPromoteSystemApps || mFirstBoot)) {
for (UserInfo user : mUserManager.getUsers(true)) {
for (UserInfo user : mInjector.getUserManagerInternal().getUsers(true)) {
mSettings.applyDefaultPreferredAppsLPw(user.id);
primeDomainVerificationsLPw(user.id);
}
@@ -22143,7 +22143,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
for (String packageName : apkList) {
setSystemAppHiddenUntilInstalled(packageName, true);
for (UserInfo user : mUserManager.getUsers(false)) {
for (UserInfo user : mInjector.getUserManagerInternal().getUsers(false)) {
setSystemAppInstallState(packageName, false, user.id);
}
}

View File

@@ -751,13 +751,19 @@ public class UserManagerService extends IUserManager.Stub {
}
public @NonNull List<UserInfo> getUsers(boolean excludeDying) {
return getUsers(/*excludePartial= */ true, excludeDying, /* excludePreCreated= */ true);
return getUsers(/*excludePartial= */ true, excludeDying, /* excludePreCreated= */
true);
}
@Override
public @NonNull List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying,
boolean excludePreCreated) {
checkManageOrCreateUsersPermission("query users");
return getUsersInternal(excludePartial, excludeDying, excludePreCreated);
}
private @NonNull List<UserInfo> getUsersInternal(boolean excludePartial, boolean excludeDying,
boolean excludePreCreated) {
synchronized (mUsersLock) {
ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUsers.size());
final int userSize = mUsers.size();
@@ -5044,6 +5050,12 @@ public class UserManagerService extends IUserManager.Stub {
return UserManagerService.this.getUserIds();
}
@Override
public @NonNull List<UserInfo> getUsers(boolean excludeDying) {
return UserManagerService.this.getUsersInternal(/*excludePartial= */ true,
excludeDying, /* excludePreCreated= */ true);
}
@Override
public boolean isUserUnlockingOrUnlocked(@UserIdInt int userId) {
int state;