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

Commit 2e6acce4 authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Synchronously finish boot when user starts in background

Previously call to finishUserBoot method was delayed until ActivityManager
enters idle state. This could lead to unpredictable timeouts, especially
when AM was already idle.

Bug: 26762234
Change-Id: Iae90c3a9b09ff675478b42271469866e1604df0f
parent d53aadc0
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -1548,14 +1548,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
                    mService.mUserController.finishUserSwitch(startingUsers.get(i));
                }
            }
            // Complete starting up of background users
            if (mStartingBackgroundUsers.size() > 0) {
                startingUsers = new ArrayList<UserState>(mStartingBackgroundUsers);
                mStartingBackgroundUsers.clear();
                for (int i = 0; i < startingUsers.size(); i++) {
                    mService.mUserController.finishUserBoot(startingUsers.get(i));
                }
            }
        }

        mService.trimApplications();
@@ -2747,15 +2739,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
        return homeInFront;
    }

    /**
     * Add background users to send boot completed events to.
     * @param userId The user being started in the background
     * @param uss The state object for the user.
     */
    public void startBackgroundUserLocked(int userId, UserState uss) {
        mStartingBackgroundUsers.add(uss);
    }

    /** Checks whether the userid is a profile of the current user. */
    boolean isCurrentProfileLocked(int userId) {
        if (userId == mCurrentUser) return true;
+3 −3
Original line number Diff line number Diff line
@@ -202,11 +202,11 @@ final class UserController {
        }
    }

    void finishUserBoot(UserState uss) {
    private void finishUserBoot(UserState uss) {
        finishUserBoot(uss, null);
    }

    void finishUserBoot(UserState uss, IIntentReceiver resultTo) {
    private void finishUserBoot(UserState uss, IIntentReceiver resultTo) {
        final int userId = uss.mHandle.getIdentifier();
        synchronized (mService) {
            // Bail if we ended up with a stale user
@@ -711,7 +711,7 @@ final class UserController {
                        moveUserToForegroundLocked(uss, oldUserId, userId);
                    }
                } else {
                    mService.mStackSupervisor.startBackgroundUserLocked(userId, uss);
                    mService.mUserController.finishUserBoot(uss);
                }

                if (needStart) {