Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java +27 −14 Original line number Diff line number Diff line Loading @@ -460,15 +460,8 @@ public class StackStateAnimator { mHeadsUpAppearChildren.add(changingView); mTmpState.copyFrom(changingView.getViewState()); if (event.headsUpFromBottom) { // start from the bottom of the screen mTmpState.setYTranslation( mHeadsUpAppearHeightBottom + mHeadsUpAppearStartAboveScreen); } else { // start from the top of the screen mTmpState.setYTranslation( -mStackTopMargin - mHeadsUpAppearStartAboveScreen); } // translate the HUN in from the top, or the bottom of the screen mTmpState.setYTranslation(getHeadsUpYTranslationStart(event.headsUpFromBottom)); // set the height and the initial position mTmpState.applyToView(changingView); mAnimationProperties.setCustomInterpolator(View.TRANSLATION_Y, Loading Loading @@ -512,12 +505,20 @@ public class StackStateAnimator { || event.animationType == ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK) { mHeadsUpDisappearChildren.add(changingView); Runnable endRunnable = null; mTmpState.copyFrom(changingView.getViewState()); if (changingView.getParent() == null) { // This notification was actually removed, so we need to add it // transiently mHostLayout.addTransientView(changingView, 0); changingView.setTransientContainer(mHostLayout); mTmpState.initFrom(changingView); if (NotificationsImprovedHunAnimation.isEnabled()) { // StackScrollAlgorithm cannot find this view because it has been removed // from the NSSL. To correctly translate the view to the top or bottom of // the screen (where it animated from), we need to update its translation. mTmpState.setYTranslation( getHeadsUpYTranslationStart(event.headsUpFromBottom) ); } endRunnable = changingView::removeFromTransientContainer; } Loading Loading @@ -565,16 +566,19 @@ public class StackStateAnimator { changingView.setInRemovalAnimation(true); }; } if (NotificationsImprovedHunAnimation.isEnabled()) { mAnimationProperties.setCustomInterpolator(View.TRANSLATION_Y, Interpolators.FAST_OUT_SLOW_IN_REVERSE); } long removeAnimationDelay = changingView.performRemoveAnimation( ANIMATION_DURATION_HEADS_UP_DISAPPEAR, 0, 0.0f, true /* isHeadsUpAppear */, startAnimation, postAnimation, getGlobalAnimationFinishedListener()); mAnimationProperties.delay += removeAnimationDelay; if (NotificationsImprovedHunAnimation.isEnabled()) { mAnimationProperties.duration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR; mAnimationProperties.setCustomInterpolator(View.TRANSLATION_Y, Interpolators.FAST_OUT_SLOW_IN_REVERSE); mAnimationProperties.getAnimationFilter().animateY = true; mTmpState.animateTo(changingView, mAnimationProperties); } } else if (endRunnable != null) { endRunnable.run(); } Loading @@ -585,6 +589,15 @@ public class StackStateAnimator { return needsCustomAnimation; } private float getHeadsUpYTranslationStart(boolean headsUpFromBottom) { if (headsUpFromBottom) { // start from the bottom of the screen return mHeadsUpAppearHeightBottom + mHeadsUpAppearStartAboveScreen; } // start from the top of the screen return -mStackTopMargin - mHeadsUpAppearStartAboveScreen; } public void animateOverScrollToAmount(float targetAmount, final boolean onTop, final boolean isRubberbanded) { final float startOverScrollAmount = mHostLayout.getCurrentOverScrollAmount(onTop); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.stack import android.platform.test.annotations.EnableFlags import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.notification.row.ExpandableView Loading @@ -41,6 +42,7 @@ private const val VIEW_HEIGHT = 100 @SmallTest @RunWith(AndroidTestingRunner::class) @RunWithLooper class StackStateAnimatorTest : SysuiTestCase() { private lateinit var stackStateAnimator: StackStateAnimator Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java +27 −14 Original line number Diff line number Diff line Loading @@ -460,15 +460,8 @@ public class StackStateAnimator { mHeadsUpAppearChildren.add(changingView); mTmpState.copyFrom(changingView.getViewState()); if (event.headsUpFromBottom) { // start from the bottom of the screen mTmpState.setYTranslation( mHeadsUpAppearHeightBottom + mHeadsUpAppearStartAboveScreen); } else { // start from the top of the screen mTmpState.setYTranslation( -mStackTopMargin - mHeadsUpAppearStartAboveScreen); } // translate the HUN in from the top, or the bottom of the screen mTmpState.setYTranslation(getHeadsUpYTranslationStart(event.headsUpFromBottom)); // set the height and the initial position mTmpState.applyToView(changingView); mAnimationProperties.setCustomInterpolator(View.TRANSLATION_Y, Loading Loading @@ -512,12 +505,20 @@ public class StackStateAnimator { || event.animationType == ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK) { mHeadsUpDisappearChildren.add(changingView); Runnable endRunnable = null; mTmpState.copyFrom(changingView.getViewState()); if (changingView.getParent() == null) { // This notification was actually removed, so we need to add it // transiently mHostLayout.addTransientView(changingView, 0); changingView.setTransientContainer(mHostLayout); mTmpState.initFrom(changingView); if (NotificationsImprovedHunAnimation.isEnabled()) { // StackScrollAlgorithm cannot find this view because it has been removed // from the NSSL. To correctly translate the view to the top or bottom of // the screen (where it animated from), we need to update its translation. mTmpState.setYTranslation( getHeadsUpYTranslationStart(event.headsUpFromBottom) ); } endRunnable = changingView::removeFromTransientContainer; } Loading Loading @@ -565,16 +566,19 @@ public class StackStateAnimator { changingView.setInRemovalAnimation(true); }; } if (NotificationsImprovedHunAnimation.isEnabled()) { mAnimationProperties.setCustomInterpolator(View.TRANSLATION_Y, Interpolators.FAST_OUT_SLOW_IN_REVERSE); } long removeAnimationDelay = changingView.performRemoveAnimation( ANIMATION_DURATION_HEADS_UP_DISAPPEAR, 0, 0.0f, true /* isHeadsUpAppear */, startAnimation, postAnimation, getGlobalAnimationFinishedListener()); mAnimationProperties.delay += removeAnimationDelay; if (NotificationsImprovedHunAnimation.isEnabled()) { mAnimationProperties.duration = ANIMATION_DURATION_HEADS_UP_DISAPPEAR; mAnimationProperties.setCustomInterpolator(View.TRANSLATION_Y, Interpolators.FAST_OUT_SLOW_IN_REVERSE); mAnimationProperties.getAnimationFilter().animateY = true; mTmpState.animateTo(changingView, mAnimationProperties); } } else if (endRunnable != null) { endRunnable.run(); } Loading @@ -585,6 +589,15 @@ public class StackStateAnimator { return needsCustomAnimation; } private float getHeadsUpYTranslationStart(boolean headsUpFromBottom) { if (headsUpFromBottom) { // start from the bottom of the screen return mHeadsUpAppearHeightBottom + mHeadsUpAppearStartAboveScreen; } // start from the top of the screen return -mStackTopMargin - mHeadsUpAppearStartAboveScreen; } public void animateOverScrollToAmount(float targetAmount, final boolean onTop, final boolean isRubberbanded) { final float startOverScrollAmount = mHostLayout.getCurrentOverScrollAmount(onTop); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.stack import android.platform.test.annotations.EnableFlags import android.testing.AndroidTestingRunner import android.testing.TestableLooper.RunWithLooper import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.statusbar.notification.row.ExpandableView Loading @@ -41,6 +42,7 @@ private const val VIEW_HEIGHT = 100 @SmallTest @RunWith(AndroidTestingRunner::class) @RunWithLooper class StackStateAnimatorTest : SysuiTestCase() { private lateinit var stackStateAnimator: StackStateAnimator Loading