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

Commit 69ada558 authored by Craig Mautner's avatar Craig Mautner
Browse files

Fix launching logic.

Fixes bug 8643197.

Change-Id: Ie09a767082dc492b449111da91bc0e77b43fa2f6
parent a9a3fb1d
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -1266,7 +1266,7 @@ final class ActivityStack {
            // There are no more activities!  Let's just start up the
            // Launcher...
            ActivityOptions.abort(options);
            return mService.startHomeActivityLocked(mCurrentUser);
            return mStackSupervisor.resumeHomeActivity(prev);
        }

        next.delayedResume = false;
@@ -1284,8 +1284,7 @@ final class ActivityStack {

        if (prev != null && prev.mLaunchHomeTaskNext && prev.finishing &&
                prev.task.getTopActivity() == null) {
            prev.mLaunchHomeTaskNext = false;
            return mService.startHomeActivityLocked(mCurrentUser);
            return mStackSupervisor.resumeHomeActivity(prev);
        }

        // If we are sleeping, and there is no resumed activity, and the top
@@ -1323,9 +1322,8 @@ final class ActivityStack {

        // If we are currently pausing an activity, then don't do anything
        // until that is done.
        if (mPausingActivity != null) {
            if (DEBUG_SWITCH || DEBUG_PAUSE) Slog.v(TAG,
                    "Skip resume: pausing=" + mPausingActivity);
        if (!mStackSupervisor.allPausedActivitiesComplete()) {
            if (DEBUG_SWITCH || DEBUG_PAUSE) Slog.v(TAG, "Skip resume: some activity pausing");
            return false;
        }

@@ -1362,6 +1360,7 @@ final class ActivityStack {
        // can be resumed...
        final ActivityStack lastStack = mStackSupervisor.getLastStack();
        if ((isHomeStack() ^ lastStack.isHomeStack()) && lastStack.mResumedActivity != null) {
            // TODO: Don't pause when launching to the sibling task.
            if (DEBUG_SWITCH) Slog.v(TAG, "Skip resume: need to start pausing");
            // At this point we want to put the upcoming activity's process
            // at the top of the LRU list, since we know we will be needing it
@@ -3274,7 +3273,7 @@ final class ActivityStack {
        if (mResumedActivity != null && mResumedActivity.task == tr &&
                mResumedActivity.mLaunchHomeTaskNext) {
            mResumedActivity.mLaunchHomeTaskNext = false;
            return mService.startHomeActivityLocked(mCurrentUser);
            return mStackSupervisor.resumeHomeActivity(null);
        }

        mStackSupervisor.getTopStack().resumeTopActivityLocked(null);
+16 −16
Original line number Diff line number Diff line
@@ -185,6 +185,17 @@ public class ActivityStackSupervisor {
        }
    }

    boolean resumeHomeActivity(ActivityRecord prev) {
        moveHomeStack(true);
        if (prev != null) {
            prev.mLaunchHomeTaskNext = false;
        }
        if (mHomeStack.topRunningActivityLocked(null) != null) {
            return mHomeStack.resumeTopActivityLocked(prev);
        }
        return mService.startHomeActivityLocked(mCurrentUser);
    }

    final void setLaunchHomeTaskNextFlag(ActivityRecord sourceRecord, ActivityRecord r,
            ActivityStack stack) {
        if (stack == mHomeStack) {
@@ -337,24 +348,13 @@ public class ActivityStackSupervisor {
    boolean allPausedActivitiesComplete() {
        for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
            final ActivityStack stack = mStacks.get(stackNdx);
            if (isFrontStack(stack)) {
                final ActivityRecord r = stack.mLastPausedActivity;
            final ActivityRecord r = stack.mPausingActivity;
            if (r != null && r.state != ActivityState.PAUSED
                    && r.state != ActivityState.STOPPED
                    && r.state != ActivityState.STOPPING) {
                return false;
            }
        }
        }
        // TODO: Not sure if this should check if all Resumed are complete too.
        switch (mStackState) {
            case STACK_STATE_HOME_TO_BACK:
                mStackState = STACK_STATE_HOME_IN_BACK;
                break;
            case STACK_STATE_HOME_TO_FRONT:
                mStackState = STACK_STATE_HOME_IN_FRONT;
                break;
        }
        return true;
    }