From 329b65045fef8fdb6d9c4eb70d25c51ee28a8fb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Ciche=C5=84ski?= Date: Tue, 21 Feb 2023 20:39:32 +0000 Subject: [PATCH] Remove dismiss target only when it's attached to a parent. Bug: 258120818 Change-Id: I63bd5b5cf43db7c794cba84d680b5e168f0e2350 Test: n/a --- .../wm/shell/pip/phone/PipDismissTargetHandler.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java index 7619646804ad3..9729a4007bac7 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java @@ -235,21 +235,14 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen /** Adds the magnetic target view to the WindowManager so it's ready to be animated in. */ public void createOrUpdateDismissTarget() { - if (!mTargetViewContainer.isAttachedToWindow()) { + if (mTargetViewContainer.getParent() == null) { mTargetViewContainer.cancelAnimators(); mTargetViewContainer.setVisibility(View.INVISIBLE); mTargetViewContainer.getViewTreeObserver().removeOnPreDrawListener(this); mHasDismissTargetSurface = false; - try { - mWindowManager.addView(mTargetViewContainer, getDismissTargetLayoutParams()); - } catch (IllegalStateException e) { - // This shouldn't happen, but if the target is already added, just update its layout - // params. - mWindowManager.updateViewLayout( - mTargetViewContainer, getDismissTargetLayoutParams()); - } + mWindowManager.addView(mTargetViewContainer, getDismissTargetLayoutParams()); } else { mWindowManager.updateViewLayout(mTargetViewContainer, getDismissTargetLayoutParams()); } @@ -306,7 +299,7 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen * Removes the dismiss target and cancels any pending callbacks to show it. */ public void cleanUpDismissTarget() { - if (mTargetViewContainer.isAttachedToWindow()) { + if (mTargetViewContainer.getParent() != null) { mWindowManager.removeViewImmediate(mTargetViewContainer); } }