diff options
5 files changed, 32 insertions, 145 deletions
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index fbe0207a1a1c..8a7f90bf4a14 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -326,9 +326,6 @@ <!-- The minimum amount of top overscroll to go to the quick settings. --> <dimen name="min_top_overscroll_to_qs">36dp</dimen> - <!-- The padding to the second card when the notifications collapse. --> - <dimen name="notification_collapse_second_card_padding">8dp</dimen> - <!-- The height of the speed bump view. --> <dimen name="speed_bump_height">16dp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java index 7c1116170ec3..61105f8ea12a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java @@ -92,7 +92,14 @@ public class NotificationContentView extends FrameLayout { = new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - mAnimate = true; + // We need to post since we don't want the notification to animate on the very first + // frame + post(new Runnable() { + @Override + public void run() { + mAnimate = true; + } + }); getViewTreeObserver().removeOnPreDrawListener(this); return true; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index 127febae5ee8..88b8afae3079 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -1397,7 +1397,7 @@ public class NotificationPanelView extends PanelView implements // In Shade, interpolate linearly such that QS is closed whenever panel height is // minimum QS expansion + minStackHeight float panelHeightQsCollapsed = mNotificationStackScroller.getIntrinsicPadding() - + mNotificationStackScroller.getMinStackHeight(); + + mNotificationStackScroller.getLayoutMinHeight(); float panelHeightQsExpanded = calculatePanelHeightQsExpanded(); t = (expandedHeight - panelHeightQsCollapsed) / (panelHeightQsExpanded - panelHeightQsCollapsed); @@ -1453,7 +1453,7 @@ public class NotificationPanelView extends PanelView implements && mShadeEmpty) { notificationHeight = mNotificationStackScroller.getEmptyShadeViewHeight() + mNotificationStackScroller.getBottomStackPeekSize() - + mNotificationStackScroller.getCollapseSecondCardPadding(); + + mNotificationStackScroller.getBottomStackSlowDownHeight(); } int maxQsHeight = mQsMaxExpansionHeight; @@ -1468,7 +1468,7 @@ public class NotificationPanelView extends PanelView implements + notificationHeight; if (totalHeight > mNotificationStackScroller.getHeight()) { float fullyCollapsedHeight = maxQsHeight - + mNotificationStackScroller.getMinStackHeight(); + + mNotificationStackScroller.getLayoutMinHeight(); totalHeight = Math.max(fullyCollapsedHeight, mNotificationStackScroller.getHeight()); } return (int) totalHeight; @@ -1485,7 +1485,7 @@ public class NotificationPanelView extends PanelView implements private float getFadeoutAlpha() { float alpha = (getNotificationsTopY() + mNotificationStackScroller.getFirstItemMinHeight()) / (mQsMinExpansionHeight + mNotificationStackScroller.getBottomStackPeekSize() - - mNotificationStackScroller.getCollapseSecondCardPadding()); + - mNotificationStackScroller.getBottomStackSlowDownHeight()); alpha = Math.max(0, Math.min(alpha, 1)); alpha = (float) Math.pow(alpha, 0.75); return alpha; 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 85b14264837d..e8dad92e7b19 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -418,12 +418,9 @@ public class NotificationStackScrollLayout extends ViewGroup .getDimensionPixelSize(R.dimen.notification_divider_height)); mIncreasedPaddingBetweenElements = context.getResources() .getDimensionPixelSize(R.dimen.notification_divider_height_increased); - mBottomStackSlowDownHeight = mStackScrollAlgorithm.getBottomStackSlowDownLength(); mMinTopOverScrollToEscape = getResources().getDimensionPixelSize( R.dimen.min_top_overscroll_to_qs); - mCollapseSecondCardPadding = getResources().getDimensionPixelSize( - R.dimen.notification_collapse_second_card_padding); } private void notifyHeightChangeListener(ExpandableView view) { @@ -509,14 +506,6 @@ public class NotificationStackScrollLayout extends ViewGroup } /** - * @return whether the height of the layout needs to be adapted, in order to ensure that the - * last child is not in the bottom stack. - */ - private boolean needsHeightAdaption() { - return getNotGoneChildCount() > 1; - } - - /** * Updates the children views according to the stack scroll algorithm. Call this whenever * modifications to {@link #mOwnScrollY} are performed to reflect it in the view layout. */ @@ -599,7 +588,7 @@ public class NotificationStackScrollLayout extends ViewGroup mLastSetStackHeight = height; setIsExpanded(height > 0.0f); int newStackHeight = (int) height; - int minStackHeight = getMinStackHeight(); + int minStackHeight = getLayoutMinHeight(); int stackHeight; float paddingOffset; boolean trackingHeadsUp = mTrackingHeadsUp || mHeadsUpManager.hasPinnedHeadsUp(); @@ -612,20 +601,7 @@ public class NotificationStackScrollLayout extends ViewGroup stackHeight = newStackHeight; } else { int translationY; - if (!trackingHeadsUp) { - // We did not reach the position yet where we actually start growing, - // so we translate the stack upwards. - translationY = (newStackHeight - minStackHeight); - // A slight parallax effect is introduced in order for the stack to catch up with - // the top card. - float partiallyThere = (newStackHeight - mTopPadding - mTopPaddingOverflow) - / minStackHeight; - partiallyThere = Math.max(0, partiallyThere); - translationY += (1 - partiallyThere) * (mBottomStackPeekSize + - mCollapseSecondCardPadding); - } else { - translationY = (int) (height - normalUnfoldPositionStart); - } + translationY = newStackHeight - normalUnfoldPositionStart; paddingOffset = translationY - mTopPadding; stackHeight = (int) (height - (translationY - mTopPadding)); } @@ -668,8 +644,8 @@ public class NotificationStackScrollLayout extends ViewGroup return mBottomStackPeekSize; } - public int getCollapseSecondCardPadding() { - return mCollapseSecondCardPadding; + public int getBottomStackSlowDownHeight() { + return mBottomStackSlowDownHeight; } public void setLongPressListener(SwipeHelper.LongPressListener listener) { @@ -1850,7 +1826,7 @@ public class NotificationStackScrollLayout extends ViewGroup boolean ignoreIntrinsicPadding) { float start = qsHeight; float stackHeight = getHeight() - start; - int minStackHeight = getMinStackHeight(); + int minStackHeight = getLayoutMinHeight(); if (stackHeight <= minStackHeight) { float overflow = minStackHeight - stackHeight; stackHeight = minStackHeight; @@ -1864,11 +1840,16 @@ public class NotificationStackScrollLayout extends ViewGroup setStackHeight(mLastSetStackHeight); } - public int getMinStackHeight() { + public int getLayoutMinHeight() { final ExpandableView firstChild = getFirstChildNotGone(); - final int firstChildMinHeight = firstChild != null ? firstChild.getMinHeight() + int firstChildMinHeight = firstChild != null + ? firstChild.getIntrinsicHeight() : mCollapsedSize; - return firstChildMinHeight + mBottomStackPeekSize + mCollapseSecondCardPadding; + if (mOwnScrollY > 0) { + firstChildMinHeight = Math.max(firstChildMinHeight - mOwnScrollY, mCollapsedSize); + } + return Math.min(firstChildMinHeight + mBottomStackPeekSize + mBottomStackSlowDownHeight, + mMaxLayoutHeight - mTopPadding); } public float getTopPaddingOverflow() { @@ -1880,7 +1861,7 @@ public class NotificationStackScrollLayout extends ViewGroup final int firstChildMinHeight = firstChild != null ? (int) firstChild.getMinHeight() : mCollapsedSize; return mIntrinsicPadding + firstChildMinHeight + mBottomStackPeekSize - + mCollapseSecondCardPadding; + + mBottomStackSlowDownHeight; } private int clampPadding(int desiredPadding) { @@ -1994,7 +1975,6 @@ public class NotificationStackScrollLayout extends ViewGroup } private void onViewRemovedInternal(View child) { - mStackScrollAlgorithm.notifyChildrenChanged(this); if (mChangePositionInProgress) { // This is only a position change, don't do anything special return; @@ -2175,7 +2155,6 @@ public class NotificationStackScrollLayout extends ViewGroup private void onViewAddedInternal(View child) { updateHideSensitiveForChild(child); - mStackScrollAlgorithm.notifyChildrenChanged(this); ((ExpandableView) child).setOnHeightChangedListener(this); generateAddAnimation(child, false /* fromMoreCard */); updateAnimationState(child); @@ -2643,12 +2622,8 @@ public class NotificationStackScrollLayout extends ViewGroup } public int getEmptyBottomMargin() { - int emptyMargin = mMaxLayoutHeight - mContentHeight - mBottomStackPeekSize; - if (needsHeightAdaption()) { - emptyMargin -= mBottomStackSlowDownHeight; - } else { - emptyMargin -= mCollapseSecondCardPadding; - } + int emptyMargin = mMaxLayoutHeight - mContentHeight - mBottomStackPeekSize + - mBottomStackSlowDownHeight; return Math.max(emptyMargin, 0); } @@ -2659,12 +2634,10 @@ public class NotificationStackScrollLayout extends ViewGroup public void onExpansionStarted() { mIsExpansionChanging = true; - mStackScrollAlgorithm.onExpansionStarted(mCurrentStackScrollState); } public void onExpansionStopped() { mIsExpansionChanging = false; - mStackScrollAlgorithm.onExpansionStopped(); if (!mIsExpanded) { mOwnScrollY = 0; @@ -2732,7 +2705,6 @@ public class NotificationStackScrollLayout extends ViewGroup if (mIsExpanded && mAnimationsEnabled) { mRequestViewResizeAnimationOnLayout = true; } - mStackScrollAlgorithm.onReset(view); updateAnimationState(view); updateChronometerForChild(view); } @@ -3163,15 +3135,7 @@ public class NotificationStackScrollLayout extends ViewGroup } public int getDismissViewHeight() { - int height = mDismissView.getHeight() + mPaddingBetweenElements; - - // Hack: Accommodate for additional distance when we only have one notification and the - // dismiss all button. - if (getNotGoneChildCount() == 2 && getLastChildNotGone() == mDismissView - && getFirstChildNotGone() instanceof ActivatableNotificationView) { - height += mCollapseSecondCardPadding; - } - return height; + return mDismissView.getHeight() + mPaddingBetweenElements; } public int getEmptyShadeViewHeight() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java index eea923f68b20..4c94fe93cbdc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java @@ -52,13 +52,8 @@ public class StackScrollAlgorithm { private StackIndentationFunctor mBottomStackIndentationFunctor; private StackScrollAlgorithmState mTempAlgorithmState = new StackScrollAlgorithmState(); - private boolean mIsExpansionChanging; - private int mFirstChildMaxHeight; private boolean mIsExpanded; - private ExpandableView mFirstChildWhileExpanding; - private boolean mExpandedOnStart; private int mBottomStackSlowDownLength; - private int mCollapseSecondCardPadding; public StackScrollAlgorithm(Context context) { initView(context); @@ -86,8 +81,6 @@ public class StackScrollAlgorithm { mZBasicHeight = (MAX_ITEMS_IN_BOTTOM_STACK + 1) * mZDistanceBetweenElements; mBottomStackSlowDownLength = context.getResources() .getDimensionPixelSize(R.dimen.bottom_stack_slow_down_length); - mCollapseSecondCardPadding = context.getResources().getDimensionPixelSize( - R.dimen.notification_collapse_second_card_padding); mBottomStackIndentationFunctor = new PiecewiseLinearIndentationFunctor( MAX_ITEMS_IN_BOTTOM_STACK, mBottomStackPeekSize, @@ -508,7 +501,7 @@ public class StackScrollAlgorithm { int childHeight, int minHeight, AmbientState ambientState) { int bottomStackStart = ambientState.getInnerHeight() - - mBottomStackPeekSize - mCollapseSecondCardPadding; + - mBottomStackPeekSize - mBottomStackSlowDownLength; int childStart = bottomStackStart - childHeight; if (childStart < childViewState.yTranslation) { float newHeight = bottomStackStart - childViewState.yTranslation; @@ -595,12 +588,9 @@ public class StackScrollAlgorithm { // The starting position of the bottom stack peek int bottomPeekStart = ambientState.getInnerHeight() - mBottomStackPeekSize - - mCollapseSecondCardPadding + ambientState.getScrollY(); + mBottomStackSlowDownLength + ambientState.getScrollY(); // Collapse and expand the first child while the shade is being expanded - float maxHeight = mIsExpansionChanging && child == mFirstChildWhileExpanding - ? mFirstChildMaxHeight - : childHeight; - childViewState.height = (int) Math.max(Math.min(bottomPeekStart, maxHeight), + childViewState.height = (int) Math.max(Math.min(bottomPeekStart, (float) childHeight), child.getMinHeight()); } @@ -656,55 +646,6 @@ public class StackScrollAlgorithm { } } - public void onExpansionStarted(StackScrollState currentState) { - mIsExpansionChanging = true; - mExpandedOnStart = mIsExpanded; - ViewGroup hostView = currentState.getHostView(); - updateFirstChildHeightWhileExpanding(hostView); - } - - private void updateFirstChildHeightWhileExpanding(ViewGroup hostView) { - mFirstChildWhileExpanding = (ExpandableView) findFirstVisibleChild(hostView); - if (mFirstChildWhileExpanding != null) { - if (mExpandedOnStart) { - - // We are collapsing the shade, so the first child can get as most as high as the - // current height or the end value of the animation. - mFirstChildMaxHeight = StackStateAnimator.getFinalActualHeight( - mFirstChildWhileExpanding); - } else { - updateFirstChildMaxSizeToMaxHeight(); - } - } else { - mFirstChildMaxHeight = 0; - } - } - - private void updateFirstChildMaxSizeToMaxHeight() { - // We are expanding the shade, expand it to its full height. - if (!isMaxSizeInitialized(mFirstChildWhileExpanding)) { - - // This child was not layouted yet, wait for a layout pass - mFirstChildWhileExpanding - .addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, - int bottom, int oldLeft, int oldTop, int oldRight, - int oldBottom) { - if (mFirstChildWhileExpanding != null) { - mFirstChildMaxHeight = getMaxAllowedChildHeight( - mFirstChildWhileExpanding); - } else { - mFirstChildMaxHeight = 0; - } - v.removeOnLayoutChangeListener(this); - } - }); - } else { - mFirstChildMaxHeight = getMaxAllowedChildHeight(mFirstChildWhileExpanding); - } - } - private boolean isMaxSizeInitialized(ExpandableView child) { if (child instanceof ExpandableNotificationRow) { ExpandableNotificationRow row = (ExpandableNotificationRow) child; @@ -724,32 +665,10 @@ public class StackScrollAlgorithm { return null; } - public void onExpansionStopped() { - mIsExpansionChanging = false; - mFirstChildWhileExpanding = null; - } - public void setIsExpanded(boolean isExpanded) { this.mIsExpanded = isExpanded; } - public void notifyChildrenChanged(final NotificationStackScrollLayout hostView) { - if (mIsExpansionChanging) { - hostView.post(new Runnable() { - @Override - public void run() { - updateFirstChildHeightWhileExpanding(hostView); - } - }); - } - } - - public void onReset(ExpandableView view) { - if (view.equals(mFirstChildWhileExpanding)) { - updateFirstChildMaxSizeToMaxHeight(); - } - } - class StackScrollAlgorithmState { /** |