diff --git a/packages/SystemUI/res/layout/people_strip.xml b/packages/SystemUI/res/layout/people_strip.xml index c2dbacaa64f79..f5ed1032df6ce 100644 --- a/packages/SystemUI/res/layout/people_strip.xml +++ b/packages/SystemUI/res/layout/people_strip.xml @@ -31,13 +31,16 @@ android:layout_height="match_parent" android:layout_marginEnd="8dp" android:gravity="bottom" - android:orientation="horizontal"> + android:orientation="horizontal" + android:forceHasOverlappingRendering="false" + android:clipChildren="false"> + android:layout_weight="1" + android:forceHasOverlappingRendering="false"> diff --git a/packages/SystemUI/res/layout/status_bar_notification_section_header.xml b/packages/SystemUI/res/layout/status_bar_notification_section_header.xml index 0043d7a7bdada..44c409e08e828 100644 --- a/packages/SystemUI/res/layout/status_bar_notification_section_header.xml +++ b/packages/SystemUI/res/layout/status_bar_notification_section_header.xml @@ -32,6 +32,8 @@ android:layout_gravity="bottom" android:gravity="center_vertical" android:orientation="horizontal" + android:forceHasOverlappingRendering="false" + android:clipChildren="false" > diff --git a/packages/SystemUI/res/layout/status_bar_notification_section_header_contents.xml b/packages/SystemUI/res/layout/status_bar_notification_section_header_contents.xml index df4b0471c78b6..3b9c44d1b5df8 100644 --- a/packages/SystemUI/res/layout/status_bar_notification_section_header_contents.xml +++ b/packages/SystemUI/res/layout/status_bar_notification_section_header_contents.xml @@ -27,6 +27,7 @@ android:id="@+id/header_label" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:forceHasOverlappingRendering="false" android:text="@string/notification_section_header_gentle" /> @@ -41,5 +42,6 @@ android:tint="?attr/wallpaperTextColor" android:tintMode="src_in" android:visibility="gone" + android:forceHasOverlappingRendering="false" /> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 1c2404f1921e1..5880fe1356e75 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -181,8 +181,8 @@ 10dp - - 32dp + + 32dp 12sp diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java index 819300a39a1cf..1f7ce4680069b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java @@ -291,14 +291,13 @@ public class NotificationShelf extends ActivatableNotificationView implements int clipTop = updateNotificationClipHeight(child, notificationClipEnd, notGoneIndex); clipTopAmount = Math.max(clipTop, clipTopAmount); + + float inShelfAmount = updateShelfTransformation(child, expandAmount, scrolling, + scrollingFast, expandingAnimated, isLastChild); // If the current row is an ExpandableNotificationRow, update its color, roundedness, // and icon state. if (child instanceof ExpandableNotificationRow) { ExpandableNotificationRow expandableRow = (ExpandableNotificationRow) child; - - float inShelfAmount = updateIconAppearance(expandableRow, expandAmount, scrolling, - scrollingFast, - expandingAnimated, isLastChild); numViewsInShelf += inShelfAmount; int ownColorUntinted = expandableRow.getBackgroundColorWithoutTint(); if (rowTranslationY >= shelfStart && mNotGoneIndex == -1) { @@ -525,31 +524,28 @@ public class NotificationShelf extends ActivatableNotificationView implements } /** - * @return the icon amount how much this notification is in the shelf; + * @return the amount how much this notification is in the shelf */ - private float updateIconAppearance(ExpandableNotificationRow row, float expandAmount, + private float updateShelfTransformation(ExpandableView view, float expandAmount, boolean scrolling, boolean scrollingFast, boolean expandingAnimated, boolean isLastChild) { - StatusBarIconView icon = row.getEntry().expandedIcon; + StatusBarIconView icon = view.getShelfIcon(); NotificationIconContainer.IconState iconState = getIconState(icon); - if (iconState == null) { - return 0.0f; - } // Let calculate how much the view is in the shelf - float viewStart = row.getTranslationY(); - int fullHeight = row.getActualHeight() + mPaddingBetweenElements; + float viewStart = view.getTranslationY(); + int fullHeight = view.getActualHeight() + mPaddingBetweenElements; float iconTransformDistance = getIntrinsicHeight() * 1.5f; iconTransformDistance *= NotificationUtils.interpolate(1.f, 1.5f, expandAmount); iconTransformDistance = Math.min(iconTransformDistance, fullHeight); if (isLastChild) { - fullHeight = Math.min(fullHeight, row.getMinHeight() - getIntrinsicHeight()); - iconTransformDistance = Math.min(iconTransformDistance, row.getMinHeight() + fullHeight = Math.min(fullHeight, view.getMinHeight() - getIntrinsicHeight()); + iconTransformDistance = Math.min(iconTransformDistance, view.getMinHeight() - getIntrinsicHeight()); } float viewEnd = viewStart + fullHeight; // TODO: fix this check for anchor scrolling. - if (expandingAnimated && mAmbientState.getScrollY() == 0 + if (iconState != null && expandingAnimated && mAmbientState.getScrollY() == 0 && !mAmbientState.isOnKeyguard() && !iconState.isLastExpandIcon) { // We are expanding animated. Because we switch to a linear interpolation in this case, // the last icon may be stuck in between the shelf position and the notification @@ -559,10 +555,10 @@ public class NotificationShelf extends ActivatableNotificationView implements // We need to persist this, since after the expansion, the behavior should still be the // same. float position = mAmbientState.getIntrinsicPadding() - + mHostLayout.getPositionInLinearLayout(row); + + mHostLayout.getPositionInLinearLayout(view); int maxShelfStart = mMaxLayoutHeight - getIntrinsicHeight(); - if (position < maxShelfStart && position + row.getIntrinsicHeight() >= maxShelfStart - && row.getTranslationY() < position) { + if (position < maxShelfStart && position + view.getIntrinsicHeight() >= maxShelfStart + && view.getTranslationY() < position) { iconState.isLastExpandIcon = true; iconState.customTransformHeight = NO_VALUE; // Let's check if we're close enough to snap into the shelf @@ -577,16 +573,16 @@ public class NotificationShelf extends ActivatableNotificationView implements } } float fullTransitionAmount; - float iconTransitionAmount; + float transitionAmount; float shelfStart = getTranslationY(); - if (iconState.hasCustomTransformHeight()) { + if (iconState != null && iconState.hasCustomTransformHeight()) { fullHeight = iconState.customTransformHeight; iconTransformDistance = iconState.customTransformHeight; } boolean fullyInOrOut = true; - if (viewEnd >= shelfStart && (!mAmbientState.isUnlockHintRunning() || row.isInShelf()) + if (viewEnd >= shelfStart && (!mAmbientState.isUnlockHintRunning() || view.isInShelf()) && (mAmbientState.isShadeExpanded() - || (!row.isPinned() && !row.isHeadsUpAnimatingAway()))) { + || (!view.isPinned() && !view.isHeadsUpAnimatingAway()))) { if (viewStart < shelfStart) { float fullAmount = (shelfStart - viewStart) / fullHeight; fullAmount = Math.min(1.0f, fullAmount); @@ -596,88 +592,98 @@ public class NotificationShelf extends ActivatableNotificationView implements interpolatedAmount, fullAmount, expandAmount); fullTransitionAmount = 1.0f - interpolatedAmount; - iconTransitionAmount = (shelfStart - viewStart) / iconTransformDistance; - iconTransitionAmount = Math.min(1.0f, iconTransitionAmount); - iconTransitionAmount = 1.0f - iconTransitionAmount; + transitionAmount = (shelfStart - viewStart) / iconTransformDistance; + transitionAmount = Math.min(1.0f, transitionAmount); + transitionAmount = 1.0f - transitionAmount; fullyInOrOut = false; } else { fullTransitionAmount = 1.0f; - iconTransitionAmount = 1.0f; + transitionAmount = 1.0f; } } else { fullTransitionAmount = 0.0f; - iconTransitionAmount = 0.0f; + transitionAmount = 0.0f; } - if (fullyInOrOut && !expandingAnimated && iconState.isLastExpandIcon) { + if (iconState != null && fullyInOrOut && !expandingAnimated && iconState.isLastExpandIcon) { iconState.isLastExpandIcon = false; iconState.customTransformHeight = NO_VALUE; } - updateIconPositioning(row, iconTransitionAmount, fullTransitionAmount, + updateIconPositioning(view, transitionAmount, fullTransitionAmount, iconTransformDistance, scrolling, scrollingFast, expandingAnimated, isLastChild); return fullTransitionAmount; } - private void updateIconPositioning(ExpandableNotificationRow row, float iconTransitionAmount, + private void updateIconPositioning(ExpandableView view, float iconTransitionAmount, float fullTransitionAmount, float iconTransformDistance, boolean scrolling, boolean scrollingFast, boolean expandingAnimated, boolean isLastChild) { - StatusBarIconView icon = row.getEntry().expandedIcon; + StatusBarIconView icon = view.getShelfIcon(); NotificationIconContainer.IconState iconState = getIconState(icon); + float contentTransformationAmount; if (iconState == null) { - return; - } - boolean forceInShelf = iconState.isLastExpandIcon && !iconState.hasCustomTransformHeight(); - float clampedAmount = iconTransitionAmount > 0.5f ? 1.0f : 0.0f; - if (clampedAmount == fullTransitionAmount) { - iconState.noAnimations = (scrollingFast || expandingAnimated) && !forceInShelf; - iconState.useFullTransitionAmount = iconState.noAnimations - || (!ICON_ANMATIONS_WHILE_SCROLLING && fullTransitionAmount == 0.0f && scrolling); - iconState.useLinearTransitionAmount = !ICON_ANMATIONS_WHILE_SCROLLING - && fullTransitionAmount == 0.0f && !mAmbientState.isExpansionChanging(); - iconState.translateContent = mMaxLayoutHeight - getTranslationY() - - getIntrinsicHeight() > 0; - } - if (!forceInShelf && (scrollingFast || (expandingAnimated - && iconState.useFullTransitionAmount && !ViewState.isAnimatingY(icon)))) { - iconState.cancelAnimations(icon); - iconState.useFullTransitionAmount = true; - iconState.noAnimations = true; - } - if (iconState.hasCustomTransformHeight()) { - iconState.useFullTransitionAmount = true; - } - if (iconState.isLastExpandIcon) { - iconState.translateContent = false; - } - float transitionAmount; - if (mAmbientState.isHiddenAtAll() && !row.isInShelf()) { - transitionAmount = mAmbientState.isFullyHidden() ? 1 : 0; - } else if (isLastChild || !USE_ANIMATIONS_WHEN_OPENING || iconState.useFullTransitionAmount - || iconState.useLinearTransitionAmount) { - transitionAmount = iconTransitionAmount; + contentTransformationAmount = iconTransitionAmount; } else { - // We take the clamped position instead - transitionAmount = clampedAmount; - iconState.needsCannedAnimation = iconState.clampedAppearAmount != clampedAmount - && !mNoAnimationsInThisFrame; - } - iconState.iconAppearAmount = !USE_ANIMATIONS_WHEN_OPENING + boolean forceInShelf = + iconState.isLastExpandIcon && !iconState.hasCustomTransformHeight(); + float clampedAmount = iconTransitionAmount > 0.5f ? 1.0f : 0.0f; + if (clampedAmount == fullTransitionAmount) { + iconState.noAnimations = (scrollingFast || expandingAnimated) && !forceInShelf; + iconState.useFullTransitionAmount = iconState.noAnimations + || (!ICON_ANMATIONS_WHILE_SCROLLING && fullTransitionAmount == 0.0f + && scrolling); + iconState.useLinearTransitionAmount = !ICON_ANMATIONS_WHILE_SCROLLING + && fullTransitionAmount == 0.0f && !mAmbientState.isExpansionChanging(); + iconState.translateContent = mMaxLayoutHeight - getTranslationY() + - getIntrinsicHeight() > 0; + } + if (!forceInShelf && (scrollingFast || (expandingAnimated + && iconState.useFullTransitionAmount && !ViewState.isAnimatingY(icon)))) { + iconState.cancelAnimations(icon); + iconState.useFullTransitionAmount = true; + iconState.noAnimations = true; + } + if (iconState.hasCustomTransformHeight()) { + iconState.useFullTransitionAmount = true; + } + if (iconState.isLastExpandIcon) { + iconState.translateContent = false; + } + float transitionAmount; + if (mAmbientState.isHiddenAtAll() && !view.isInShelf()) { + transitionAmount = mAmbientState.isFullyHidden() ? 1 : 0; + } else if (isLastChild || !USE_ANIMATIONS_WHEN_OPENING || iconState.useFullTransitionAmount - ? fullTransitionAmount - : transitionAmount; - iconState.clampedAppearAmount = clampedAmount; - float contentTransformationAmount = !row.isAboveShelf() && !row.showingPulsing() + || iconState.useLinearTransitionAmount) { + transitionAmount = iconTransitionAmount; + } else { + // We take the clamped position instead + transitionAmount = clampedAmount; + iconState.needsCannedAnimation = iconState.clampedAppearAmount != clampedAmount + && !mNoAnimationsInThisFrame; + } + iconState.iconAppearAmount = !USE_ANIMATIONS_WHEN_OPENING + || iconState.useFullTransitionAmount + ? fullTransitionAmount + : transitionAmount; + iconState.clampedAppearAmount = clampedAmount; + contentTransformationAmount = !view.isAboveShelf() && !view.showingPulsing() && (isLastChild || iconState.translateContent) - ? iconTransitionAmount - : 0.0f; - row.setContentTransformationAmount(contentTransformationAmount, isLastChild); - setIconTransformationAmount(row, transitionAmount, iconTransformDistance, - clampedAmount != transitionAmount, isLastChild); + ? iconTransitionAmount + : 0.0f; + setIconTransformationAmount(view, transitionAmount, iconTransformDistance, + clampedAmount != transitionAmount, isLastChild); + } + view.setContentTransformationAmount(contentTransformationAmount, isLastChild); } - private void setIconTransformationAmount(ExpandableNotificationRow row, + private void setIconTransformationAmount(ExpandableView view, float transitionAmount, float iconTransformDistance, boolean usingLinearInterpolation, boolean isLastChild) { - StatusBarIconView icon = row.getEntry().expandedIcon; + if (!(view instanceof ExpandableNotificationRow)) { + return; + } + ExpandableNotificationRow row = (ExpandableNotificationRow) view; + + StatusBarIconView icon = row.getShelfIcon(); NotificationIconContainer.IconState iconState = getIconState(icon); View rowIcon = row.getNotificationIcon(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index 500813318484c..617f08b4c928d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -138,7 +138,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView private LayoutListener mLayoutListener; private RowContentBindStage mRowContentBindStage; private int mIconTransformContentShift; - private int mIconTransformContentShiftNoIcon; private int mMaxHeadsUpHeightBeforeN; private int mMaxHeadsUpHeightBeforeP; private int mMaxHeadsUpHeight; @@ -307,10 +306,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView private boolean mHeadsupDisappearRunning; private View mChildAfterViewWhenDismissed; private View mGroupParentWhenDismissed; - private float mContentTransformationAmount; private boolean mIconsVisible = true; private boolean mAboveShelf; - private boolean mIsLastChild; private Runnable mOnDismissRunnable; private boolean mIsLowPriority; private boolean mIsColorized; @@ -1485,18 +1482,19 @@ public class ExpandableNotificationRow extends ActivatableNotificationView updateIconVisibilities(); } - private void updateContentTransformation() { + @Override + protected void updateContentTransformation() { if (mExpandAnimationRunning) { return; } - float contentAlpha; - float translationY = -mContentTransformationAmount * mIconTransformContentShift; - if (mIsLastChild) { - contentAlpha = 1.0f - mContentTransformationAmount; - contentAlpha = Math.min(contentAlpha / 0.5f, 1.0f); - contentAlpha = Interpolators.ALPHA_OUT.getInterpolation(contentAlpha); - translationY *= 0.4f; - } else { + super.updateContentTransformation(); + } + + @Override + protected void applyContentTransformation(float contentAlpha, float translationY) { + super.applyContentTransformation(contentAlpha, translationY); + if (!mIsLastChild) { + // Don't fade views unless we're last contentAlpha = 1.0f; } for (NotificationContentView l : mLayouts) { @@ -1649,8 +1647,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView Resources res = getResources(); mIncreasedPaddingBetweenElements = res.getDimensionPixelSize( R.dimen.notification_divider_height_increased); - mIconTransformContentShiftNoIcon = res.getDimensionPixelSize( - R.dimen.notification_icon_transform_content_shift); mEnableNonGroupedNotificationExpand = res.getBoolean(R.bool.config_enableNonGroupedNotificationExpand); mShowGroupBackgroundWhenExpanded = @@ -2113,6 +2109,11 @@ public class ExpandableNotificationRow extends ActivatableNotificationView return mChildIsExpanding; } + @Override + public StatusBarIconView getShelfIcon() { + return getEntry().expandedIcon; + } + @Override protected boolean shouldClipToActualHeight() { return super.shouldClipToActualHeight() && !mExpandAnimationRunning; @@ -2449,10 +2450,15 @@ public class ExpandableNotificationRow extends ActivatableNotificationView CachingIconView icon = notificationHeader.getIcon(); mIconTransformContentShift = getRelativeTopPadding(icon) + icon.getHeight(); } else { - mIconTransformContentShift = mIconTransformContentShiftNoIcon; + mIconTransformContentShift = mContentShift; } } + @Override + protected float getContentTransformationShift() { + return mIconTransformContentShift; + } + @Override public void notifyHeightChanged(boolean needsAnimation) { super.notifyHeightChanged(needsAnimation); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java index 241285a3827ad..a9f72ff9ea627 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java @@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.row; import android.animation.AnimatorListenerAdapter; import android.content.Context; +import android.content.res.Configuration; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; @@ -28,6 +29,9 @@ import android.widget.FrameLayout; import androidx.annotation.Nullable; import com.android.systemui.Dumpable; +import com.android.systemui.Interpolators; +import com.android.systemui.R; +import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; @@ -58,11 +62,26 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { private ViewGroup mTransientContainer; private boolean mInShelf; private boolean mTransformingInShelf; + protected float mContentTransformationAmount; + protected boolean mIsLastChild; + protected int mContentShift; private final ExpandableViewState mViewState; public ExpandableView(Context context, AttributeSet attrs) { super(context, attrs); mViewState = createExpandableViewState(); + initDimens(); + } + + private void initDimens() { + mContentShift = getResources().getDimensionPixelSize( + R.dimen.shelf_transform_content_shift); + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + initDimens(); } @Override @@ -594,7 +613,7 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { /** * @return whether the current view doesn't add height to the overall content. This means that - * if it is added to a list of items, it's content will still have the same height. + * if it is added to a list of items, its content will still have the same height. * An example is the notification shelf, that is always placed on top of another view. */ public boolean hasNoContentHeight() { @@ -612,6 +631,59 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable { return mInShelf; } + public @Nullable StatusBarIconView getShelfIcon() { + return null; + } + + /** + * Set how much this notification is transformed into the shelf. + * + * @param contentTransformationAmount A value from 0 to 1 indicating how much we are transformed + * to the content away + * @param isLastChild is this the last child in the list. If true, then the transformation is + * different since its content fades out. + */ + public void setContentTransformationAmount(float contentTransformationAmount, + boolean isLastChild) { + boolean changeTransformation = isLastChild != mIsLastChild; + changeTransformation |= mContentTransformationAmount != contentTransformationAmount; + mIsLastChild = isLastChild; + mContentTransformationAmount = contentTransformationAmount; + if (changeTransformation) { + updateContentTransformation(); + } + } + + /** + * Update the content representation based on the amount we are transformed into the shelf. + */ + protected void updateContentTransformation() { + float translationY = -mContentTransformationAmount * getContentTransformationShift(); + float contentAlpha = 1.0f - mContentTransformationAmount; + contentAlpha = Math.min(contentAlpha / 0.5f, 1.0f); + contentAlpha = Interpolators.ALPHA_OUT.getInterpolation(contentAlpha); + if (mIsLastChild) { + translationY *= 0.4f; + } + applyContentTransformation(contentAlpha, translationY); + } + + /** + * @return how much the content shifts up when going into the shelf + */ + protected float getContentTransformationShift() { + return mContentShift; + } + + /** + * Apply the contentTransformation when going into the shelf. + * + * @param contentAlpha The alpha that should be applied + * @param translationY the translationY that should be applied + */ + protected void applyContentTransformation(float contentAlpha, float translationY) { + } + /** * @param transformingInShelf whether the view is currently transforming into the shelf in an * animated way diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java index 0d3c4905fa097..82e5f0a3b130f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java @@ -49,6 +49,7 @@ public abstract class StackScrollerDecorView extends ExpandableView { public StackScrollerDecorView(Context context, AttributeSet attrs) { super(context, attrs); + setClipChildren(false); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/PeopleHubView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/PeopleHubView.kt index 9899f3fe1a473..1b4f98f84c5b4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/PeopleHubView.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/PeopleHubView.kt @@ -80,6 +80,15 @@ class PeopleHubView(context: Context, attrs: AttributeSet) : return true } + override fun applyContentTransformation(contentAlpha: Float, translationY: Float) { + super.applyContentTransformation(contentAlpha, translationY) + for (i in 0 until contents.childCount) { + val view = contents.getChildAt(i) + view.alpha = contentAlpha + view.translationY = translationY + } + } + private inner class PersonDataListenerImpl(val avatarView: ImageView) : DataListener { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java index bffeaeb0e20ff..deb5532ca0f21 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/SectionHeaderView.java @@ -108,6 +108,15 @@ public class SectionHeaderView extends StackScrollerDecorView { mLabelView.setOnClickListener(listener); } + @Override + protected void applyContentTransformation(float contentAlpha, float translationY) { + super.applyContentTransformation(contentAlpha, translationY); + mLabelView.setAlpha(contentAlpha); + mLabelView.setTranslationY(translationY); + mClearAllButton.setAlpha(contentAlpha); + mClearAllButton.setTranslationY(translationY); + } + /** Fired when the user clicks on the "X" button on the far right of the header. */ void setOnClearAllClickListener(View.OnClickListener listener) { mOnClearClickListener = listener;