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

Commit 63812fd9 authored by Amith Yamasani's avatar Amith Yamasani Committed by Android (Google) Code Review
Browse files

Merge "Send boot_completed for users started in the background"

parents b325c80d 1a7eaaa5
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -16523,7 +16523,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                }
                if ((userInfo.flags&UserInfo.FLAG_INITIALIZED) == 0) {
                    if (userId != 0) {
                    if (userId != UserHandle.USER_OWNER) {
                        Intent intent = new Intent(Intent.ACTION_USER_INITIALIZE);
                        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
                        broadcastIntentLocked(null, null, intent, null,
@@ -16552,6 +16552,8 @@ public final class ActivityManagerService extends ActivityManagerNative
                    EventLogTags.writeAmSwitchUser(userId);
                    getUserManagerLocked().userForeground(userId);
                    sendUserSwitchBroadcastsLocked(oldUserId, userId);
                } else {
                    mStackSupervisor.startBackgroundUserLocked(userId, uss);
                }
                if (needStart) {
@@ -16727,7 +16729,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
    }
    void finishUserSwitch(UserStartedState uss) {
    void finishUserBoot(UserStartedState uss) {
        synchronized (this) {
            if (uss.mState == UserStartedState.STATE_BOOTING
                    && mStartedUsers.get(uss.mHandle.getIdentifier()) == uss) {
@@ -16741,6 +16743,12 @@ public final class ActivityManagerService extends ActivityManagerNative
                        android.Manifest.permission.RECEIVE_BOOT_COMPLETED, AppOpsManager.OP_NONE,
                        true, false, MY_PID, Process.SYSTEM_UID, userId);
            }
        }
    }
    void finishUserSwitch(UserStartedState uss) {
        synchronized (this) {
            finishUserBoot(uss);
            startProfilesLocked();
+26 −3
Original line number Diff line number Diff line
@@ -193,6 +193,9 @@ public final class ActivityStackSupervisor implements DisplayListener {
    /** Used on user changes */
    final ArrayList<UserStartedState> mStartingUsers = new ArrayList<UserStartedState>();

    /** Used to queue up any background users being started */
    final ArrayList<UserStartedState> mStartingBackgroundUsers = new ArrayList<UserStartedState>();

    /** Set to indicate whether to issue an onUserLeaving callback when a newly launched activity
     * is being brought in front of us. */
    boolean mUserLeaving = false;
@@ -1999,11 +2002,22 @@ public final class ActivityStackSupervisor implements DisplayListener {

        if (booting) {
            mService.finishBooting();
        } else if (startingUsers != null) {
        } else {
            // Complete user switch
            if (startingUsers != null) {
                for (int i = 0; i < startingUsers.size(); i++) {
                    mService.finishUserSwitch(startingUsers.get(i));
                }
            }
            // Complete starting up of background users
            if (mStartingBackgroundUsers.size() > 0) {
                startingUsers = new ArrayList<UserStartedState>(mStartingBackgroundUsers);
                mStartingBackgroundUsers.clear();
                for (int i = 0; i < startingUsers.size(); i++) {
                    mService.finishUserBoot(startingUsers.get(i));
                }
            }
        }

        mService.trimApplications();
        //dump();
@@ -2507,6 +2521,15 @@ 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, UserStartedState uss) {
        mStartingBackgroundUsers.add(uss);
    }

    final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) {
        int N = mStoppingActivities.size();
        if (N <= 0) return null;