From f04121f0aa3c988799d6efc92f1697e00a84f76a Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Wed, 5 Oct 2022 17:49:54 -0700 Subject: 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 --- .../server/inputmethod/InputMethodManagerService.java | 7 +++++-- .../core/java/com/android/server/pm/UserManagerInternal.java | 12 ++++++++++++ .../core/java/com/android/server/pm/UserManagerService.java | 7 +++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index ab05e034562b..28a62f53f356 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -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; diff --git a/services/core/java/com/android/server/pm/UserManagerInternal.java b/services/core/java/com/android/server/pm/UserManagerInternal.java index b9770254fb46..56ec8e46291d 100644 --- a/services/core/java/com/android/server/pm/UserManagerInternal.java +++ b/services/core/java/com/android/server/pm/UserManagerInternal.java @@ -247,6 +247,18 @@ public abstract class UserManagerInternal { public abstract @NonNull List getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated); + /** + * Returns an array of ids for profiles associated with the specified user including the user + * itself. + *

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. diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 0a89d131eda2..0a4669c0aace 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -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; -- cgit v1.2.3-59-g8ed1b