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
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index ab05e03..28a62f5 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 @@
void updateCurrentProfileIds() {
mSettings.setCurrentProfileIds(
- mUserManager.getProfileIdsWithDisabled(mSettings.getCurrentUserId()));
+ mUserManagerInternal.getProfileIds(mSettings.getCurrentUserId(),
+ false /* enabledOnly */));
}
@Override
@@ -3669,7 +3670,9 @@
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 b977025..56ec8e4 100644
--- a/services/core/java/com/android/server/pm/UserManagerInternal.java
+++ b/services/core/java/com/android/server/pm/UserManagerInternal.java
@@ -248,6 +248,18 @@
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.
*
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 0a89d13..0a4669c 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -6700,6 +6700,13 @@
}
@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;
synchronized (mUserStates) {