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 Original line Diff line number Diff line
@@ -31,13 +31,16 @@
        android:layout_height="match_parent"
        android:layout_height="match_parent"
        android:layout_marginEnd="8dp"
        android:layout_marginEnd="8dp"
        android:gravity="bottom"
        android:gravity="bottom"
        android:orientation="horizontal">
        android:orientation="horizontal"
        android:forceHasOverlappingRendering="false"
        android:clipChildren="false">


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


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


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


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


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


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


    </LinearLayout>
    </LinearLayout>
+2 −0
Original line number Original line Diff line number Diff line
@@ -32,6 +32,8 @@
        android:layout_gravity="bottom"
        android:layout_gravity="bottom"
        android:gravity="center_vertical"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:orientation="horizontal"
        android:forceHasOverlappingRendering="false"
        android:clipChildren="false"
        >
        >
        <include layout="@layout/status_bar_notification_section_header_contents"/>
        <include layout="@layout/status_bar_notification_section_header_contents"/>
    </LinearLayout>
    </LinearLayout>
+2 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@
            android:id="@+id/header_label"
            android:id="@+id/header_label"
            android:layout_width="wrap_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_height="wrap_content"
            android:forceHasOverlappingRendering="false"
            android:text="@string/notification_section_header_gentle"
            android:text="@string/notification_section_header_gentle"
        />
        />


@@ -41,5 +42,6 @@
        android:tint="?attr/wallpaperTextColor"
        android:tint="?attr/wallpaperTextColor"
        android:tintMode="src_in"
        android:tintMode="src_in"
        android:visibility="gone"
        android:visibility="gone"
        android:forceHasOverlappingRendering="false"
    />
    />
</merge>
</merge>
+2 −2
Original line number Original line Diff line number Diff line
@@ -181,8 +181,8 @@
    <!-- Vertical translation of pulsing notification animations -->
    <!-- Vertical translation of pulsing notification animations -->
    <dimen name="pulsing_notification_appear_translation">10dp</dimen>
    <dimen name="pulsing_notification_appear_translation">10dp</dimen>


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


    <!-- The padding on the bottom of the notifications on the keyguard -->
    <!-- The padding on the bottom of the notifications on the keyguard -->
    <dimen name="keyguard_indication_bottom_padding">12sp</dimen>
    <dimen name="keyguard_indication_bottom_padding">12sp</dimen>
+85 −79
Original line number Original line Diff line number Diff line
@@ -291,14 +291,13 @@ public class NotificationShelf extends ActivatableNotificationView implements
            int clipTop = updateNotificationClipHeight(child, notificationClipEnd, notGoneIndex);
            int clipTop = updateNotificationClipHeight(child, notificationClipEnd, notGoneIndex);
            clipTopAmount = Math.max(clipTop, clipTopAmount);
            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,
            // If the current row is an ExpandableNotificationRow, update its color, roundedness,
            // and icon state.
            // and icon state.
            if (child instanceof ExpandableNotificationRow) {
            if (child instanceof ExpandableNotificationRow) {
                ExpandableNotificationRow expandableRow = (ExpandableNotificationRow) child;
                ExpandableNotificationRow expandableRow = (ExpandableNotificationRow) child;

                float inShelfAmount = updateIconAppearance(expandableRow, expandAmount, scrolling,
                        scrollingFast,
                        expandingAnimated, isLastChild);
                numViewsInShelf += inShelfAmount;
                numViewsInShelf += inShelfAmount;
                int ownColorUntinted = expandableRow.getBackgroundColorWithoutTint();
                int ownColorUntinted = expandableRow.getBackgroundColorWithoutTint();
                if (rowTranslationY >= shelfStart && mNotGoneIndex == -1) {
                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 scrolling, boolean scrollingFast, boolean expandingAnimated,
            boolean isLastChild) {
            boolean isLastChild) {
        StatusBarIconView icon = row.getEntry().expandedIcon;
        StatusBarIconView icon = view.getShelfIcon();
        NotificationIconContainer.IconState iconState = getIconState(icon);
        NotificationIconContainer.IconState iconState = getIconState(icon);
        if (iconState == null) {
            return 0.0f;
        }


        // Let calculate how much the view is in the shelf
        // Let calculate how much the view is in the shelf
        float viewStart = row.getTranslationY();
        float viewStart = view.getTranslationY();
        int fullHeight = row.getActualHeight() + mPaddingBetweenElements;
        int fullHeight = view.getActualHeight() + mPaddingBetweenElements;
        float iconTransformDistance = getIntrinsicHeight() * 1.5f;
        float iconTransformDistance = getIntrinsicHeight() * 1.5f;
        iconTransformDistance *= NotificationUtils.interpolate(1.f, 1.5f, expandAmount);
        iconTransformDistance *= NotificationUtils.interpolate(1.f, 1.5f, expandAmount);
        iconTransformDistance = Math.min(iconTransformDistance, fullHeight);
        iconTransformDistance = Math.min(iconTransformDistance, fullHeight);
        if (isLastChild) {
        if (isLastChild) {
            fullHeight = Math.min(fullHeight, row.getMinHeight() - getIntrinsicHeight());
            fullHeight = Math.min(fullHeight, view.getMinHeight() - getIntrinsicHeight());
            iconTransformDistance = Math.min(iconTransformDistance, row.getMinHeight()
            iconTransformDistance = Math.min(iconTransformDistance, view.getMinHeight()
                    - getIntrinsicHeight());
                    - getIntrinsicHeight());
        }
        }
        float viewEnd = viewStart + fullHeight;
        float viewEnd = viewStart + fullHeight;
        // TODO: fix this check for anchor scrolling.
        // TODO: fix this check for anchor scrolling.
        if (expandingAnimated && mAmbientState.getScrollY() == 0
        if (iconState != null && expandingAnimated && mAmbientState.getScrollY() == 0
                && !mAmbientState.isOnKeyguard() && !iconState.isLastExpandIcon) {
                && !mAmbientState.isOnKeyguard() && !iconState.isLastExpandIcon) {
            // We are expanding animated. Because we switch to a linear interpolation in this case,
            // 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
            // 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
            // We need to persist this, since after the expansion, the behavior should still be the
            // same.
            // same.
            float position = mAmbientState.getIntrinsicPadding()
            float position = mAmbientState.getIntrinsicPadding()
                    + mHostLayout.getPositionInLinearLayout(row);
                    + mHostLayout.getPositionInLinearLayout(view);
            int maxShelfStart = mMaxLayoutHeight - getIntrinsicHeight();
            int maxShelfStart = mMaxLayoutHeight - getIntrinsicHeight();
            if (position < maxShelfStart && position + row.getIntrinsicHeight() >= maxShelfStart
            if (position < maxShelfStart && position + view.getIntrinsicHeight() >= maxShelfStart
                    && row.getTranslationY() < position) {
                    && view.getTranslationY() < position) {
                iconState.isLastExpandIcon = true;
                iconState.isLastExpandIcon = true;
                iconState.customTransformHeight = NO_VALUE;
                iconState.customTransformHeight = NO_VALUE;
                // Let's check if we're close enough to snap into the shelf
                // 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 fullTransitionAmount;
        float iconTransitionAmount;
        float transitionAmount;
        float shelfStart = getTranslationY();
        float shelfStart = getTranslationY();
        if (iconState.hasCustomTransformHeight()) {
        if (iconState != null && iconState.hasCustomTransformHeight()) {
            fullHeight = iconState.customTransformHeight;
            fullHeight = iconState.customTransformHeight;
            iconTransformDistance = iconState.customTransformHeight;
            iconTransformDistance = iconState.customTransformHeight;
        }
        }
        boolean fullyInOrOut = true;
        boolean fullyInOrOut = true;
        if (viewEnd >= shelfStart && (!mAmbientState.isUnlockHintRunning() || row.isInShelf())
        if (viewEnd >= shelfStart && (!mAmbientState.isUnlockHintRunning() || view.isInShelf())
                && (mAmbientState.isShadeExpanded()
                && (mAmbientState.isShadeExpanded()
                        || (!row.isPinned() && !row.isHeadsUpAnimatingAway()))) {
                        || (!view.isPinned() && !view.isHeadsUpAnimatingAway()))) {
            if (viewStart < shelfStart) {
            if (viewStart < shelfStart) {
                float fullAmount = (shelfStart - viewStart) / fullHeight;
                float fullAmount = (shelfStart - viewStart) / fullHeight;
                fullAmount = Math.min(1.0f, fullAmount);
                fullAmount = Math.min(1.0f, fullAmount);
@@ -596,41 +592,44 @@ public class NotificationShelf extends ActivatableNotificationView implements
                        interpolatedAmount, fullAmount, expandAmount);
                        interpolatedAmount, fullAmount, expandAmount);
                fullTransitionAmount = 1.0f - interpolatedAmount;
                fullTransitionAmount = 1.0f - interpolatedAmount;


                iconTransitionAmount = (shelfStart - viewStart) / iconTransformDistance;
                transitionAmount = (shelfStart - viewStart) / iconTransformDistance;
                iconTransitionAmount = Math.min(1.0f, iconTransitionAmount);
                transitionAmount = Math.min(1.0f, transitionAmount);
                iconTransitionAmount = 1.0f - iconTransitionAmount;
                transitionAmount = 1.0f - transitionAmount;
                fullyInOrOut = false;
                fullyInOrOut = false;
            } else {
            } else {
                fullTransitionAmount = 1.0f;
                fullTransitionAmount = 1.0f;
                iconTransitionAmount = 1.0f;
                transitionAmount = 1.0f;
            }
            }
        } else {
        } else {
            fullTransitionAmount = 0.0f;
            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.isLastExpandIcon = false;
            iconState.customTransformHeight = NO_VALUE;
            iconState.customTransformHeight = NO_VALUE;
        }
        }
        updateIconPositioning(row, iconTransitionAmount, fullTransitionAmount,
        updateIconPositioning(view, transitionAmount, fullTransitionAmount,
                iconTransformDistance, scrolling, scrollingFast, expandingAnimated, isLastChild);
                iconTransformDistance, scrolling, scrollingFast, expandingAnimated, isLastChild);
        return fullTransitionAmount;
        return fullTransitionAmount;
    }
    }


    private void updateIconPositioning(ExpandableNotificationRow row, float iconTransitionAmount,
    private void updateIconPositioning(ExpandableView view, float iconTransitionAmount,
            float fullTransitionAmount, float iconTransformDistance, boolean scrolling,
            float fullTransitionAmount, float iconTransformDistance, boolean scrolling,
            boolean scrollingFast, boolean expandingAnimated, boolean isLastChild) {
            boolean scrollingFast, boolean expandingAnimated, boolean isLastChild) {
        StatusBarIconView icon = row.getEntry().expandedIcon;
        StatusBarIconView icon = view.getShelfIcon();
        NotificationIconContainer.IconState iconState = getIconState(icon);
        NotificationIconContainer.IconState iconState = getIconState(icon);
        float contentTransformationAmount;
        if (iconState == null) {
        if (iconState == null) {
            return;
            contentTransformationAmount = iconTransitionAmount;
        }
        } else {
        boolean forceInShelf = iconState.isLastExpandIcon && !iconState.hasCustomTransformHeight();
            boolean forceInShelf =
                    iconState.isLastExpandIcon && !iconState.hasCustomTransformHeight();
            float clampedAmount = iconTransitionAmount > 0.5f ? 1.0f : 0.0f;
            float clampedAmount = iconTransitionAmount > 0.5f ? 1.0f : 0.0f;
            if (clampedAmount == fullTransitionAmount) {
            if (clampedAmount == fullTransitionAmount) {
                iconState.noAnimations = (scrollingFast || expandingAnimated) && !forceInShelf;
                iconState.noAnimations = (scrollingFast || expandingAnimated) && !forceInShelf;
                iconState.useFullTransitionAmount = iconState.noAnimations
                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
                iconState.useLinearTransitionAmount = !ICON_ANMATIONS_WHILE_SCROLLING
                        && fullTransitionAmount == 0.0f && !mAmbientState.isExpansionChanging();
                        && fullTransitionAmount == 0.0f && !mAmbientState.isExpansionChanging();
                iconState.translateContent = mMaxLayoutHeight - getTranslationY()
                iconState.translateContent = mMaxLayoutHeight - getTranslationY()
@@ -649,9 +648,10 @@ public class NotificationShelf extends ActivatableNotificationView implements
                iconState.translateContent = false;
                iconState.translateContent = false;
            }
            }
            float transitionAmount;
            float transitionAmount;
        if (mAmbientState.isHiddenAtAll() && !row.isInShelf()) {
            if (mAmbientState.isHiddenAtAll() && !view.isInShelf()) {
                transitionAmount = mAmbientState.isFullyHidden() ? 1 : 0;
                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) {
                    || iconState.useLinearTransitionAmount) {
                transitionAmount = iconTransitionAmount;
                transitionAmount = iconTransitionAmount;
            } else {
            } else {
@@ -665,19 +665,25 @@ public class NotificationShelf extends ActivatableNotificationView implements
                    ? fullTransitionAmount
                    ? fullTransitionAmount
                    : transitionAmount;
                    : transitionAmount;
            iconState.clampedAppearAmount = clampedAmount;
            iconState.clampedAppearAmount = clampedAmount;
        float contentTransformationAmount = !row.isAboveShelf() && !row.showingPulsing()
            contentTransformationAmount = !view.isAboveShelf() && !view.showingPulsing()
                    && (isLastChild || iconState.translateContent)
                    && (isLastChild || iconState.translateContent)
                    ? iconTransitionAmount
                    ? iconTransitionAmount
                    : 0.0f;
                    : 0.0f;
        row.setContentTransformationAmount(contentTransformationAmount, isLastChild);
            setIconTransformationAmount(view, transitionAmount, iconTransformDistance,
        setIconTransformationAmount(row, transitionAmount, iconTransformDistance,
                    clampedAmount != transitionAmount, isLastChild);
                    clampedAmount != transitionAmount, isLastChild);
        }
        }
        view.setContentTransformationAmount(contentTransformationAmount, isLastChild);
    }


    private void setIconTransformationAmount(ExpandableNotificationRow row,
    private void setIconTransformationAmount(ExpandableView view,
            float transitionAmount, float iconTransformDistance, boolean usingLinearInterpolation,
            float transitionAmount, float iconTransformDistance, boolean usingLinearInterpolation,
            boolean isLastChild) {
            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);
        NotificationIconContainer.IconState iconState = getIconState(icon);


        View rowIcon = row.getNotificationIcon();
        View rowIcon = row.getNotificationIcon();
Loading