diff options
Diffstat (limited to 'com/android/server/wm/TaskStack.java')
-rw-r--r-- | com/android/server/wm/TaskStack.java | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/com/android/server/wm/TaskStack.java b/com/android/server/wm/TaskStack.java index 62754ada..ae9e8026 100644 --- a/com/android/server/wm/TaskStack.java +++ b/com/android/server/wm/TaskStack.java @@ -33,12 +33,11 @@ import static android.view.WindowManager.DOCKED_LEFT; import static android.view.WindowManager.DOCKED_RIGHT; import static android.view.WindowManager.DOCKED_TOP; import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER; -import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_MOVEMENT; -import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.StackProto.ADJUSTED_BOUNDS; import static com.android.server.wm.StackProto.ADJUSTED_FOR_IME; import static com.android.server.wm.StackProto.ADJUST_DIVIDER_AMOUNT; import static com.android.server.wm.StackProto.ADJUST_IME_AMOUNT; +import static com.android.server.wm.StackProto.ANIMATING_BOUNDS; import static com.android.server.wm.StackProto.ANIMATION_BACKGROUND_SURFACE_IS_DIMMING; import static com.android.server.wm.StackProto.BOUNDS; import static com.android.server.wm.StackProto.DEFER_REMOVAL; @@ -47,6 +46,8 @@ import static com.android.server.wm.StackProto.ID; import static com.android.server.wm.StackProto.MINIMIZE_AMOUNT; import static com.android.server.wm.StackProto.TASKS; import static com.android.server.wm.StackProto.WINDOW_CONTAINER; +import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_MOVEMENT; +import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.annotation.CallSuper; import android.content.res.Configuration; @@ -62,12 +63,10 @@ import android.util.proto.ProtoOutputStream; import android.view.DisplayInfo; import android.view.Surface; import android.view.SurfaceControl; - import com.android.internal.policy.DividerSnapAlgorithm; import com.android.internal.policy.DividerSnapAlgorithm.SnapTarget; import com.android.internal.policy.DockedDividerUtils; import com.android.server.EventLogTags; - import java.io.PrintWriter; public class TaskStack extends WindowContainer<Task> implements @@ -829,6 +828,14 @@ public class TaskStack extends WindowContainer<Task> implements } } + if (inSplitScreenSecondaryWindowingMode()) { + // When the stack is resized due to entering split screen secondary, offset the + // windows to compensate for the new stack position. + forAllWindows(w -> { + w.mWinAnimator.setOffsetPositionForStackResize(true); + }, true); + } + updateDisplayInfo(bounds); updateSurfaceBounds(); } @@ -1333,6 +1340,20 @@ public class TaskStack extends WindowContainer<Task> implements return mMinimizeAmount != 0f; } + /** + * @return {@code true} if we have a {@link Task} that is animating (currently only used for the + * recents animation); {@code false} otherwise. + */ + boolean isTaskAnimating() { + for (int j = mChildren.size() - 1; j >= 0; j--) { + final Task task = mChildren.get(j); + if (task.isTaskAnimating()) { + return true; + } + } + return false; + } + @CallSuper @Override public void writeToProto(ProtoOutputStream proto, long fieldId, boolean trim) { @@ -1351,6 +1372,7 @@ public class TaskStack extends WindowContainer<Task> implements proto.write(ADJUST_IME_AMOUNT, mAdjustImeAmount); proto.write(ADJUST_DIVIDER_AMOUNT, mAdjustDividerAmount); mAdjustedBounds.writeToProto(proto, ADJUSTED_BOUNDS); + proto.write(ANIMATING_BOUNDS, mBoundsAnimating); proto.end(token); } @@ -1687,6 +1709,25 @@ public class TaskStack extends WindowContainer<Task> implements } } + @Override + public boolean shouldDeferStartOnMoveToFullscreen() { + // Workaround for the recents animation -- normally we need to wait for the new activity to + // show before starting the PiP animation, but because we start and show the home activity + // early for the recents animation prior to the PiP animation starting, there is no + // subsequent all-drawn signal. In this case, we can skip the pause when the home stack is + // already visible and drawn. + final TaskStack homeStack = mDisplayContent.getHomeStack(); + if (homeStack == null) { + return true; + } + final Task homeTask = homeStack.getTopChild(); + final AppWindowToken homeApp = homeTask.getTopVisibleAppToken(); + if (!homeTask.isVisible() || homeApp == null) { + return true; + } + return !homeApp.allDrawn; + } + /** * @return True if we are currently animating the pinned stack from fullscreen to non-fullscreen * bounds and we have a deferred PiP mode changed callback set with the animation. |