From dcf3bf17b7e2828b8d2b5bd3a6e1180cf1261a22 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Thu, 27 Aug 2020 17:58:26 +0800 Subject: [PATCH] Decouple DividerView from SystemUI Moves FlingAnimationUtils to wm shell library as a common utils for both wm shell and SystemUI. There are some basic interpolators needed for wm shell library. Since they are relative basic and already been put into different packages, duplicates them directly to wm shell library. Bug: 161116823 Test: atest SystemUITests Test: manual check divider animation Change-Id: Iffabb7eff829cad69ef3d273b803f8fbd3ab6685 --- .../shell/animation}/FlingAnimationUtils.java | 134 ++++++++++-------- .../wm/shell/animation/Interpolators.java | 45 ++++++ .../NotificationPanelViewController.java | 2 +- .../window/OverlayPanelViewController.java | 2 +- .../OverlayPanelViewControllerTest.java | 2 +- .../com/android/systemui/ExpandHelper.java | 2 +- .../src/com/android/systemui/SwipeHelper.java | 2 +- .../stackdivider/DividerHandleView.java | 2 +- .../systemui/stackdivider/DividerView.java | 4 +- .../statusbar/KeyguardAffordanceView.java | 1 + .../phone/KeyguardAffordanceHelper.java | 2 +- .../NotificationPanelViewController.java | 2 +- .../statusbar/phone/PanelViewController.java | 2 +- .../systemui/wmshell/WMShellBaseModule.java | 9 ++ .../phone/NotificationPanelViewTest.java | 4 +- 15 files changed, 138 insertions(+), 77 deletions(-) rename {packages/SystemUI/src/com/android/systemui/statusbar => libs/WindowManager/Shell/src/com/android/wm/shell/animation}/FlingAnimationUtils.java (76%) create mode 100644 libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/FlingAnimationUtils.java similarity index 76% rename from packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java rename to libs/WindowManager/Shell/src/com/android/wm/shell/animation/FlingAnimationUtils.java index 12749fd8fce2a..357f777e1270b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/FlingAnimationUtils.java @@ -11,10 +11,10 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ -package com.android.systemui.statusbar; +package com.android.wm.shell.animation; import android.animation.Animator; import android.util.DisplayMetrics; @@ -23,11 +23,6 @@ import android.view.ViewPropertyAnimator; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; -import com.android.systemui.Interpolators; -import com.android.systemui.statusbar.notification.NotificationUtils; - -import javax.inject.Inject; - /** * Utility class to calculate general fling animation when the finger is released. */ @@ -63,9 +58,9 @@ public class FlingAnimationUtils { /** * @param maxLengthSeconds the longest duration an animation can become in seconds - * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards - * the end of the animation. 0 means it's at the beginning and no - * acceleration will take place. + * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards + * the end of the animation. 0 means it's at the beginning and no + * acceleration will take place. */ public FlingAnimationUtils(DisplayMetrics displayMetrics, float maxLengthSeconds, float speedUpFactor) { @@ -74,19 +69,19 @@ public class FlingAnimationUtils { /** * @param maxLengthSeconds the longest duration an animation can become in seconds - * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards - * the end of the animation. 0 means it's at the beginning and no - * acceleration will take place. - * @param x2 the x value to take for the second point of the bezier spline. If a value below 0 - * is provided, the value is automatically calculated. - * @param y2 the y value to take for the second point of the bezier spline + * @param speedUpFactor a factor from 0 to 1 how much the slow down should be shifted towards + * the end of the animation. 0 means it's at the beginning and no + * acceleration will take place. + * @param x2 the x value to take for the second point of the bezier spline. If a + * value below 0 is provided, the value is automatically calculated. + * @param y2 the y value to take for the second point of the bezier spline */ public FlingAnimationUtils(DisplayMetrics displayMetrics, float maxLengthSeconds, float speedUpFactor, float x2, float y2) { mMaxLengthSeconds = maxLengthSeconds; mSpeedUpFactor = speedUpFactor; if (x2 < 0) { - mLinearOutSlowInX2 = NotificationUtils.interpolate(LINEAR_OUT_SLOW_IN_X2, + mLinearOutSlowInX2 = interpolate(LINEAR_OUT_SLOW_IN_X2, LINEAR_OUT_SLOW_IN_X2_MAX, mSpeedUpFactor); } else { @@ -102,10 +97,10 @@ public class FlingAnimationUtils { * Applies the interpolator and length to the animator, such that the fling animation is * consistent with the finger motion. * - * @param animator the animator to apply + * @param animator the animator to apply * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion + * @param endValue the end value of the animator + * @param velocity the current velocity of the motion */ public void apply(Animator animator, float currValue, float endValue, float velocity) { apply(animator, currValue, endValue, velocity, Math.abs(endValue - currValue)); @@ -115,10 +110,10 @@ public class FlingAnimationUtils { * Applies the interpolator and length to the animator, such that the fling animation is * consistent with the finger motion. * - * @param animator the animator to apply + * @param animator the animator to apply * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion + * @param endValue the end value of the animator + * @param velocity the current velocity of the motion */ public void apply(ViewPropertyAnimator animator, float currValue, float endValue, float velocity) { @@ -129,10 +124,10 @@ public class FlingAnimationUtils { * Applies the interpolator and length to the animator, such that the fling animation is * consistent with the finger motion. * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion + * @param animator the animator to apply + * @param currValue the current value + * @param endValue the end value of the animator + * @param velocity the current velocity of the motion * @param maxDistance the maximum distance for this interaction; the maximum animation length * gets multiplied by the ratio between the actual distance and this value */ @@ -140,18 +135,18 @@ public class FlingAnimationUtils { float maxDistance) { AnimatorProperties properties = getProperties(currValue, endValue, velocity, maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); + animator.setDuration(properties.mDuration); + animator.setInterpolator(properties.mInterpolator); } /** * Applies the interpolator and length to the animator, such that the fling animation is * consistent with the finger motion. * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion + * @param animator the animator to apply + * @param currValue the current value + * @param endValue the end value of the animator + * @param velocity the current velocity of the motion * @param maxDistance the maximum distance for this interaction; the maximum animation length * gets multiplied by the ratio between the actual distance and this value */ @@ -159,8 +154,8 @@ public class FlingAnimationUtils { float velocity, float maxDistance) { AnimatorProperties properties = getProperties(currValue, endValue, velocity, maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); + animator.setDuration(properties.mDuration); + animator.setInterpolator(properties.mInterpolator); } private AnimatorProperties getProperties(float currValue, @@ -171,28 +166,28 @@ public class FlingAnimationUtils { float velAbs = Math.abs(velocity); float velocityFactor = mSpeedUpFactor == 0.0f ? 1.0f : Math.min(velAbs / HIGH_VELOCITY_DP_PER_SECOND, 1.0f); - float startGradient = NotificationUtils.interpolate(LINEAR_OUT_SLOW_IN_START_GRADIENT, + float startGradient = interpolate(LINEAR_OUT_SLOW_IN_START_GRADIENT, mY2 / mLinearOutSlowInX2, velocityFactor); float durationSeconds = startGradient * diff / velAbs; Interpolator slowInInterpolator = getInterpolator(startGradient, velocityFactor); if (durationSeconds <= maxLengthSeconds) { - mAnimatorProperties.interpolator = slowInInterpolator; + mAnimatorProperties.mInterpolator = slowInInterpolator; } else if (velAbs >= mMinVelocityPxPerSecond) { // Cross fade between fast-out-slow-in and linear interpolator with current velocity. durationSeconds = maxLengthSeconds; - VelocityInterpolator velocityInterpolator - = new VelocityInterpolator(durationSeconds, velAbs, diff); + VelocityInterpolator velocityInterpolator = new VelocityInterpolator( + durationSeconds, velAbs, diff); InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator( velocityInterpolator, slowInInterpolator, Interpolators.LINEAR_OUT_SLOW_IN); - mAnimatorProperties.interpolator = superInterpolator; + mAnimatorProperties.mInterpolator = superInterpolator; } else { // Just use a normal interpolator which doesn't take the velocity into account. durationSeconds = maxLengthSeconds; - mAnimatorProperties.interpolator = Interpolators.FAST_OUT_SLOW_IN; + mAnimatorProperties.mInterpolator = Interpolators.FAST_OUT_SLOW_IN; } - mAnimatorProperties.duration = (long) (durationSeconds * 1000); + mAnimatorProperties.mDuration = (long) (durationSeconds * 1000); return mAnimatorProperties; } @@ -225,10 +220,10 @@ public class FlingAnimationUtils { * consistent with the finger motion for the case when the animation is making something * disappear. * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion + * @param animator the animator to apply + * @param currValue the current value + * @param endValue the end value of the animator + * @param velocity the current velocity of the motion * @param maxDistance the maximum distance for this interaction; the maximum animation length * gets multiplied by the ratio between the actual distance and this value */ @@ -236,8 +231,8 @@ public class FlingAnimationUtils { float velocity, float maxDistance) { AnimatorProperties properties = getDismissingProperties(currValue, endValue, velocity, maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); + animator.setDuration(properties.mDuration); + animator.setInterpolator(properties.mInterpolator); } /** @@ -245,10 +240,10 @@ public class FlingAnimationUtils { * consistent with the finger motion for the case when the animation is making something * disappear. * - * @param animator the animator to apply - * @param currValue the current value - * @param endValue the end value of the animator - * @param velocity the current velocity of the motion + * @param animator the animator to apply + * @param currValue the current value + * @param endValue the end value of the animator + * @param velocity the current velocity of the motion * @param maxDistance the maximum distance for this interaction; the maximum animation length * gets multiplied by the ratio between the actual distance and this value */ @@ -256,8 +251,8 @@ public class FlingAnimationUtils { float velocity, float maxDistance) { AnimatorProperties properties = getDismissingProperties(currValue, endValue, velocity, maxDistance); - animator.setDuration(properties.duration); - animator.setInterpolator(properties.interpolator); + animator.setDuration(properties.mDuration); + animator.setInterpolator(properties.mInterpolator); } private AnimatorProperties getDismissingProperties(float currValue, float endValue, @@ -272,24 +267,24 @@ public class FlingAnimationUtils { Interpolator mLinearOutFasterIn = new PathInterpolator(0, 0, LINEAR_OUT_FASTER_IN_X2, y2); float durationSeconds = startGradient * diff / velAbs; if (durationSeconds <= maxLengthSeconds) { - mAnimatorProperties.interpolator = mLinearOutFasterIn; + mAnimatorProperties.mInterpolator = mLinearOutFasterIn; } else if (velAbs >= mMinVelocityPxPerSecond) { // Cross fade between linear-out-faster-in and linear interpolator with current // velocity. durationSeconds = maxLengthSeconds; - VelocityInterpolator velocityInterpolator - = new VelocityInterpolator(durationSeconds, velAbs, diff); + VelocityInterpolator velocityInterpolator = new VelocityInterpolator( + durationSeconds, velAbs, diff); InterpolatorInterpolator superInterpolator = new InterpolatorInterpolator( velocityInterpolator, mLinearOutFasterIn, Interpolators.LINEAR_OUT_SLOW_IN); - mAnimatorProperties.interpolator = superInterpolator; + mAnimatorProperties.mInterpolator = superInterpolator; } else { // Just use a normal interpolator which doesn't take the velocity into account. durationSeconds = maxLengthSeconds; - mAnimatorProperties.interpolator = Interpolators.FAST_OUT_LINEAR_IN; + mAnimatorProperties.mInterpolator = Interpolators.FAST_OUT_LINEAR_IN; } - mAnimatorProperties.duration = (long) (durationSeconds * 1000); + mAnimatorProperties.mDuration = (long) (durationSeconds * 1000); return mAnimatorProperties; } @@ -361,10 +356,11 @@ public class FlingAnimationUtils { } private static class AnimatorProperties { - Interpolator interpolator; - long duration; + Interpolator mInterpolator; + long mDuration; } + /** Builder for {@link #FlingAnimationUtils}. */ public static class Builder { private final DisplayMetrics mDisplayMetrics; float mMaxLengthSeconds; @@ -372,32 +368,39 @@ public class FlingAnimationUtils { float mX2; float mY2; - @Inject public Builder(DisplayMetrics displayMetrics) { mDisplayMetrics = displayMetrics; reset(); } + /** Sets the longest duration an animation can become in seconds. */ public Builder setMaxLengthSeconds(float maxLengthSeconds) { mMaxLengthSeconds = maxLengthSeconds; return this; } + /** + * Sets the factor for how much the slow down should be shifted towards the end of the + * animation. + */ public Builder setSpeedUpFactor(float speedUpFactor) { mSpeedUpFactor = speedUpFactor; return this; } + /** Sets the x value to take for the second point of the bezier spline. */ public Builder setX2(float x2) { mX2 = x2; return this; } + /** Sets the y value to take for the second point of the bezier spline. */ public Builder setY2(float y2) { mY2 = y2; return this; } + /** Resets all parameters of the builder. */ public Builder reset() { mMaxLengthSeconds = 0; mSpeedUpFactor = 0.0f; @@ -407,9 +410,14 @@ public class FlingAnimationUtils { return this; } + /** Builds {@link #FlingAnimationUtils}. */ public FlingAnimationUtils build() { return new FlingAnimationUtils(mDisplayMetrics, mMaxLengthSeconds, mSpeedUpFactor, mX2, mY2); } } + + private static float interpolate(float start, float end, float amount) { + return start * (1.0f - amount) + end * amount; + } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java new file mode 100644 index 0000000000000..b794b91568fc7 --- /dev/null +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.wm.shell.animation; + +import android.view.animation.Interpolator; +import android.view.animation.PathInterpolator; + +/** + * Common interpolators used in wm shell library. + */ +public class Interpolators { + /** + * Interpolator for fast out linear in animation. + */ + public static final Interpolator FAST_OUT_LINEAR_IN = new PathInterpolator(0.4f, 0f, 1f, 1f); + + /** + * Interpolator for fast out slow in animation. + */ + public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f); + + /** + * Interpolator for linear out slow in animation. + */ + public static final Interpolator LINEAR_OUT_SLOW_IN = new PathInterpolator(0f, 0f, 0.2f, 1f); + + /** + * Interpolator to be used when animating a move based on a click. Pair with enough duration. + */ + public static final Interpolator TOUCH_RESPONSE = new PathInterpolator(0.3f, 0f, 0.1f, 1f); +} diff --git a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java index fe4cba8e73cd3..8d91e7eae91ae 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java @@ -54,8 +54,8 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.StatusBarState; +import com.android.wm.shell.animation.FlingAnimationUtils; import java.util.concurrent.Executor; diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java index 1b00c63010118..d928ad0f42c99 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayPanelViewController.java @@ -34,7 +34,7 @@ import androidx.annotation.CallSuper; import com.android.systemui.R; import com.android.systemui.car.CarDeviceProvisionedController; import com.android.systemui.dagger.qualifiers.Main; -import com.android.systemui.statusbar.FlingAnimationUtils; +import com.android.wm.shell.animation.FlingAnimationUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java index 7311cdb68a3c2..bed803eedc22f 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayPanelViewControllerTest.java @@ -40,8 +40,8 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.car.CarDeviceProvisionedController; import com.android.systemui.car.CarSystemUiTest; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.tests.R; +import com.android.wm.shell.animation.FlingAnimationUtils; import org.junit.Before; import org.junit.Test; diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java index 17b840cc7a20e..744a77f5cff98 100644 --- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java +++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java @@ -32,10 +32,10 @@ import android.view.View; import android.view.ViewConfiguration; import com.android.internal.annotations.VisibleForTesting; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; import com.android.systemui.statusbar.policy.ScrollAdapter; +import com.android.wm.shell.animation.FlingAnimationUtils; public class ExpandHelper implements Gefingerpoken { public interface Callback { diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index e91284b546dbc..8aa3493cc105b 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -37,8 +37,8 @@ import android.view.accessibility.AccessibilityEvent; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; +import com.android.wm.shell.animation.FlingAnimationUtils; public class SwipeHelper implements Gefingerpoken { static final String TAG = "com.android.systemui.SwipeHelper"; diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java index a10242a689a20..1559169bd8cad 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerHandleView.java @@ -28,8 +28,8 @@ import android.util.AttributeSet; import android.util.Property; import android.view.View; -import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.wm.shell.animation.Interpolators; /** * View for the handle in the docked stack divider. diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index fdf24b1e1a7e2..9bf7ea6819260 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -62,9 +62,9 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.policy.DividerSnapAlgorithm; import com.android.internal.policy.DividerSnapAlgorithm.SnapTarget; import com.android.internal.policy.DockedDividerUtils; -import com.android.systemui.Interpolators; import com.android.systemui.R; -import com.android.systemui.statusbar.FlingAnimationUtils; +import com.android.wm.shell.animation.FlingAnimationUtils; +import com.android.wm.shell.animation.Interpolators; import java.util.function.Consumer; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java index 2c296353bd14d..4b9d5924a8d22 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java @@ -40,6 +40,7 @@ import android.widget.ImageView; import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.wm.shell.animation.FlingAnimationUtils; /** * An ImageView which does not have overlapping renderings commands and therefore does not need a diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java index ba94202658495..5dfb22faee7a4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java @@ -29,8 +29,8 @@ import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.classifier.Classifier; import com.android.systemui.plugins.FalsingManager; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.KeyguardAffordanceView; +import com.android.wm.shell.animation.FlingAnimationUtils; /** * A touch handler of the keyguard which is responsible for launching phone and camera affordances. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index f62783502e5be..cd9cc0775c666 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -86,7 +86,6 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.qs.QSFragment; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.GestureRecorder; import com.android.systemui.statusbar.KeyguardAffordanceView; import com.android.systemui.statusbar.KeyguardIndicationController; @@ -123,6 +122,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardUserSwitcher; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.util.InjectionInflationController; +import com.android.wm.shell.animation.FlingAnimationUtils; import java.io.FileDescriptor; import java.io.PrintWriter; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java index 0e72506c6d949..6fa99ba410069 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -48,12 +48,12 @@ import com.android.systemui.R; import com.android.systemui.classifier.Classifier; import com.android.systemui.doze.DozeLog; import com.android.systemui.plugins.FalsingManager; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.wm.shell.animation.FlingAnimationUtils; import java.io.FileDescriptor; import java.io.PrintWriter; diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java index cdf85fb549abe..e63c6c3173923 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellBaseModule.java @@ -18,6 +18,7 @@ package com.android.systemui.wmshell; import android.content.Context; import android.os.Handler; +import android.util.DisplayMetrics; import android.view.IWindowManager; import com.android.internal.logging.UiEventLogger; @@ -31,6 +32,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.FloatingContentCoordinator; import com.android.wm.shell.ShellTaskOrganizer; +import com.android.wm.shell.animation.FlingAnimationUtils; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.TransactionPool; @@ -104,4 +106,11 @@ public abstract class WMShellBaseModule { @BindsOptionalOf abstract SplitScreen optionalSplitScreen(); + + @SysUISingleton + @Provides + static FlingAnimationUtils.Builder provideFlingAnimationUtilsBuilder( + DisplayMetrics displayMetrics) { + return new FlingAnimationUtils.Builder(displayMetrics); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java index cf64ff2f8cd64..7ee27c9a8aaba 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java @@ -62,7 +62,6 @@ import com.android.systemui.doze.DozeLog; import com.android.systemui.media.MediaHierarchyManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.KeyguardAffordanceView; import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.NotificationShelfController; @@ -81,6 +80,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.InjectionInflationController; +import com.android.wm.shell.animation.FlingAnimationUtils; import org.junit.Before; import org.junit.Test; @@ -192,8 +192,6 @@ public class NotificationPanelViewTest extends SysuiTestCase { @Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController; - private FlingAnimationUtils.Builder mFlingAnimationUtilsBuilder; - private NotificationPanelViewController mNotificationPanelViewController; private View.AccessibilityDelegate mAccessibiltyDelegate;