Merge "Finish existing secondary containers when starting to side" into sc-v2-dev am: 260fa38fa9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15456938 Change-Id: I19e81cb246b7bdcb449e0da7d1826d15d5c8a74f
This commit is contained in:
@@ -96,11 +96,11 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer {
|
||||
* @param activityIntent Intent to start the secondary Activity with.
|
||||
* @param activityOptions ActivityOptions to start the secondary Activity with.
|
||||
*/
|
||||
void startActivityToSide(IBinder launchingFragmentToken, Rect launchingFragmentBounds,
|
||||
Activity launchingActivity, IBinder secondaryFragmentToken,
|
||||
Rect secondaryFragmentBounds, Intent activityIntent,
|
||||
void startActivityToSide(@NonNull WindowContainerTransaction wct,
|
||||
@NonNull IBinder launchingFragmentToken, @NonNull Rect launchingFragmentBounds,
|
||||
@NonNull Activity launchingActivity, @NonNull IBinder secondaryFragmentToken,
|
||||
@NonNull Rect secondaryFragmentBounds, @NonNull Intent activityIntent,
|
||||
@Nullable Bundle activityOptions) {
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
final IBinder ownerToken = launchingActivity.getActivityToken();
|
||||
|
||||
// Create or resize the launching TaskFragment.
|
||||
@@ -118,8 +118,6 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer {
|
||||
|
||||
// Set adjacent to each other so that the containers below will be invisible.
|
||||
wct.setAdjacentTaskFragments(launchingFragmentToken, secondaryFragmentToken);
|
||||
|
||||
applyTransaction(wct);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -296,12 +296,15 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and registers a new split with the provided containers and configuration.
|
||||
* Creates and registers a new split with the provided containers and configuration. Finishes
|
||||
* existing secondary containers if found for the given primary container.
|
||||
*/
|
||||
void registerSplit(@NonNull TaskFragmentContainer primaryContainer,
|
||||
@NonNull Activity primaryActivity,
|
||||
void registerSplit(@NonNull WindowContainerTransaction wct,
|
||||
@NonNull TaskFragmentContainer primaryContainer, @NonNull Activity primaryActivity,
|
||||
@NonNull TaskFragmentContainer secondaryContainer,
|
||||
@NonNull ExtensionSplitPairRule splitPairRule) {
|
||||
removeExistingSecondaryContainers(wct, primaryContainer);
|
||||
|
||||
SplitContainer splitContainer = new SplitContainer(primaryContainer, primaryActivity,
|
||||
secondaryContainer, splitPairRule);
|
||||
mSplitContainers.add(splitContainer);
|
||||
@@ -323,6 +326,25 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
||||
mSplitContainers.removeAll(containersToRemove);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a secondary container for the given primary container if an existing split is
|
||||
* already registered.
|
||||
*/
|
||||
void removeExistingSecondaryContainers(@NonNull WindowContainerTransaction wct,
|
||||
@NonNull TaskFragmentContainer primaryContainer) {
|
||||
// If the primary container was already in a split - remove the secondary container that
|
||||
// is now covered by the new one that replaced it.
|
||||
final SplitContainer existingSplitContainer = getActiveSplitForContainer(
|
||||
primaryContainer);
|
||||
if (existingSplitContainer == null
|
||||
|| primaryContainer == existingSplitContainer.getSecondaryContainer()) {
|
||||
return;
|
||||
}
|
||||
|
||||
existingSplitContainer.getSecondaryContainer().finish(
|
||||
false /* shouldFinishDependent */, mPresenter, wct, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the topmost not finished container.
|
||||
*/
|
||||
|
||||
@@ -108,9 +108,10 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
|
||||
// Set adjacent to each other so that the containers below will be invisible.
|
||||
wct.setAdjacentTaskFragments(
|
||||
primaryContainer.getTaskFragmentToken(), secondaryContainer.getTaskFragmentToken());
|
||||
applyTransaction(wct);
|
||||
|
||||
mController.registerSplit(primaryContainer, primaryActivity, secondaryContainer, rule);
|
||||
mController.registerSplit(wct, primaryContainer, primaryActivity, secondaryContainer, rule);
|
||||
|
||||
applyTransaction(wct);
|
||||
|
||||
return secondaryContainer;
|
||||
}
|
||||
@@ -142,9 +143,10 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
|
||||
// Set adjacent to each other so that the containers below will be invisible.
|
||||
wct.setAdjacentTaskFragments(
|
||||
primaryContainer.getTaskFragmentToken(), secondaryContainer.getTaskFragmentToken());
|
||||
applyTransaction(wct);
|
||||
|
||||
mController.registerSplit(primaryContainer, primaryActivity, secondaryContainer, rule);
|
||||
mController.registerSplit(wct, primaryContainer, primaryActivity, secondaryContainer, rule);
|
||||
|
||||
applyTransaction(wct);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -202,20 +204,16 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
|
||||
}
|
||||
|
||||
TaskFragmentContainer secondaryContainer = mController.newContainer(null);
|
||||
startActivityToSide(
|
||||
primaryContainer.getTaskFragmentToken(),
|
||||
primaryRectBounds,
|
||||
launchingActivity,
|
||||
secondaryContainer.getTaskFragmentToken(),
|
||||
secondaryRectBounds,
|
||||
activityIntent,
|
||||
activityOptions);
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
mController.registerSplit(wct, primaryContainer, launchingActivity, secondaryContainer,
|
||||
rule);
|
||||
startActivityToSide(wct, primaryContainer.getTaskFragmentToken(), primaryRectBounds,
|
||||
launchingActivity, secondaryContainer.getTaskFragmentToken(), secondaryRectBounds,
|
||||
activityIntent, activityOptions);
|
||||
applyTransaction(wct);
|
||||
|
||||
primaryContainer.setLastRequestedBounds(primaryRectBounds);
|
||||
secondaryContainer.setLastRequestedBounds(secondaryRectBounds);
|
||||
|
||||
mController.registerSplit(primaryContainer, launchingActivity, secondaryContainer,
|
||||
rule);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user