diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java index 14a6c42eb7c48..b2eb18e7e0ed1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StackScrollerDecorView.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar; +import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.util.AttributeSet; @@ -35,6 +36,7 @@ public abstract class StackScrollerDecorView extends ExpandableView { private boolean mIsVisible; private boolean mIsSecondaryVisible; private boolean mAnimating; + private boolean mSecondaryAnimating; private int mDuration = 260; public StackScrollerDecorView(Context context, AttributeSet attrs) { @@ -61,13 +63,26 @@ public abstract class StackScrollerDecorView extends ExpandableView { } public void performVisibilityAnimation(boolean nowVisible) { - animateText(mContent, nowVisible, null /* onFinishedRunnable */); - mIsVisible = nowVisible; + performVisibilityAnimation(nowVisible, null /* onFinishedRunnable */); } public void performVisibilityAnimation(boolean nowVisible, Runnable onFinishedRunnable) { - animateText(mContent, nowVisible, onFinishedRunnable); - mIsVisible = nowVisible; + boolean oldVisible = isVisible(); + animateText(mContent, nowVisible, oldVisible, new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + mAnimating = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + mAnimating = false; + mIsVisible = nowVisible; + if (onFinishedRunnable != null) { + onFinishedRunnable.run(); + } + } + }); } public void performSecondaryVisibilityAnimation(boolean nowVisible) { @@ -76,16 +91,43 @@ public abstract class StackScrollerDecorView extends ExpandableView { public void performSecondaryVisibilityAnimation(boolean nowVisible, Runnable onFinishedRunnable) { - animateText(mSecondaryView, nowVisible, onFinishedRunnable); - mIsSecondaryVisible = nowVisible; + boolean oldVisible = isSecondaryVisible(); + animateText(mSecondaryView, nowVisible, oldVisible, new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + mSecondaryAnimating = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + mSecondaryAnimating = false; + mIsSecondaryVisible = nowVisible; + if (onFinishedRunnable != null) { + onFinishedRunnable.run(); + } + } + }); } + /** + * Check whether the secondary view is visible or not.
+ * + * @see #isVisible() + */ public boolean isSecondaryVisible() { - return mSecondaryView != null && (mIsSecondaryVisible || mAnimating); + return mSecondaryView != null && (mIsSecondaryVisible ^ mSecondaryAnimating); } + /** + * Check whether the whole view is visible or not. + * The view is considered visible if it matches one of following: + *