From 5c80561b44179225109c0c723d4915def779bcab Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Fri, 29 Oct 2021 14:11:32 -0700 Subject: [PATCH] Avoid conflict surface reset on auto-enter-pip FullscreenUnfoldController#resetSurface happens in between RecentsAnimationController cleanup and PipTaskOrganizer#onTaskAppeared may cause flicker at the end of auto-enter-pip transition. Fix it by intentionally ignore resetSurface if the task's pinned. Bug: 203724707 Bug: 204284060 Test: repeatedly swipe to enter PiP from YT on foldables Change-Id: Ie074e8a506d2526fc081ff4d089a2acb00549286 --- .../wm/shell/fullscreen/FullscreenUnfoldController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenUnfoldController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenUnfoldController.java index fc1b704e95ad8..aa3868cfca844 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenUnfoldController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenUnfoldController.java @@ -16,6 +16,7 @@ package com.android.wm.shell.fullscreen; +import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.util.MathUtils.lerp; import static android.view.Display.DEFAULT_DISPLAY; @@ -163,7 +164,10 @@ public final class FullscreenUnfoldController implements UnfoldListener, public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) { AnimationContext animationContext = mAnimationContextByTaskId.get(taskInfo.taskId); if (animationContext != null) { - resetSurface(animationContext); + // PiP task has its own cleanup path, ignore surface reset to avoid conflict. + if (taskInfo.getWindowingMode() != WINDOWING_MODE_PINNED) { + resetSurface(animationContext); + } mAnimationContextByTaskId.remove(taskInfo.taskId); }