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

Commit 1b9da7c0 authored by João Victor Mendes Freire's avatar João Victor Mendes Freire
Browse files

Update getOrCreateUserState to update if needed

Update the method getOrCreateUserStatedLocked to also have the option to
update the UserState when fetching an existing UserState. This will avoid
redundant calls to readInstalledPrintServicesLocked,
readDisabledPrintServicesLocked, and readDisabledPrintServicesLocked
when updateIfNeeded was called right after receiving the UserState
object.

Bug: 210740189
Test: atest FrameworksCoreTests
Change-Id: Iaf28eda3530dfddbbe870219a7f17dab113ba3d0
parent 7aa3c043
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -984,6 +984,7 @@ public final class PrintManagerService extends SystemService {
            monitor.register(mContext, BackgroundThread.getHandler().getLooper(),
                    UserHandle.ALL, true);
        }

        private UserState getOrCreateUserStateLocked(int userId, boolean lowPriority) {
            return getOrCreateUserStateLocked(userId, lowPriority,
                    true /* enforceUserUnlockingOrUnlocked */);
@@ -991,6 +992,12 @@ public final class PrintManagerService extends SystemService {

        private UserState getOrCreateUserStateLocked(int userId, boolean lowPriority,
                boolean enforceUserUnlockingOrUnlocked) {
            return getOrCreateUserStateLocked(userId, lowPriority,
                    enforceUserUnlockingOrUnlocked, false /* shouldUpdateState */);
        }

        private UserState getOrCreateUserStateLocked(int userId, boolean lowPriority,
                boolean enforceUserUnlockingOrUnlocked, boolean shouldUpdateState) {
            if (enforceUserUnlockingOrUnlocked && !mUserManager.isUserUnlockingOrUnlocked(userId)) {
                throw new IllegalStateException(
                        "User " + userId + " must be unlocked for printing to be available");
@@ -1000,6 +1007,8 @@ public final class PrintManagerService extends SystemService {
            if (userState == null) {
                userState = new UserState(mContext, userId, mLock, lowPriority);
                mUserStates.put(userId, userState);
            } else if (shouldUpdateState) {
                userState.updateIfNeededLocked();
            }

            if (!lowPriority) {
@@ -1019,9 +1028,9 @@ public final class PrintManagerService extends SystemService {

                    UserState userState;
                    synchronized (mLock) {
                        userState = getOrCreateUserStateLocked(userId, true,
                                false /*enforceUserUnlockingOrUnlocked */);
                        userState.updateIfNeededLocked();
                        userState = getOrCreateUserStateLocked(userId, /* lowPriority */ true,
                                /* enforceUserUnlockingOrUnlocked */ false,
                                /* shouldUpdateState */ true);
                    }
                    // This is the first time we switch to this user after boot, so
                    // now is the time to remove obsolete print jobs since they