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

Commit 9c85c201 authored by Craig Mautner's avatar Craig Mautner
Browse files

Evaluate task on top of home when task is brought to front.

Localize the point where it is determined whether a task should sit on
top of home or return to the task below it.

Fixes bug 11080913.

Change-Id: I79d1ea9722c867d6b550ddfcd1db35517a79cd90
parent 3d61bf45
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -572,8 +572,8 @@ final class ActivityRecord {
    }

    boolean isRootActivity() {
        ArrayList<ActivityRecord> activities = task.mActivities;
        return activities.size() == 0 || this == task.mActivities.get(0);
        final ArrayList<ActivityRecord> activities = task.mActivities;
        return activities.size() == 0 || this == activities.get(0);
    }

    UriPermissionOwner getUriPermissionsLocked() {
+6 −0
Original line number Diff line number Diff line
@@ -1623,6 +1623,12 @@ final class ActivityStack {
    }

    private void insertTaskAtTop(TaskRecord task) {
        // If this is being moved to the top by another activity or being launched from the home
        // activity, set mOnTopOfHome accordingly.
        final boolean fromHome = mStackSupervisor.getLastStack().isHomeStack();
        if (!isHomeStack() && (fromHome || topTask() != task)) {
            task.mOnTopOfHome = fromHome;
        }
        mTaskHistory.remove(task);
        // Now put task at top.
        int stackNdx = mTaskHistory.size();
+0 −24
Original line number Diff line number Diff line
@@ -288,22 +288,6 @@ public final class ActivityStackSupervisor {
        return mService.startHomeActivityLocked(mCurrentUser);
    }

    final void setLaunchHomeTaskNextFlag(ActivityRecord sourceRecord, ActivityRecord r,
            ActivityStack stack) {
        if (stack == mHomeStack) {
            return;
        }
        if ((sourceRecord == null && getLastStack() == mHomeStack) ||
                (sourceRecord != null && sourceRecord.isHomeActivity())) {
            if (r == null) {
                r = stack.topRunningActivityLocked(null);
            }
            if (r != null && !r.isHomeActivity() && r.isRootActivity()) {
                r.task.mOnTopOfHome = true;
            }
        }
    }

    void setDismissKeyguard(boolean dismiss) {
        if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen(" dismiss=" + dismiss);
        mDismissKeyguardOnNextActivity = dismiss;
@@ -1479,7 +1463,6 @@ public final class ActivityStackSupervisor {
                        // is the case, so this is it!  And for paranoia, make
                        // sure we have correctly resumed the top activity.
                        if (doResume) {
                            setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack);
                            resumeTopActivitiesLocked(targetStack, null, options);
                        } else {
                            ActivityOptions.abort(options);
@@ -1575,9 +1558,6 @@ public final class ActivityStackSupervisor {
                        // don't use that intent!)  And for paranoia, make
                        // sure we have correctly resumed the top activity.
                        if (doResume) {
                            // Reset flag so it gets correctly reevaluated.
                            intentActivity.task.mOnTopOfHome = false;
                            setLaunchHomeTaskNextFlag(sourceRecord, intentActivity, targetStack);
                            targetStack.resumeTopActivityLocked(null, options);
                        } else {
                            ActivityOptions.abort(options);
@@ -1615,7 +1595,6 @@ public final class ActivityStackSupervisor {
                            // resumed the top activity.
                            topStack.mLastPausedActivity = null;
                            if (doResume) {
                                setLaunchHomeTaskNextFlag(sourceRecord, null, topStack);
                                resumeTopActivitiesLocked();
                            }
                            ActivityOptions.abort(options);
@@ -1694,7 +1673,6 @@ public final class ActivityStackSupervisor {
                    // resumed the top activity.
                    targetStack.mLastPausedActivity = null;
                    if (doResume) {
                        setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack);
                        targetStack.resumeTopActivityLocked(null);
                    }
                    ActivityOptions.abort(options);
@@ -1717,7 +1695,6 @@ public final class ActivityStackSupervisor {
                    top.deliverNewIntentLocked(callingUid, r.intent);
                    targetStack.mLastPausedActivity = null;
                    if (doResume) {
                        setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack);
                        targetStack.resumeTopActivityLocked(null);
                    }
                    return ActivityManager.START_DELIVERED_TO_TOP;
@@ -1751,7 +1728,6 @@ public final class ActivityStackSupervisor {
            EventLog.writeEvent(EventLogTags.AM_CREATE_TASK, r.userId, r.task.taskId);
        }
        ActivityStack.logStartActivity(EventLogTags.AM_CREATE_ACTIVITY, r, r.task);
        setLaunchHomeTaskNextFlag(sourceRecord, r, targetStack);
        targetStack.mLastPausedActivity = null;
        targetStack.startActivityLocked(r, newTask, doResume, keepCurTransition, options);
        mService.setFocusedActivityLocked(r);