From 4b04a3a1649018e7f0fe11136d0b012a9eeb44ea Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Mon, 28 Jul 2014 17:43:56 +0200 Subject: Clear all notifications improvements - Fix a bug with visibility. - Improve fling behavior such that the shade open animation still looks like that we are decelerating towards the last card. Change-Id: I1ad167ce0001ff6850f49e819bab944943fa529d --- .../res/layout/status_bar_expanded_header.xml | 1 + .../android/systemui/statusbar/DismissView.java | 30 +++++++++++-- .../statusbar/phone/NotificationPanelView.java | 16 +++++++ .../systemui/statusbar/phone/PanelView.java | 51 ++++++++++++++++++++-- .../stack/NotificationStackScrollLayout.java | 25 ++++++++--- .../systemui/statusbar/stack/StackScrollState.java | 2 +- 6 files changed, 112 insertions(+), 13 deletions(-) (limited to 'packages/SystemUI') diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml index 0eec094..b260a4a 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml @@ -91,6 +91,7 @@ android:id="@+id/date_group" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/clock_collapsed_bottom_margin" android:layout_alignParentBottom="true"> 0f && expand) { notifyExpandingFinished(); return; @@ -490,9 +500,32 @@ public abstract class PanelView extends FrameLayout { @Override public void onAnimationEnd(Animator animation) { - mHeightAnimator = null; - if (!mCancelled) { - notifyExpandingFinished(); + if (clearAllExpandHack && !mCancelled) { + mHeightAnimator = createHeightAnimator(getMaxPanelHeight()); + mHeightAnimator.setInterpolator(mLinearOutSlowInInterpolator); + mHeightAnimator.setDuration(350); + mHeightAnimator.addListener(new AnimatorListenerAdapter() { + private boolean mCancelled; + + @Override + public void onAnimationCancel(Animator animation) { + mCancelled = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + mHeightAnimator = null; + if (!mCancelled) { + notifyExpandingFinished(); + } + } + }); + mHeightAnimator.start(); + } else { + mHeightAnimator = null; + if (!mCancelled) { + notifyExpandingFinished(); + } } } }); @@ -878,4 +911,16 @@ public abstract class PanelView extends FrameLayout { protected abstract float getPeekHeight(); protected abstract float getCannedFlingDurationFactor(); + + /** + * @return whether "Clear all" button will be visible when the panel is fully expanded + */ + protected abstract boolean fullyExpandedClearAllVisible(); + + protected abstract boolean isClearAllVisible(); + + /** + * @return the height of the clear all button, in pixels + */ + protected abstract int getClearAllHeight(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 8b4e79f..9b819f2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -175,7 +175,6 @@ public class NotificationStackScrollLayout extends ViewGroup private boolean mInterceptDelegateEnabled; private boolean mDelegateToScrollView; private boolean mDisallowScrollingInThisMotion; - private boolean mDismissWillBeGone; private ViewTreeObserver.OnPreDrawListener mChildrenUpdater = new ViewTreeObserver.OnPreDrawListener() { @@ -1978,24 +1977,26 @@ public class NotificationStackScrollLayout extends ViewGroup } public void updateDismissView(boolean visible) { - int oldVisibility = mDismissWillBeGone ? GONE : mDismissView.getVisibility(); + int oldVisibility = mDismissView.willBeGone() ? GONE : mDismissView.getVisibility(); int newVisibility = visible ? VISIBLE : GONE; if (oldVisibility != newVisibility) { if (oldVisibility == GONE) { - if (mDismissWillBeGone) { + if (mDismissView.willBeGone()) { mDismissView.cancelAnimation(); } else { mDismissView.setInvisible(); mDismissView.setVisibility(newVisibility); } - mDismissWillBeGone = false; + mDismissView.setWillBeGone(false); + updateContentHeight(); } else { - mDismissWillBeGone = true; + mDismissView.setWillBeGone(true); mDismissView.performVisibilityAnimation(false, new Runnable() { @Override public void run() { mDismissView.setVisibility(GONE); - mDismissWillBeGone = false; + mDismissView.setWillBeGone(false); + updateContentHeight(); } }); } @@ -2006,6 +2007,18 @@ public class NotificationStackScrollLayout extends ViewGroup mDismissAllInProgress = dismissAllInProgress; } + public boolean isDismissViewNotGone() { + return mDismissView.getVisibility() != View.GONE && !mDismissView.willBeGone(); + } + + public boolean isDismissViewVisible() { + return mDismissView.isVisible(); + } + + public int getDismissViewHeight() { + return mDismissView.getHeight() + mPaddingBetweenElementsNormal; + } + /** * A listener that is notified when some child locations might have changed. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java index 76115a7..7b90a351 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java @@ -176,7 +176,7 @@ public class StackScrollState { } else if (child instanceof DismissView) { DismissView dismissView = (DismissView) child; boolean visible = state.topOverLap < mClearAllTopPadding; - dismissView.performVisibilityAnimation(visible); + dismissView.performVisibilityAnimation(visible && !dismissView.willBeGone()); } } } -- cgit v1.1