From a95db2bb5611c3395311f477a53ffca006d79199 Mon Sep 17 00:00:00 2001 From: Nick Chameyev Date: Wed, 15 Feb 2023 12:35:05 +0000 Subject: [PATCH] Update corner radius in app/split screen unfold animation Updates corner radius in the unfold animation for split screen apps and full screen apps to match the current display. Fixes: 269424289 Test: manual fold/unfold with a full screen app and in split screen Change-Id: Ifb638ffb75ef194a510b1a3a1d1fd3727856722f --- .../wm/shell/dagger/WMShellModule.java | 6 +++-- .../FullscreenUnfoldTaskAnimator.java | 22 +++++++++++++++--- .../animation/SplitTaskUnfoldAnimator.java | 23 ++++++++++++++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 1135aa36aa4d5..d31e641d7dc78 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -555,16 +555,18 @@ public abstract class WMShellModule { static FullscreenUnfoldTaskAnimator provideFullscreenUnfoldTaskAnimator( Context context, UnfoldBackgroundController unfoldBackgroundController, + ShellController shellController, DisplayInsetsController displayInsetsController ) { return new FullscreenUnfoldTaskAnimator(context, unfoldBackgroundController, - displayInsetsController); + shellController, displayInsetsController); } @Provides static SplitTaskUnfoldAnimator provideSplitTaskUnfoldAnimatorBase( Context context, UnfoldBackgroundController backgroundController, + ShellController shellController, @ShellMainThread ShellExecutor executor, Lazy> splitScreenOptional, DisplayInsetsController displayInsetsController @@ -574,7 +576,7 @@ public abstract class WMShellModule { // controller directly once we refactor ShellTaskOrganizer to not depend on the unfold // animation controller directly. return new SplitTaskUnfoldAnimator(context, executor, splitScreenOptional, - backgroundController, displayInsetsController); + shellController, backgroundController, displayInsetsController); } @WMSingleton diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/FullscreenUnfoldTaskAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/FullscreenUnfoldTaskAnimator.java index eab82f00e9627..e0f3fcd932c21 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/FullscreenUnfoldTaskAnimator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/FullscreenUnfoldTaskAnimator.java @@ -26,8 +26,10 @@ import android.animation.TypeEvaluator; import android.annotation.NonNull; import android.app.TaskInfo; import android.content.Context; +import android.content.res.Configuration; import android.graphics.Matrix; import android.graphics.Rect; +import android.os.Trace; import android.util.SparseArray; import android.view.InsetsSource; import android.view.InsetsState; @@ -36,6 +38,8 @@ import android.view.SurfaceControl.Transaction; import com.android.internal.policy.ScreenDecorationsUtils; import com.android.wm.shell.common.DisplayInsetsController; +import com.android.wm.shell.sysui.ConfigurationChangeListener; +import com.android.wm.shell.sysui.ShellController; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.UnfoldBackgroundController; @@ -51,7 +55,7 @@ import com.android.wm.shell.unfold.UnfoldBackgroundController; * instances of FullscreenUnfoldTaskAnimator. */ public class FullscreenUnfoldTaskAnimator implements UnfoldTaskAnimator, - DisplayInsetsController.OnInsetsChangedListener { + DisplayInsetsController.OnInsetsChangedListener, ConfigurationChangeListener { private static final float[] FLOAT_9 = new float[9]; private static final TypeEvaluator RECT_EVALUATOR = new RectEvaluator(new Rect()); @@ -63,17 +67,21 @@ public class FullscreenUnfoldTaskAnimator implements UnfoldTaskAnimator, private final SparseArray mAnimationContextByTaskId = new SparseArray<>(); private final int mExpandedTaskBarHeight; - private final float mWindowCornerRadiusPx; private final DisplayInsetsController mDisplayInsetsController; private final UnfoldBackgroundController mBackgroundController; + private final Context mContext; + private final ShellController mShellController; private InsetsSource mTaskbarInsetsSource; + private float mWindowCornerRadiusPx; public FullscreenUnfoldTaskAnimator(Context context, @NonNull UnfoldBackgroundController backgroundController, - DisplayInsetsController displayInsetsController) { + ShellController shellController, DisplayInsetsController displayInsetsController) { + mContext = context; mDisplayInsetsController = displayInsetsController; mBackgroundController = backgroundController; + mShellController = shellController; mExpandedTaskBarHeight = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.taskbar_frame_height); mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(context); @@ -81,6 +89,14 @@ public class FullscreenUnfoldTaskAnimator implements UnfoldTaskAnimator, public void init() { mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, this); + mShellController.addConfigurationChangeListener(this); + } + + @Override + public void onConfigurationChanged(Configuration newConfiguration) { + Trace.beginSection("FullscreenUnfoldTaskAnimator#onConfigurationChanged"); + mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(mContext); + Trace.endSection(); } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java index 6e10ebe94c5d3..addd0a6012c44 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java @@ -28,8 +28,10 @@ import android.animation.RectEvaluator; import android.animation.TypeEvaluator; import android.app.TaskInfo; import android.content.Context; +import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.Rect; +import android.os.Trace; import android.util.SparseArray; import android.view.InsetsSource; import android.view.InsetsState; @@ -42,6 +44,8 @@ import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition; import com.android.wm.shell.splitscreen.SplitScreen; import com.android.wm.shell.splitscreen.SplitScreen.SplitScreenListener; import com.android.wm.shell.splitscreen.SplitScreenController; +import com.android.wm.shell.sysui.ConfigurationChangeListener; +import com.android.wm.shell.sysui.ShellController; import com.android.wm.shell.unfold.UnfoldAnimationController; import com.android.wm.shell.unfold.UnfoldBackgroundController; @@ -62,16 +66,18 @@ import dagger.Lazy; * They use independent instances of SplitTaskUnfoldAnimator. */ public class SplitTaskUnfoldAnimator implements UnfoldTaskAnimator, - DisplayInsetsController.OnInsetsChangedListener, SplitScreenListener { + DisplayInsetsController.OnInsetsChangedListener, SplitScreenListener, + ConfigurationChangeListener { private static final TypeEvaluator RECT_EVALUATOR = new RectEvaluator(new Rect()); private static final float CROPPING_START_MARGIN_FRACTION = 0.05f; + private final Context mContext; private final Executor mExecutor; private final DisplayInsetsController mDisplayInsetsController; private final SparseArray mAnimationContextByTaskId = new SparseArray<>(); private final int mExpandedTaskBarHeight; - private final float mWindowCornerRadiusPx; + private final ShellController mShellController; private final Lazy> mSplitScreenController; private final UnfoldBackgroundController mUnfoldBackgroundController; @@ -79,6 +85,7 @@ public class SplitTaskUnfoldAnimator implements UnfoldTaskAnimator, private final Rect mSideStageBounds = new Rect(); private final Rect mRootStageBounds = new Rect(); + private float mWindowCornerRadiusPx; private InsetsSource mTaskbarInsetsSource; @SplitPosition @@ -88,10 +95,12 @@ public class SplitTaskUnfoldAnimator implements UnfoldTaskAnimator, public SplitTaskUnfoldAnimator(Context context, Executor executor, Lazy> splitScreenController, - UnfoldBackgroundController unfoldBackgroundController, + ShellController shellController, UnfoldBackgroundController unfoldBackgroundController, DisplayInsetsController displayInsetsController) { mDisplayInsetsController = displayInsetsController; mExecutor = executor; + mContext = context; + mShellController = shellController; mUnfoldBackgroundController = unfoldBackgroundController; mSplitScreenController = splitScreenController; mExpandedTaskBarHeight = context.getResources().getDimensionPixelSize( @@ -103,6 +112,14 @@ public class SplitTaskUnfoldAnimator implements UnfoldTaskAnimator, @Override public void init() { mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, this); + mShellController.addConfigurationChangeListener(this); + } + + @Override + public void onConfigurationChanged(Configuration newConfiguration) { + Trace.beginSection("SplitTaskUnfoldAnimator#onConfigurationChanged"); + mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(mContext); + Trace.endSection(); } /**