From b1ffb7953ccb709ab73651731da7560b9d01ab29 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Thu, 31 Mar 2022 11:43:03 -0700 Subject: [PATCH] Do not set shadow when leaving PiP mode Regression from ag/17456722 that setting the shadow radius when leaving away from PiP would result in screen dimming. Change to apply shadow radius when entering / moving / resizing PiP only Bug: 227607130 Test: follow the reproduce steps in bug Change-Id: Ie4d4dba94a1c66da52825798df60ebf3f971aa32 --- .../wm/shell/pip/PipAnimationController.java | 17 +++++++++++------ .../shell/pip/PipSurfaceTransactionHelper.java | 5 +++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java index 51e229e132844..337900088c92a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java @@ -432,6 +432,11 @@ public class PipAnimationController { return !isOutPipDirection(mTransitionDirection); } + boolean shouldApplyShadowRadius() { + return !isOutPipDirection(mTransitionDirection) + && !isRemovePipDirection(mTransitionDirection); + } + boolean inScaleTransition() { if (mAnimationType != ANIM_TYPE_BOUNDS) return false; final int direction = getTransitionDirection(); @@ -483,7 +488,7 @@ public class PipAnimationController { setCurrentValue(alpha); getSurfaceTransactionHelper().alpha(tx, leash, alpha) .round(tx, leash, shouldApplyCornerRadius()) - .shadow(tx, leash); + .shadow(tx, leash, shouldApplyShadowRadius()); tx.apply(); } @@ -497,7 +502,7 @@ public class PipAnimationController { .resetScale(tx, leash, getDestinationBounds()) .crop(tx, leash, getDestinationBounds()) .round(tx, leash, shouldApplyCornerRadius()) - .shadow(tx, leash); + .shadow(tx, leash, shouldApplyShadowRadius()); tx.show(leash); tx.apply(); } @@ -585,7 +590,7 @@ public class PipAnimationController { getSurfaceTransactionHelper().crop(tx, leash, base) .scale(tx, leash, base, bounds, angle) .round(tx, leash, base, bounds) - .shadow(tx, leash); + .shadow(tx, leash, shouldApplyShadowRadius()); } } else { final Rect insets = computeInsets(fraction); @@ -596,7 +601,7 @@ public class PipAnimationController { sourceBounds.inset(insets); getSurfaceTransactionHelper() .round(tx, leash, sourceBounds, bounds) - .shadow(tx, leash); + .shadow(tx, leash, shouldApplyShadowRadius()); } } if (!handlePipTransaction(leash, tx, bounds)) { @@ -649,7 +654,7 @@ public class PipAnimationController { if (shouldApplyCornerRadius()) { getSurfaceTransactionHelper() .round(tx, leash, sourceBounds, bounds) - .shadow(tx, leash); + .shadow(tx, leash, shouldApplyShadowRadius()); } tx.apply(); } @@ -668,7 +673,7 @@ public class PipAnimationController { getSurfaceTransactionHelper() .alpha(tx, leash, 1f) .round(tx, leash, shouldApplyCornerRadius()) - .shadow(tx, leash); + .shadow(tx, leash, shouldApplyShadowRadius()); // TODO(b/178632364): this is a work around for the black background when // entering PiP in buttion navigation mode. if (isInPipDirection(direction)) { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java index 7447fb54d6368..00f62d435b681 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java @@ -206,8 +206,9 @@ public class PipSurfaceTransactionHelper { * Operates the shadow radius on a given transaction and leash * @return same {@link PipSurfaceTransactionHelper} instance for method chaining */ - public PipSurfaceTransactionHelper shadow(SurfaceControl.Transaction tx, SurfaceControl leash) { - tx.setShadowRadius(leash, mShadowRadius); + public PipSurfaceTransactionHelper shadow(SurfaceControl.Transaction tx, SurfaceControl leash, + boolean applyShadowRadius) { + tx.setShadowRadius(leash, applyShadowRadius ? mShadowRadius : 0); return this; }