Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6df1385b authored by Selim Cinek's avatar Selim Cinek
Browse files

Made translation of headers consistent when going into the shelf

Previously the headers weren't moving up similar to the content.
This is now happening.

Fixes: 133258119
Test: atest SystemUITests
Change-Id: I3e8594f6a28234373a7f3a2b26b6522850526816
parent d1695408
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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">

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="start|center_vertical"
            android:layout_weight="1">
            android:layout_weight="1"
            android:forceHasOverlappingRendering="false">

            <TextView
                style="@style/TextAppearance.NotificationSectionHeaderButton"
@@ -53,6 +56,7 @@
            android:layout_height="48dp"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:forceHasOverlappingRendering="false"
        />

        <ImageView
@@ -60,6 +64,7 @@
            android:layout_height="48dp"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:forceHasOverlappingRendering="false"
        />

        <ImageView
@@ -67,6 +72,7 @@
            android:layout_height="48dp"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:forceHasOverlappingRendering="false"
        />

        <ImageView
@@ -74,6 +80,7 @@
            android:layout_height="48dp"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:forceHasOverlappingRendering="false"
        />

        <ImageView
@@ -81,6 +88,7 @@
            android:layout_height="48dp"
            android:padding="8dp"
            android:scaleType="fitCenter"
            android:forceHasOverlappingRendering="false"
        />

    </LinearLayout>
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@
        android:layout_gravity="bottom"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:forceHasOverlappingRendering="false"
        android:clipChildren="false"
        >
        <include layout="@layout/status_bar_notification_section_header_contents"/>
    </LinearLayout>
+2 −0
Original line number Diff line number Diff line
@@ -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"
    />
</merge>
+2 −2
Original line number Diff line number Diff line
@@ -181,8 +181,8 @@
    <!-- Vertical translation of pulsing notification animations -->
    <dimen name="pulsing_notification_appear_translation">10dp</dimen>

    <!-- The amount the content shifts upwards when transforming into the icon -->
    <dimen name="notification_icon_transform_content_shift">32dp</dimen>
    <!-- The amount the content shifts upwards when transforming into the shelf -->
    <dimen name="shelf_transform_content_shift">32dp</dimen>

    <!-- The padding on the bottom of the notifications on the keyguard -->
    <dimen name="keyguard_indication_bottom_padding">12sp</dimen>
+85 −79
Original line number Diff line number Diff line
@@ -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,41 +592,44 @@ 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();
            contentTransformationAmount = iconTransitionAmount;
        } else {
            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);
                        || (!ICON_ANMATIONS_WHILE_SCROLLING && fullTransitionAmount == 0.0f
                        && scrolling);
                iconState.useLinearTransitionAmount = !ICON_ANMATIONS_WHILE_SCROLLING
                        && fullTransitionAmount == 0.0f && !mAmbientState.isExpansionChanging();
                iconState.translateContent = mMaxLayoutHeight - getTranslationY()
@@ -649,9 +648,10 @@ public class NotificationShelf extends ActivatableNotificationView implements
                iconState.translateContent = false;
            }
            float transitionAmount;
        if (mAmbientState.isHiddenAtAll() && !row.isInShelf()) {
            if (mAmbientState.isHiddenAtAll() && !view.isInShelf()) {
                transitionAmount = mAmbientState.isFullyHidden() ? 1 : 0;
        } else if (isLastChild || !USE_ANIMATIONS_WHEN_OPENING || iconState.useFullTransitionAmount
            } else if (isLastChild || !USE_ANIMATIONS_WHEN_OPENING
                    || iconState.useFullTransitionAmount
                    || iconState.useLinearTransitionAmount) {
                transitionAmount = iconTransitionAmount;
            } else {
@@ -665,19 +665,25 @@ public class NotificationShelf extends ActivatableNotificationView implements
                    ? fullTransitionAmount
                    : transitionAmount;
            iconState.clampedAppearAmount = clampedAmount;
        float contentTransformationAmount = !row.isAboveShelf() && !row.showingPulsing()
            contentTransformationAmount = !view.isAboveShelf() && !view.showingPulsing()
                    && (isLastChild || iconState.translateContent)
                    ? iconTransitionAmount
                    : 0.0f;
        row.setContentTransformationAmount(contentTransformationAmount, isLastChild);
        setIconTransformationAmount(row, transitionAmount, iconTransformDistance,
            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();
Loading