Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3bc60ad6 authored by Anna Bauza's avatar Anna Bauza Committed by Android (Google) Code Review
Browse files

Merge "Cache list of UserInfo for getProfiles method in UserManager." into main

parents 9b4fcde9 e8a500fa
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -5308,7 +5308,13 @@ public class UserManager {
            Manifest.permission.MANAGE_USERS,
            Manifest.permission.CREATE_USERS,
            Manifest.permission.QUERY_USERS}, conditional = true)
    @CachedProperty(api = "user_manager_user_data")
    public List<UserInfo> getProfiles(@UserIdInt int userId) {
        if (android.multiuser.Flags.cacheProfilesReadOnly()) {
            return UserManagerCache.getProfiles(
                    (Integer userIdentifier) -> mService.getProfiles(userIdentifier, false),
                    userId);
        }
        try {
            return mService.getProfiles(userId, false /* enabledOnly */);
        } catch (RemoteException re) {
@@ -6483,6 +6489,19 @@ public class UserManager {
        }
    }

    /**
     * This method is used to invalidate caches, when UserManagerService.mUsers
     * {@link UserManagerService.UserData} is modified, including changes to {@link UserInfo}.
     * In practice we determine modification by when that data is persisted, or scheduled to be
     * presisted, to xml.
     * @hide
     */
    public static final void invalidateCacheOnUserDataChanged() {
        if (android.multiuser.Flags.cacheProfilesReadOnly()) {
            UserManagerCache.invalidateProfiles();
        }
    }

    /**
     * Returns a serial number on this device for a given userId. User handles can be recycled
     * when deleting and creating users, but serial numbers are not reused until the device is
+12 −0
Original line number Diff line number Diff line
@@ -4984,7 +4984,10 @@ public class UserManagerService extends IUserManager.Stub {
            res.getValue(com.android.internal.R.string.owner_name, mOwnerNameTypedValue, true);
            final CharSequence ownerName = mOwnerNameTypedValue.coerceToString();
            mOwnerName.set(ownerName != null ? ownerName.toString() : null);
            // Invalidate when owners name changes due to config change.
            UserManager.invalidateCacheOnUserDataChanged();
        }

    }

    private void scheduleWriteUserList() {
@@ -4997,6 +5000,8 @@ public class UserManagerService extends IUserManager.Stub {
            Message msg = mHandler.obtainMessage(WRITE_USER_LIST_MSG);
            mHandler.sendMessageDelayed(msg, WRITE_USER_DELAY);
        }
        // Invalidate cache when {@link UserData} changed, but write was scheduled for later.
        UserManager.invalidateCacheOnUserDataChanged();
    }

    private void scheduleWriteUser(@UserIdInt int userId) {
@@ -5009,6 +5014,8 @@ public class UserManagerService extends IUserManager.Stub {
            Message msg = mHandler.obtainMessage(WRITE_USER_MSG, userId);
            mHandler.sendMessageDelayed(msg, WRITE_USER_DELAY);
        }
        // Invalidate cache when {@link Data} changed, but write was scheduled for later.
        UserManager.invalidateCacheOnUserDataChanged();
    }

    private ResilientAtomicFile getUserFile(int userId) {
@@ -5032,6 +5039,9 @@ public class UserManagerService extends IUserManager.Stub {
        if (DBG) {
            debug("writeUserLP " + userData);
        }
        // invalidate caches related to any {@link UserData} change.
        UserManager.invalidateCacheOnUserDataChanged();

        try (ResilientAtomicFile userFile = getUserFile(userData.info.id)) {
            FileOutputStream fos = null;
            try {
@@ -5196,6 +5206,8 @@ public class UserManagerService extends IUserManager.Stub {
        if (DBG) {
            debug("writeUserList");
        }
        // invalidate caches related to any {@link UserData} change.
        UserManager.invalidateCacheOnUserDataChanged();

        try (ResilientAtomicFile file = getUserListFile()) {
            FileOutputStream fos = null;