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

Commit 7ee4fe12 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Do not use top running activities in other tasks when reset tasks"

parents 608e763d f7f7f9c4
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -3596,6 +3596,16 @@ class ActivityStack extends ConfigurationContainer {
        return taskInsertionPoint;
    }

    /**
     * Reset the task by reparenting the activities that have same affinity to the task or
     * reparenting the activities that have different affinityies out of the task, while these
     * activities allow task reparenting.
     *
     * @param taskTop     Top activity of the task might be reset.
     * @param newActivity The activity that going to be started.
     * @return The non-finishing top activity of the task after reset or the original task top
     *         activity if all activities within the task are finishing.
     */
    final ActivityRecord resetTaskIfNeededLocked(ActivityRecord taskTop,
            ActivityRecord newActivity) {
        final boolean forceReset =
@@ -3626,9 +3636,10 @@ class ActivityStack extends ConfigurationContainer {

        int taskNdx = mTaskHistory.indexOf(task);
        if (taskNdx >= 0) {
            do {
                taskTop = mTaskHistory.get(taskNdx--).getTopActivity();
            } while (taskTop == null && taskNdx >= 0);
            ActivityRecord newTop = mTaskHistory.get(taskNdx).getTopActivity();
            if (newTop != null) {
                taskTop = newTop;
            }
        }

        if (topOptions != null) {
+13 −0
Original line number Diff line number Diff line
@@ -1109,6 +1109,19 @@ public class ActivityStackTests extends ActivityTestsBase {
        assertTrue(listener.mChanged);
    }

    @Test
    public void testResetTaskWithFinishingActivities() {
        final ActivityRecord taskTop =
                new ActivityBuilder(mService).setStack(mStack).setCreateTask(true).build();
        // Make all activities in the task are finishing to simulate TaskRecord#getTopActivity
        // returns null.
        taskTop.finishing = true;

        final ActivityRecord newR = new ActivityBuilder(mService).build();
        final ActivityRecord result = mStack.resetTaskIfNeededLocked(taskTop, newR);
        assertThat(result).isEqualTo(taskTop);
    }

    private void verifyShouldSleepActivities(boolean focusedStack,
            boolean keyguardGoingAway, boolean displaySleeping, boolean expected) {
        final ActivityDisplay display = mock(ActivityDisplay.class);