Merge "[1/n] Pin ActivityStack" into udc-qpr-dev
This commit is contained in:
@@ -1418,7 +1418,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
if (splitRule instanceof SplitPairRule && ((SplitPairRule) splitRule).shouldClearTop()) {
|
if (splitRule instanceof SplitPairRule && ((SplitPairRule) splitRule).shouldClearTop()) {
|
||||||
removeExistingSecondaryContainers(wct, primaryContainer);
|
removeExistingSecondaryContainers(wct, primaryContainer);
|
||||||
}
|
}
|
||||||
primaryContainer.getTaskContainer().mSplitContainers.add(splitContainer);
|
primaryContainer.getTaskContainer().addSplitContainer(splitContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Cleanups all the dependencies when the TaskFragment is entering PIP. */
|
/** Cleanups all the dependencies when the TaskFragment is entering PIP. */
|
||||||
@@ -1430,8 +1430,9 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final List<SplitContainer> splitsToRemove = new ArrayList<>();
|
final List<SplitContainer> splitsToRemove = new ArrayList<>();
|
||||||
|
final List<SplitContainer> splitContainers = taskContainer.getSplitContainers();
|
||||||
final Set<TaskFragmentContainer> containersToUpdate = new ArraySet<>();
|
final Set<TaskFragmentContainer> containersToUpdate = new ArraySet<>();
|
||||||
for (SplitContainer splitContainer : taskContainer.mSplitContainers) {
|
for (SplitContainer splitContainer : splitContainers) {
|
||||||
if (splitContainer.getPrimaryContainer() != container
|
if (splitContainer.getPrimaryContainer() != container
|
||||||
&& splitContainer.getSecondaryContainer() != container) {
|
&& splitContainer.getSecondaryContainer() != container) {
|
||||||
continue;
|
continue;
|
||||||
@@ -1449,7 +1450,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
container.resetDependencies();
|
container.resetDependencies();
|
||||||
taskContainer.mSplitContainers.removeAll(splitsToRemove);
|
taskContainer.removeSplitContainers(splitsToRemove);
|
||||||
// If there is any TaskFragment split with the PIP TaskFragment, update their presentations
|
// If there is any TaskFragment split with the PIP TaskFragment, update their presentations
|
||||||
// since the split is dismissed.
|
// since the split is dismissed.
|
||||||
// We don't want to close any of them even if they are dependencies of the PIP TaskFragment.
|
// 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.
|
// Cleanup any split references.
|
||||||
final List<SplitContainer> containersToRemove = new ArrayList<>();
|
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)) {
|
if (containersToRemove.contains(splitContainer)) {
|
||||||
// Don't need to check because it has been in the remove list.
|
// Don't need to check because it has been in the remove list.
|
||||||
continue;
|
continue;
|
||||||
@@ -1492,7 +1494,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
containersToRemove.add(splitContainer);
|
containersToRemove.add(splitContainer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
taskContainer.mSplitContainers.removeAll(containersToRemove);
|
taskContainer.removeSplitContainers(containersToRemove);
|
||||||
|
|
||||||
// Cleanup any dependent references.
|
// Cleanup any dependent references.
|
||||||
for (TaskFragmentContainer containerToUpdate : taskContainer.mContainers) {
|
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. */
|
/** Whether the given split is the topmost split in the Task. */
|
||||||
private boolean isTopMostSplit(@NonNull SplitContainer splitContainer) {
|
private boolean isTopMostSplit(@NonNull SplitContainer splitContainer) {
|
||||||
final List<SplitContainer> splitContainers = splitContainer.getPrimaryContainer()
|
final List<SplitContainer> splitContainers = splitContainer.getPrimaryContainer()
|
||||||
.getTaskContainer().mSplitContainers;
|
.getTaskContainer().getSplitContainers();
|
||||||
return splitContainer == splitContainers.get(splitContainers.size() - 1);
|
return splitContainer == splitContainers.get(splitContainers.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1641,7 +1643,8 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
if (container == null) {
|
if (container == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final List<SplitContainer> splitContainers = container.getTaskContainer().mSplitContainers;
|
final List<SplitContainer> splitContainers =
|
||||||
|
container.getTaskContainer().getSplitContainers();
|
||||||
if (splitContainers.isEmpty()) {
|
if (splitContainers.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -1665,7 +1668,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
@NonNull TaskFragmentContainer firstContainer,
|
@NonNull TaskFragmentContainer firstContainer,
|
||||||
@NonNull TaskFragmentContainer secondContainer) {
|
@NonNull TaskFragmentContainer secondContainer) {
|
||||||
final List<SplitContainer> splitContainers = firstContainer.getTaskContainer()
|
final List<SplitContainer> splitContainers = firstContainer.getTaskContainer()
|
||||||
.mSplitContainers;
|
.getSplitContainers();
|
||||||
for (int i = splitContainers.size() - 1; i >= 0; i--) {
|
for (int i = splitContainers.size() - 1; i >= 0; i--) {
|
||||||
final SplitContainer splitContainer = splitContainers.get(i);
|
final SplitContainer splitContainer = splitContainers.get(i);
|
||||||
final TaskFragmentContainer primary = splitContainer.getPrimaryContainer();
|
final TaskFragmentContainer primary = splitContainer.getPrimaryContainer();
|
||||||
@@ -1945,7 +1948,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
@GuardedBy("mLock")
|
@GuardedBy("mLock")
|
||||||
SplitContainer getSplitContainer(@NonNull IBinder token) {
|
SplitContainer getSplitContainer(@NonNull IBinder token) {
|
||||||
for (int i = mTaskContainers.size() - 1; i >= 0; i--) {
|
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) {
|
for (SplitContainer container : containers) {
|
||||||
if (container.getToken().equals(token)) {
|
if (container.getToken().equals(token)) {
|
||||||
return container;
|
return container;
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ class TaskContainer {
|
|||||||
|
|
||||||
/** Active split pairs in this Task. */
|
/** Active split pairs in this Task. */
|
||||||
@NonNull
|
@NonNull
|
||||||
final List<SplitContainer> mSplitContainers = new ArrayList<>();
|
private final List<SplitContainer> mSplitContainers = new ArrayList<>();
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private final Configuration mConfiguration;
|
private final Configuration mConfiguration;
|
||||||
@@ -207,6 +207,19 @@ class TaskContainer {
|
|||||||
return false;
|
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}. */
|
/** Adds the descriptors of split states in this Task to {@code outSplitStates}. */
|
||||||
void getSplitStates(@NonNull List<SplitInfo> outSplitStates) {
|
void getSplitStates(@NonNull List<SplitInfo> outSplitStates) {
|
||||||
for (SplitContainer container : mSplitContainers) {
|
for (SplitContainer container : mSplitContainers) {
|
||||||
|
|||||||
@@ -320,11 +320,11 @@ public class SplitControllerTest {
|
|||||||
doReturn(tf).when(splitContainer).getSecondaryContainer();
|
doReturn(tf).when(splitContainer).getSecondaryContainer();
|
||||||
doReturn(createTestTaskContainer()).when(splitContainer).getTaskContainer();
|
doReturn(createTestTaskContainer()).when(splitContainer).getTaskContainer();
|
||||||
doReturn(createSplitRule(mActivity, mActivity)).when(splitContainer).getSplitRule();
|
doReturn(createSplitRule(mActivity, mActivity)).when(splitContainer).getSplitRule();
|
||||||
final List<SplitContainer> splitContainers =
|
final TaskContainer taskContainer = mSplitController.getTaskContainer(TASK_ID);
|
||||||
mSplitController.getTaskContainer(TASK_ID).mSplitContainers;
|
taskContainer.addSplitContainer(splitContainer);
|
||||||
splitContainers.add(splitContainer);
|
|
||||||
// Add a mock SplitContainer on top of 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);
|
mSplitController.updateContainer(mTransaction, tf);
|
||||||
|
|
||||||
@@ -332,7 +332,9 @@ public class SplitControllerTest {
|
|||||||
|
|
||||||
// Verify if one or both containers in the top SplitContainer are finished,
|
// Verify if one or both containers in the top SplitContainer are finished,
|
||||||
// dismissPlaceholder() won't be called.
|
// 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();
|
doReturn(true).when(tf).isFinished();
|
||||||
|
|
||||||
mSplitController.updateContainer(mTransaction, tf);
|
mSplitController.updateContainer(mTransaction, tf);
|
||||||
@@ -377,7 +379,7 @@ public class SplitControllerTest {
|
|||||||
doReturn(true).when(taskContainer).isVisible();
|
doReturn(true).when(taskContainer).isVisible();
|
||||||
mSplitController.updateContainer(mTransaction, taskFragmentContainer);
|
mSplitController.updateContainer(mTransaction, taskFragmentContainer);
|
||||||
|
|
||||||
verify(mSplitPresenter).updateSplitContainer(taskContainer.mSplitContainers.get(0),
|
verify(mSplitPresenter).updateSplitContainer(taskContainer.getSplitContainers().get(0),
|
||||||
mTransaction);
|
mTransaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1091,7 +1093,7 @@ public class SplitControllerTest {
|
|||||||
verify(mTransaction).finishActivity(secondaryActivity0.getActivityToken());
|
verify(mTransaction).finishActivity(secondaryActivity0.getActivityToken());
|
||||||
verify(mTransaction).finishActivity(secondaryActivity1.getActivityToken());
|
verify(mTransaction).finishActivity(secondaryActivity1.getActivityToken());
|
||||||
assertTrue(taskContainer.mContainers.isEmpty());
|
assertTrue(taskContainer.mContainers.isEmpty());
|
||||||
assertTrue(taskContainer.mSplitContainers.isEmpty());
|
assertTrue(taskContainer.getSplitContainers().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user