summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Selim Cinek <cinek@google.com> 2020-03-27 16:37:34 -0700
committer Selim Cinek <cinek@google.com> 2020-03-31 10:42:32 -0700
commitfa8b418633b8832eb7a21d2d662815f1624f417a (patch)
treebb5c71efb75a2dece04c49ad0be5d757511eab55
parent9f2d21f3cc9a9ff402f60b6776e0afde783f6024 (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
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/PropertyAnimator.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AnimationProperties.java33
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ExpandableViewState.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ViewState.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/PropertyAnimatorTest.java2
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);