diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index ab05e034562b2..28a62f53f356c 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 b9770254fb462..56ec8e46291d9 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 0a89d131eda2a..0a4669c0aace6 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;