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

Commit 112ecb8f authored by Louis Chang's avatar Louis Chang Committed by Automerger Merge Worker
Browse files

Merge "[1/n] Pin ActivityStack" into udc-qpr-dev am: 82db3963 am: 5b49ff26

parents 84dff3e6 5b49ff26
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -1418,7 +1418,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
        if (splitRule instanceof SplitPairRule && ((SplitPairRule) splitRule).shouldClearTop()) {
            removeExistingSecondaryContainers(wct, primaryContainer);
        }
        primaryContainer.getTaskContainer().mSplitContainers.add(splitContainer);
        primaryContainer.getTaskContainer().addSplitContainer(splitContainer);
    }

    /** Cleanups all the dependencies when the TaskFragment is entering PIP. */
@@ -1430,8 +1430,9 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
            return;
        }
        final List<SplitContainer> splitsToRemove = new ArrayList<>();
        final List<SplitContainer> splitContainers = taskContainer.getSplitContainers();
        final Set<TaskFragmentContainer> containersToUpdate = new ArraySet<>();
        for (SplitContainer splitContainer : taskContainer.mSplitContainers) {
        for (SplitContainer splitContainer : splitContainers) {
            if (splitContainer.getPrimaryContainer() != container
                    && splitContainer.getSecondaryContainer() != container) {
                continue;
@@ -1449,7 +1450,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
            }
        }
        container.resetDependencies();
        taskContainer.mSplitContainers.removeAll(splitsToRemove);
        taskContainer.removeSplitContainers(splitsToRemove);
        // If there is any TaskFragment split with the PIP TaskFragment, update their presentations
        // since the split is dismissed.
        // We don't want to close any of them even if they are dependencies of the PIP TaskFragment.
@@ -1481,7 +1482,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen

        // Cleanup any split references.
        final List<SplitContainer> containersToRemove = new ArrayList<>();
        for (SplitContainer splitContainer : taskContainer.mSplitContainers) {
        final List<SplitContainer> splitContainers = taskContainer.getSplitContainers();
        for (SplitContainer splitContainer : splitContainers) {
            if (containersToRemove.contains(splitContainer)) {
                // Don't need to check because it has been in the remove list.
                continue;
@@ -1492,7 +1494,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
                containersToRemove.add(splitContainer);
            }
        }
        taskContainer.mSplitContainers.removeAll(containersToRemove);
        taskContainer.removeSplitContainers(containersToRemove);

        // Cleanup any dependent references.
        for (TaskFragmentContainer containerToUpdate : taskContainer.mContainers) {
@@ -1629,7 +1631,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
    /** Whether the given split is the topmost split in the Task. */
    private boolean isTopMostSplit(@NonNull SplitContainer splitContainer) {
        final List<SplitContainer> splitContainers = splitContainer.getPrimaryContainer()
                .getTaskContainer().mSplitContainers;
                .getTaskContainer().getSplitContainers();
        return splitContainer == splitContainers.get(splitContainers.size() - 1);
    }

@@ -1641,7 +1643,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
        if (container == null) {
            return null;
        }
        final List<SplitContainer> splitContainers = container.getTaskContainer().mSplitContainers;
        final List<SplitContainer> splitContainers =
                container.getTaskContainer().getSplitContainers();
        if (splitContainers.isEmpty()) {
            return null;
        }
@@ -1665,7 +1668,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
            @NonNull TaskFragmentContainer firstContainer,
            @NonNull TaskFragmentContainer secondContainer) {
        final List<SplitContainer> splitContainers = firstContainer.getTaskContainer()
                .mSplitContainers;
                .getSplitContainers();
        for (int i = splitContainers.size() - 1; i >= 0; i--) {
            final SplitContainer splitContainer = splitContainers.get(i);
            final TaskFragmentContainer primary = splitContainer.getPrimaryContainer();
@@ -1945,7 +1948,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
    @GuardedBy("mLock")
    SplitContainer getSplitContainer(@NonNull IBinder token) {
        for (int i = mTaskContainers.size() - 1; i >= 0; i--) {
            final List<SplitContainer> containers = mTaskContainers.valueAt(i).mSplitContainers;
            final List<SplitContainer> containers = mTaskContainers.valueAt(i).getSplitContainers();
            for (SplitContainer container : containers) {
                if (container.getToken().equals(token)) {
                    return container;
+14 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ class TaskContainer {

    /** Active split pairs in this Task. */
    @NonNull
    final List<SplitContainer> mSplitContainers = new ArrayList<>();
    private final List<SplitContainer> mSplitContainers = new ArrayList<>();

    @NonNull
    private final Configuration mConfiguration;
@@ -207,6 +207,19 @@ class TaskContainer {
        return false;
    }

    @NonNull
    List<SplitContainer> getSplitContainers() {
        return new ArrayList<>(mSplitContainers);
    }

    void addSplitContainer(@NonNull SplitContainer splitContainer) {
        mSplitContainers.add(splitContainer);
    }

    void removeSplitContainers(@NonNull List<SplitContainer> containers) {
        mSplitContainers.removeAll(containers);
    }

    /** Adds the descriptors of split states in this Task to {@code outSplitStates}. */
    void getSplitStates(@NonNull List<SplitInfo> outSplitStates) {
        for (SplitContainer container : mSplitContainers) {
+9 −7
Original line number Diff line number Diff line
@@ -320,11 +320,11 @@ public class SplitControllerTest {
        doReturn(tf).when(splitContainer).getSecondaryContainer();
        doReturn(createTestTaskContainer()).when(splitContainer).getTaskContainer();
        doReturn(createSplitRule(mActivity, mActivity)).when(splitContainer).getSplitRule();
        final List<SplitContainer> splitContainers =
                mSplitController.getTaskContainer(TASK_ID).mSplitContainers;
        splitContainers.add(splitContainer);
        final TaskContainer taskContainer = mSplitController.getTaskContainer(TASK_ID);
        taskContainer.addSplitContainer(splitContainer);
        // Add a mock SplitContainer on top of splitContainer
        splitContainers.add(1, mock(SplitContainer.class));
        final SplitContainer splitContainer2 = mock(SplitContainer.class);
        taskContainer.addSplitContainer(splitContainer2);

        mSplitController.updateContainer(mTransaction, tf);

@@ -332,7 +332,9 @@ public class SplitControllerTest {

        // Verify if one or both containers in the top SplitContainer are finished,
        // dismissPlaceholder() won't be called.
        splitContainers.remove(1);
        final ArrayList<SplitContainer> splitContainersToRemove = new ArrayList<>();
        splitContainersToRemove.add(splitContainer2);
        taskContainer.removeSplitContainers(splitContainersToRemove);
        doReturn(true).when(tf).isFinished();

        mSplitController.updateContainer(mTransaction, tf);
@@ -377,7 +379,7 @@ public class SplitControllerTest {
        doReturn(true).when(taskContainer).isVisible();
        mSplitController.updateContainer(mTransaction, taskFragmentContainer);

        verify(mSplitPresenter).updateSplitContainer(taskContainer.mSplitContainers.get(0),
        verify(mSplitPresenter).updateSplitContainer(taskContainer.getSplitContainers().get(0),
                mTransaction);
    }

@@ -1091,7 +1093,7 @@ public class SplitControllerTest {
        verify(mTransaction).finishActivity(secondaryActivity0.getActivityToken());
        verify(mTransaction).finishActivity(secondaryActivity1.getActivityToken());
        assertTrue(taskContainer.mContainers.isEmpty());
        assertTrue(taskContainer.mSplitContainers.isEmpty());
        assertTrue(taskContainer.getSplitContainers().isEmpty());
    }

    @Test