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 activityIntent Intent to start the secondary Activity with.
|
||||||
* @param activityOptions ActivityOptions to start the secondary Activity with.
|
* @param activityOptions ActivityOptions to start the secondary Activity with.
|
||||||
*/
|
*/
|
||||||
void startActivityToSide(IBinder launchingFragmentToken, Rect launchingFragmentBounds,
|
void startActivityToSide(@NonNull WindowContainerTransaction wct,
|
||||||
Activity launchingActivity, IBinder secondaryFragmentToken,
|
@NonNull IBinder launchingFragmentToken, @NonNull Rect launchingFragmentBounds,
|
||||||
Rect secondaryFragmentBounds, Intent activityIntent,
|
@NonNull Activity launchingActivity, @NonNull IBinder secondaryFragmentToken,
|
||||||
|
@NonNull Rect secondaryFragmentBounds, @NonNull Intent activityIntent,
|
||||||
@Nullable Bundle activityOptions) {
|
@Nullable Bundle activityOptions) {
|
||||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
|
||||||
final IBinder ownerToken = launchingActivity.getActivityToken();
|
final IBinder ownerToken = launchingActivity.getActivityToken();
|
||||||
|
|
||||||
// Create or resize the launching TaskFragment.
|
// 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.
|
// Set adjacent to each other so that the containers below will be invisible.
|
||||||
wct.setAdjacentTaskFragments(launchingFragmentToken, secondaryFragmentToken);
|
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,
|
void registerSplit(@NonNull WindowContainerTransaction wct,
|
||||||
@NonNull Activity primaryActivity,
|
@NonNull TaskFragmentContainer primaryContainer, @NonNull Activity primaryActivity,
|
||||||
@NonNull TaskFragmentContainer secondaryContainer,
|
@NonNull TaskFragmentContainer secondaryContainer,
|
||||||
@NonNull ExtensionSplitPairRule splitPairRule) {
|
@NonNull ExtensionSplitPairRule splitPairRule) {
|
||||||
|
removeExistingSecondaryContainers(wct, primaryContainer);
|
||||||
|
|
||||||
SplitContainer splitContainer = new SplitContainer(primaryContainer, primaryActivity,
|
SplitContainer splitContainer = new SplitContainer(primaryContainer, primaryActivity,
|
||||||
secondaryContainer, splitPairRule);
|
secondaryContainer, splitPairRule);
|
||||||
mSplitContainers.add(splitContainer);
|
mSplitContainers.add(splitContainer);
|
||||||
@@ -323,6 +326,25 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
|
|||||||
mSplitContainers.removeAll(containersToRemove);
|
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.
|
* 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.
|
// Set adjacent to each other so that the containers below will be invisible.
|
||||||
wct.setAdjacentTaskFragments(
|
wct.setAdjacentTaskFragments(
|
||||||
primaryContainer.getTaskFragmentToken(), secondaryContainer.getTaskFragmentToken());
|
primaryContainer.getTaskFragmentToken(), secondaryContainer.getTaskFragmentToken());
|
||||||
applyTransaction(wct);
|
|
||||||
|
|
||||||
mController.registerSplit(primaryContainer, primaryActivity, secondaryContainer, rule);
|
mController.registerSplit(wct, primaryContainer, primaryActivity, secondaryContainer, rule);
|
||||||
|
|
||||||
|
applyTransaction(wct);
|
||||||
|
|
||||||
return secondaryContainer;
|
return secondaryContainer;
|
||||||
}
|
}
|
||||||
@@ -142,9 +143,10 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
|
|||||||
// Set adjacent to each other so that the containers below will be invisible.
|
// Set adjacent to each other so that the containers below will be invisible.
|
||||||
wct.setAdjacentTaskFragments(
|
wct.setAdjacentTaskFragments(
|
||||||
primaryContainer.getTaskFragmentToken(), secondaryContainer.getTaskFragmentToken());
|
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);
|
TaskFragmentContainer secondaryContainer = mController.newContainer(null);
|
||||||
startActivityToSide(
|
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||||
primaryContainer.getTaskFragmentToken(),
|
mController.registerSplit(wct, primaryContainer, launchingActivity, secondaryContainer,
|
||||||
primaryRectBounds,
|
rule);
|
||||||
launchingActivity,
|
startActivityToSide(wct, primaryContainer.getTaskFragmentToken(), primaryRectBounds,
|
||||||
secondaryContainer.getTaskFragmentToken(),
|
launchingActivity, secondaryContainer.getTaskFragmentToken(), secondaryRectBounds,
|
||||||
secondaryRectBounds,
|
activityIntent, activityOptions);
|
||||||
activityIntent,
|
applyTransaction(wct);
|
||||||
activityOptions);
|
|
||||||
|
|
||||||
primaryContainer.setLastRequestedBounds(primaryRectBounds);
|
primaryContainer.setLastRequestedBounds(primaryRectBounds);
|
||||||
secondaryContainer.setLastRequestedBounds(secondaryRectBounds);
|
secondaryContainer.setLastRequestedBounds(secondaryRectBounds);
|
||||||
|
|
||||||
mController.registerSplit(primaryContainer, launchingActivity, secondaryContainer,
|
|
||||||
rule);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user