From eb6f3ae46df4a89e185959865bb1690493328265 Mon Sep 17 00:00:00 2001 From: Johannes Gallmann Date: Mon, 18 Dec 2023 14:26:09 +0100 Subject: [PATCH] Fix window corner radius for predictive back to home on Felix Bug: 316873212 Flag: ACONFIG com.android.window.flags.predictive_back_system_animations DISABLED Test: Manual, i.e. verifying on device that window corner radius matches the device corner radius during predictive back to home Change-Id: Ided0a09597b88a75e82dbd2ff94e7d7af5fadaa9 --- .../launcher3/QuickstepTransitionManager.java | 3 ++ .../LauncherBackAnimationController.java | 47 +++++++++++++++---- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 67d3827dfb..5890f14a48 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -1161,6 +1161,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener SystemUiProxy.INSTANCE.get(mLauncher) .registerRemoteTransition(mLauncherOpenTransition, homeCheck); if (mBackAnimationController != null) { + mBackAnimationController.registerComponentCallbacks(); mBackAnimationController.registerBackCallbacks(mHandler); } } @@ -1168,6 +1169,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener public void onActivityDestroyed() { unregisterRemoteAnimations(); unregisterRemoteTransitions(); + mLauncher.removeOnDeviceProfileChangeListener(this); SystemUiProxy.INSTANCE.get(mLauncher).setStartingWindowListener(null); ORDERED_BG_EXECUTOR.execute(() -> mLauncher.getContentResolver() .unregisterContentObserver(mAnimationRemovalObserver)); @@ -1200,6 +1202,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener mWallpaperOpenTransitionRunner = null; if (mBackAnimationController != null) { mBackAnimationController.unregisterBackCallbacks(); + mBackAnimationController.unregisterComponentCallbacks(); mBackAnimationController = null; } } diff --git a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java index b9029ea9f8..22f5b51132 100644 --- a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java +++ b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java @@ -30,6 +30,8 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ValueAnimator; +import android.content.ComponentCallbacks; +import android.content.res.Configuration; import android.graphics.Matrix; import android.graphics.PointF; import android.graphics.Rect; @@ -103,8 +105,8 @@ public class LauncherBackAnimationController { private final int mWindowScaleMarginX; /** Max window translation in the Y axis. */ private final int mWindowMaxDeltaY; - private final float mWindowScaleEndCornerRadius; - private final float mWindowScaleStartCornerRadius; + private float mWindowScaleEndCornerRadius; + private float mWindowScaleStartCornerRadius; private final Interpolator mCancelInterpolator; private final Interpolator mProgressInterpolator = new DecelerateInterpolator(); private final PointF mInitialTouchPos = new PointF(); @@ -124,17 +126,22 @@ public class LauncherBackAnimationController { private float mScrimAlpha; private boolean mOverridingStatusBarFlags; + private final ComponentCallbacks mComponentCallbacks = new ComponentCallbacks() { + @Override + public void onConfigurationChanged(Configuration newConfig) { + loadCornerRadius(); + } + + @Override + public void onLowMemory() {} + }; + public LauncherBackAnimationController( QuickstepLauncher launcher, QuickstepTransitionManager quickstepTransitionManager) { mLauncher = launcher; mQuickstepTransitionManager = quickstepTransitionManager; - mWindowScaleEndCornerRadius = QuickStepContract.supportsRoundedCornersOnWindows( - mLauncher.getResources()) - ? mLauncher.getResources().getDimensionPixelSize( - R.dimen.swipe_back_window_corner_radius) - : 0; - mWindowScaleStartCornerRadius = QuickStepContract.getWindowCornerRadius(mLauncher); + loadCornerRadius(); mWindowScaleMarginX = mLauncher.getResources().getDimensionPixelSize( R.dimen.swipe_back_window_scale_x_margin); mWindowMaxDeltaY = mLauncher.getResources().getDimensionPixelSize( @@ -551,6 +558,30 @@ public class LauncherBackAnimationController { anim.start(); } + private void loadCornerRadius() { + mWindowScaleEndCornerRadius = QuickStepContract.supportsRoundedCornersOnWindows( + mLauncher.getResources()) + ? mLauncher.getResources().getDimensionPixelSize( + R.dimen.swipe_back_window_corner_radius) + : 0; + mWindowScaleStartCornerRadius = QuickStepContract.getWindowCornerRadius(mLauncher); + } + + /** + * Called when launcher is destroyed. Unregisters component callbacks to avoid memory leaks. + */ + public void unregisterComponentCallbacks() { + mLauncher.unregisterComponentCallbacks(mComponentCallbacks); + } + + /** + * Registers component callbacks with the launcher to receive configuration change events. + */ + public void registerComponentCallbacks() { + mLauncher.registerComponentCallbacks(mComponentCallbacks); + } + + private void resetScrim() { removeScrimLayer(); mScrimAlpha = 0;