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 df4dd4a3cf..877bdf83d5 100644 --- a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java +++ b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java @@ -28,6 +28,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; @@ -99,44 +101,45 @@ public class LauncherBackAnimationController { private final RectF mCurrentRect = new RectF(); private final QuickstepLauncher mLauncher; 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(); private RemoteAnimationTarget mBackTarget; private View mLauncherTargetView; - private SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction(); + private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction(); private boolean mSpringAnimationInProgress = false; private boolean mAnimatorSetInProgress = false; private float mBackProgress = 0; private boolean mBackInProgress = false; private OnBackInvokedCallbackStub mBackCallback; private IRemoteAnimationFinishedCallback mAnimationFinishedCallback; - private BackProgressAnimator mProgressAnimator = new BackProgressAnimator(); + private final BackProgressAnimator mProgressAnimator = new BackProgressAnimator(); private SurfaceControl mScrimLayer; private ValueAnimator mScrimAlphaAnimator; 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( - R.dimen.swipe_back_window_max_delta_y); mCancelInterpolator = AnimationUtils.loadInterpolator(mLauncher, R.interpolator.standard_interpolator); } @@ -548,6 +551,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; diff --git a/res/values/config.xml b/res/values/config.xml index 2980635634..33eb4c7203 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -201,7 +201,6 @@ 10dp - 160dp 40dp