Loading libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedTransition.java +39 −15 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip2.phone.transition.PipTransitionUtils; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.shared.TransitionUtil; import com.android.wm.shell.splitscreen.SplitScreen; import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.StageCoordinator; import com.android.wm.shell.unfold.UnfoldTransitionHandler; Loading Loading @@ -353,6 +355,23 @@ class DefaultMixedTransition extends DefaultMixedHandler.MixedTransition { transition); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Animating a mixed transition for " + "entering Bubbles while Split-Screen is foreground by %s", handler); TransitionInfo.Change bubblingTask = getChangeForBubblingTask(info, bubbleTransitions); // find previous split location for other task @SplitScreen.StageType int topSplitStageToKeep = SplitScreen.STAGE_TYPE_UNDEFINED; for (int i = info.getChanges().size() - 1; i >= 0; i--) { TransitionInfo.Change change = info.getChanges().get(i); if (change == bubblingTask) continue; int prevStage = splitHandler.getSplitItemStage(change.getLastParent()); if (prevStage != SplitScreen.STAGE_TYPE_UNDEFINED) { topSplitStageToKeep = prevStage; break; } } splitHandler.prepareDismissAnimation(topSplitStageToKeep, SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_BUBBLE, info, startTransaction, finishTransaction); // TODO(b/408328557): Migrate to checking transition token handler.startAnimation(transition, info, startTransaction, finishTransaction, finishCallback); Loading @@ -367,21 +386,7 @@ class DefaultMixedTransition extends DefaultMixedHandler.MixedTransition { @NonNull Transitions.TransitionFinishCallback finishCallback, @NonNull BubbleTransitions bubbleTransitions) { // Identify the task being launched into a bubble TransitionInfo.Change bubblingTask = null; for (int i = 0; i < info.getChanges().size(); i++) { final TransitionInfo.Change chg = info.getChanges().get(i); if (chg.getTaskInfo() != null && chg.getTaskInfo().getActivityType() == ACTIVITY_TYPE_STANDARD) { if (!TransitionUtil.isOpeningMode(chg.getMode()) && chg.getMode() != TRANSIT_CHANGE) { continue; } if (!bubbleTransitions.shouldBeAppBubble(chg.getTaskInfo())) { continue; } bubblingTask = chg; } } TransitionInfo.Change bubblingTask = getChangeForBubblingTask(info, bubbleTransitions); if (bubblingTask == null) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " No bubbling task found"); return false; Loading @@ -405,6 +410,25 @@ class DefaultMixedTransition extends DefaultMixedHandler.MixedTransition { return true; } private static @Nullable TransitionInfo.Change getChangeForBubblingTask( @NonNull TransitionInfo info, BubbleTransitions bubbleTransitions) { for (int i = 0; i < info.getChanges().size(); i++) { final TransitionInfo.Change chg = info.getChanges().get(i); if (chg.getTaskInfo() != null && chg.getTaskInfo().getActivityType() == ACTIVITY_TYPE_STANDARD) { if (!TransitionUtil.isOpeningMode(chg.getMode()) && chg.getMode() != TRANSIT_CHANGE) { continue; } if (!bubbleTransitions.shouldBeAppBubble(chg.getTaskInfo())) { continue; } return chg; } } return null; } private boolean animateUnfold( @NonNull IBinder transition, @NonNull TransitionInfo info, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedTransition.java +39 −15 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip2.phone.transition.PipTransitionUtils; import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.shared.TransitionUtil; import com.android.wm.shell.splitscreen.SplitScreen; import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.StageCoordinator; import com.android.wm.shell.unfold.UnfoldTransitionHandler; Loading Loading @@ -353,6 +355,23 @@ class DefaultMixedTransition extends DefaultMixedHandler.MixedTransition { transition); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Animating a mixed transition for " + "entering Bubbles while Split-Screen is foreground by %s", handler); TransitionInfo.Change bubblingTask = getChangeForBubblingTask(info, bubbleTransitions); // find previous split location for other task @SplitScreen.StageType int topSplitStageToKeep = SplitScreen.STAGE_TYPE_UNDEFINED; for (int i = info.getChanges().size() - 1; i >= 0; i--) { TransitionInfo.Change change = info.getChanges().get(i); if (change == bubblingTask) continue; int prevStage = splitHandler.getSplitItemStage(change.getLastParent()); if (prevStage != SplitScreen.STAGE_TYPE_UNDEFINED) { topSplitStageToKeep = prevStage; break; } } splitHandler.prepareDismissAnimation(topSplitStageToKeep, SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_BUBBLE, info, startTransaction, finishTransaction); // TODO(b/408328557): Migrate to checking transition token handler.startAnimation(transition, info, startTransaction, finishTransaction, finishCallback); Loading @@ -367,21 +386,7 @@ class DefaultMixedTransition extends DefaultMixedHandler.MixedTransition { @NonNull Transitions.TransitionFinishCallback finishCallback, @NonNull BubbleTransitions bubbleTransitions) { // Identify the task being launched into a bubble TransitionInfo.Change bubblingTask = null; for (int i = 0; i < info.getChanges().size(); i++) { final TransitionInfo.Change chg = info.getChanges().get(i); if (chg.getTaskInfo() != null && chg.getTaskInfo().getActivityType() == ACTIVITY_TYPE_STANDARD) { if (!TransitionUtil.isOpeningMode(chg.getMode()) && chg.getMode() != TRANSIT_CHANGE) { continue; } if (!bubbleTransitions.shouldBeAppBubble(chg.getTaskInfo())) { continue; } bubblingTask = chg; } } TransitionInfo.Change bubblingTask = getChangeForBubblingTask(info, bubbleTransitions); if (bubblingTask == null) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " No bubbling task found"); return false; Loading @@ -405,6 +410,25 @@ class DefaultMixedTransition extends DefaultMixedHandler.MixedTransition { return true; } private static @Nullable TransitionInfo.Change getChangeForBubblingTask( @NonNull TransitionInfo info, BubbleTransitions bubbleTransitions) { for (int i = 0; i < info.getChanges().size(); i++) { final TransitionInfo.Change chg = info.getChanges().get(i); if (chg.getTaskInfo() != null && chg.getTaskInfo().getActivityType() == ACTIVITY_TYPE_STANDARD) { if (!TransitionUtil.isOpeningMode(chg.getMode()) && chg.getMode() != TRANSIT_CHANGE) { continue; } if (!bubbleTransitions.shouldBeAppBubble(chg.getTaskInfo())) { continue; } return chg; } } return null; } private boolean animateUnfold( @NonNull IBinder transition, @NonNull TransitionInfo info, Loading