diff options
| author | 2020-03-27 16:37:34 -0700 | |
|---|---|---|
| committer | 2020-03-31 10:42:32 -0700 | |
| commit | fa8b418633b8832eb7a21d2d662815f1624f417a (patch) | |
| tree | bb5c71efb75a2dece04c49ad0be5d757511eab55 | |
| parent | 9f2d21f3cc9a9ff402f60b6776e0afde783f6024 (diff) | |
Fixed some issues where conversation badges would not be visible
Badges would only update once the next update of the shelf came in,
so they would sometimes would remain without a background for a
short time.
Bug: 150905003
Test: add conversations, observe normal background after expanding QS and flinging down
Change-Id: If8756ac8916e6e1fc51cf3a90c34c87d8db71db6
8 files changed, 66 insertions, 26 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java index fe565529db32..1f9d3af70b4f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java @@ -96,7 +96,7 @@ public class PropertyAnimator { || previousAnimator.getAnimatedFraction() == 0)) { animator.setStartDelay(properties.delay); } - AnimatorListenerAdapter listener = properties.getAnimationFinishListener(); + AnimatorListenerAdapter listener = properties.getAnimationFinishListener(property); if (listener != null) { animator.addListener(listener); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java index 87a3cc9d2db8..112d48c115c2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java @@ -16,12 +16,15 @@ package com.android.systemui.statusbar.notification.stack; +import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.util.ArrayMap; import android.util.Property; import android.view.View; import android.view.animation.Interpolator; +import java.util.function.Consumer; + /** * Properties for a View animation */ @@ -29,7 +32,7 @@ public class AnimationProperties { public long duration; public long delay; private ArrayMap<Property, Interpolator> mInterpolatorMap; - private AnimatorListenerAdapter mAnimatorListenerAdapter; + private Consumer<Property> mAnimationEndAction; /** * @return an animation filter for this animation. @@ -44,14 +47,32 @@ public class AnimationProperties { } /** - * @return a listener that should be run whenever any property finished its animation + * @return a listener that will be added for a given property during its animation. */ - public AnimatorListenerAdapter getAnimationFinishListener() { - return mAnimatorListenerAdapter; + public AnimatorListenerAdapter getAnimationFinishListener(Property property) { + if (mAnimationEndAction == null) { + return null; + } + Consumer<Property> endAction = mAnimationEndAction; + return new AnimatorListenerAdapter() { + private boolean mCancelled; + + @Override + public void onAnimationCancel(Animator animation) { + mCancelled = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + if (!mCancelled) { + endAction.accept(property); + } + } + }; } - public AnimationProperties setAnimationFinishListener(AnimatorListenerAdapter listener) { - mAnimatorListenerAdapter = listener; + public AnimationProperties setAnimationEndAction(Consumer<Property> listener) { + mAnimationEndAction = listener; return this; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java index 72ef7f9572a4..628c4e258e50 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java @@ -263,7 +263,8 @@ public class ExpandableViewState extends ViewState { || previousAnimator.getAnimatedFraction() == 0)) { animator.setStartDelay(properties.delay); } - AnimatorListenerAdapter listener = properties.getAnimationFinishListener(); + AnimatorListenerAdapter listener = properties.getAnimationFinishListener( + null /* no property for this height */); if (listener != null) { animator.addListener(listener); } @@ -343,7 +344,8 @@ public class ExpandableViewState extends ViewState { || previousAnimator.getAnimatedFraction() == 0)) { animator.setStartDelay(properties.delay); } - AnimatorListenerAdapter listener = properties.getAnimationFinishListener(); + AnimatorListenerAdapter listener = properties.getAnimationFinishListener( + null /* no property for top inset */); if (listener != null) { animator.addListener(listener); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java index 14442e346db4..77850826a5e1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java @@ -104,7 +104,7 @@ public class StackStateAnimator { } @Override - public AnimatorListenerAdapter getAnimationFinishListener() { + public AnimatorListenerAdapter getAnimationFinishListener(Property property) { return getGlobalAnimationFinishedListener(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java index b00068cd2445..3da4e321c54d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java @@ -393,7 +393,7 @@ public class ViewState implements Dumpable { || previousAnimator.getAnimatedFraction() == 0)) { animator.setStartDelay(properties.delay); } - AnimatorListenerAdapter listener = properties.getAnimationFinishListener(); + AnimatorListenerAdapter listener = properties.getAnimationFinishListener(View.ALPHA); if (listener != null) { animator.addListener(listener); } @@ -450,7 +450,8 @@ public class ViewState implements Dumpable { || previousAnimator.getAnimatedFraction() == 0)) { animator.setStartDelay(properties.delay); } - AnimatorListenerAdapter listener = properties.getAnimationFinishListener(); + AnimatorListenerAdapter listener = properties.getAnimationFinishListener( + View.TRANSLATION_Z); if (listener != null) { animator.addListener(listener); } @@ -515,7 +516,8 @@ public class ViewState implements Dumpable { || previousAnimator.getAnimatedFraction() == 0)) { animator.setStartDelay(properties.delay); } - AnimatorListenerAdapter listener = properties.getAnimationFinishListener(); + AnimatorListenerAdapter listener = properties.getAnimationFinishListener( + View.TRANSLATION_X); if (listener != null) { animator.addListener(listener); } @@ -580,7 +582,8 @@ public class ViewState implements Dumpable { || previousAnimator.getAnimatedFraction() == 0)) { animator.setStartDelay(properties.delay); } - AnimatorListenerAdapter listener = properties.getAnimationFinishListener(); + AnimatorListenerAdapter listener = properties.getAnimationFinishListener( + View.TRANSLATION_Y); if (listener != null) { animator.addListener(listener); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java index 623dae85687e..07eaaa187fbe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -19,6 +19,8 @@ package com.android.systemui.statusbar.phone; import static com.android.systemui.statusbar.phone.HeadsUpAppearanceController.CONTENT_FADE_DELAY; import static com.android.systemui.statusbar.phone.HeadsUpAppearanceController.CONTENT_FADE_DURATION; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Configuration; import android.graphics.Canvas; @@ -27,6 +29,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Icon; import android.util.AttributeSet; +import android.util.Property; import android.view.View; import android.view.animation.Interpolator; @@ -43,6 +46,7 @@ import com.android.systemui.statusbar.notification.stack.ViewState; import java.util.ArrayList; import java.util.HashMap; +import java.util.function.Consumer; /** * A container for notification icons. It handles overflowing icons properly and positions them @@ -275,7 +279,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { super.onViewAdded(child); boolean isReplacingIcon = isReplacingIcon(child); if (!mChangingViewPositions) { - IconState v = new IconState(); + IconState v = new IconState(child); if (isReplacingIcon) { v.justAdded = false; v.justReplaced = true; @@ -703,6 +707,20 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { public boolean noAnimations; public boolean isLastExpandIcon; public int customTransformHeight = NO_VALUE; + private final View mView; + + private final Consumer<Property> mCannedAnimationEndListener; + + public IconState(View child) { + mView = child; + mCannedAnimationEndListener = (property) -> { + // If we finished animating out of the shelf + if (property == View.TRANSLATION_Y && iconAppearAmount == 0.0f + && mView.getVisibility() == VISIBLE) { + mView.setVisibility(INVISIBLE); + } + }; + } @Override public void applyToView(View view) { @@ -747,6 +765,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { interpolator = Interpolators.ICON_OVERSHOT; } sTempProperties.setCustomInterpolator(View.TRANSLATION_Y, interpolator); + sTempProperties.setAnimationEndAction(mCannedAnimationEndListener); if (animationProperties != null) { animationFilter.combineFilter(animationProperties.getAnimationFilter()); sTempProperties.combineCustomInterpolators(animationProperties); 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 5588c24f2fd6..98ba6e5b88a0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -379,14 +379,6 @@ public class NotificationPanelViewController extends PanelViewController { private Runnable mPanelAlphaEndAction; private float mBottomAreaShadeAlpha; private final ValueAnimator mBottomAreaShadeAlphaAnimator; - private AnimatorListenerAdapter mAnimatorListenerAdapter = new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (mPanelAlphaEndAction != null) { - mPanelAlphaEndAction.run(); - } - } - }; private final AnimatableProperty mPanelAlphaAnimator = AnimatableProperty.from("panelAlpha", NotificationPanelView::setPanelAlphaInternal, NotificationPanelView::getCurrentPanelAlpha, @@ -396,8 +388,11 @@ public class NotificationPanelViewController extends PanelViewController { new AnimationProperties().setDuration(150).setCustomInterpolator( mPanelAlphaAnimator.getProperty(), Interpolators.ALPHA_OUT); private final AnimationProperties mPanelAlphaInPropertiesAnimator = - new AnimationProperties().setDuration(200).setAnimationFinishListener( - mAnimatorListenerAdapter).setCustomInterpolator( + new AnimationProperties().setDuration(200).setAnimationEndAction((property) -> { + if (mPanelAlphaEndAction != null) { + mPanelAlphaEndAction.run(); + } + }).setCustomInterpolator( mPanelAlphaAnimator.getProperty(), Interpolators.ALPHA_IN); private final NotificationEntryManager mEntryManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java index 6359234fa6ba..57278e32d553 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java @@ -93,7 +93,7 @@ public class PropertyAnimatorTest extends SysuiTestCase { } @Override - public AnimatorListenerAdapter getAnimationFinishListener() { + public AnimatorListenerAdapter getAnimationFinishListener(Property property) { return mFinishListener; } }.setDuration(200); |