Add UserManagerInternal#getProfileIds()

The public API

  int[] UserManager#getProfileIds(int userId, boolean enabledOnly)

looks to be used enough in system_server process.  Let's have it in
UserManagerInternal as well.

Bug: 234882948
Test: atest CtsInputMethodServiceHostTestCases:MultiUserTest
Change-Id: Ie1e6bab0f9a5d2801ad57c89c23f0798276d8aa2
This commit is contained in:
Yohei Yukawa
2022-10-05 17:49:54 -07:00
parent fc48388a5b
commit f04121f0aa
3 changed files with 24 additions and 2 deletions

View File

@@ -1926,7 +1926,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
void updateCurrentProfileIds() {
mSettings.setCurrentProfileIds(
mUserManager.getProfileIdsWithDisabled(mSettings.getCurrentUserId()));
mUserManagerInternal.getProfileIds(mSettings.getCurrentUserId(),
false /* enabledOnly */));
}
@Override
@@ -3669,7 +3670,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
scheduleSwitchUserTaskLocked(userId, cs.mClient);
return InputBindResult.USER_SWITCHING;
}
for (int profileId : mUserManager.getProfileIdsWithDisabled(nextUserId)) {
final int[] profileIdsWithDisabled = mUserManagerInternal.getProfileIds(
mSettings.getCurrentUserId(), false /* enabledOnly */);
for (int profileId : profileIdsWithDisabled) {
if (profileId == userId) {
scheduleSwitchUserTaskLocked(userId, cs.mClient);
return InputBindResult.USER_SWITCHING;

View File

@@ -247,6 +247,18 @@ public abstract class UserManagerInternal {
public abstract @NonNull List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying,
boolean excludePreCreated);
/**
* Returns an array of ids for profiles associated with the specified user including the user
* itself.
* <p>Note that this includes all profile types (not including Restricted profiles).
*
* @param userId id of the user to return profiles for
* @param enabledOnly whether return only {@link UserInfo#isEnabled() enabled} profiles
* @return A non-empty array of ids of profiles associated with the specified user if the user
* exists. Otherwise, an empty array.
*/
public abstract @NonNull int[] getProfileIds(@UserIdInt int userId, boolean enabledOnly);
/**
* 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

@@ -6699,6 +6699,13 @@ public class UserManagerService extends IUserManager.Stub {
excludePreCreated);
}
@Override
public @NonNull int[] getProfileIds(@UserIdInt int userId, boolean enabledOnly) {
synchronized (mUsersLock) {
return getProfileIdsLU(userId, null /* userType */, enabledOnly).toArray();
}
}
@Override
public boolean isUserUnlockingOrUnlocked(@UserIdInt int userId) {
int state;