Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/JetpackTaskFragmentOrganizer.java +4 −6 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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); } /** Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java +25 −3 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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. */ Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitPresenter.java +13 −15 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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); } /** Loading Loading @@ -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); } /** Loading Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/JetpackTaskFragmentOrganizer.java +4 −6 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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); } /** Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java +25 −3 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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. */ Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitPresenter.java +13 −15 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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); } /** Loading Loading @@ -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); } /** Loading