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

Commit 5a875187 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Fix the summarization font

Use the variable width font rather than the OS default and add some
padding (and move around some margins) to prevent italic text from
being truncated on the 'start' edge.

Test: presubmit screenshot tests
Fixes: 425994847
Fixes: 422881504
Flag: android.app.nm_summarization_ui

Change-Id: I5e403186621e7191f9ec3967e66073da2b243865
parent 320767f0
Loading
Loading
Loading
Loading
+37 −15
Original line number Diff line number Diff line
@@ -173,6 +173,8 @@ public class ConversationLayout extends FrameLayout
    private ConversationHeaderData mConversationHeaderData;
    private int mSpacingForExpander;
    private int mSpacingForImage;
    private LinearLayout mConversationContentView;
    private int mSummarizationStartMargin;

    public ConversationLayout(@NonNull Context context) {
        super(context);
@@ -337,6 +339,10 @@ public class ConversationLayout extends FrameLayout
        mAppName.setOnVisibilityChangedListener((visibility) -> {
            onAppNameVisibilityChanged();
        });

        mConversationContentView = findViewById(R.id.notification_main_column);
        mSummarizationStartMargin = getResources().getDimensionPixelSize(
                R.dimen.notification_2025_content_margin_start_summarization);
    }

    @RemotableViewMethod
@@ -435,19 +441,7 @@ public class ConversationLayout extends FrameLayout
    @RemotableViewMethod(asyncImpl = "setIsCollapsedAsync")
    public void setIsCollapsed(boolean isCollapsed) {
        mIsCollapsed = isCollapsed;
        int maxLines = Integer.MAX_VALUE;
        if (isCollapsed) {
            if (!TextUtils.isEmpty(mSummarizedContent)) {
                maxLines = MAX_SUMMARIZATION_LINES;
            } else {
                if (android.app.Flags.nmCollapsedLines()) {
                    maxLines = 2;
                } else {
                    maxLines = 1;
                }
            }
        }
        mMessagingLinearLayout.setMaxDisplayedLines(maxLines);

        updateExpandButton();
        updateContentEndPaddings();
    }
@@ -496,7 +490,7 @@ public class ConversationLayout extends FrameLayout

        List<MessagingMessage> newMessagingMessages;
        mSummarizedContent = extras.getCharSequence(Notification.EXTRA_SUMMARIZED_CONTENT);
        if (!TextUtils.isEmpty(mSummarizedContent) && mIsCollapsed) {
        if (isShowingSummarization()) {
            Notification.MessagingStyle.Message summary =
                    new Notification.MessagingStyle.Message(mSummarizedContent, 0, "");
            newMessagingMessages =
@@ -605,6 +599,8 @@ public class ConversationLayout extends FrameLayout
        setUser(messagingData.getUser());
        setUnreadCount(messagingData.getUnreadCount());

        updateViewsForSummarization();

        // Copy our groups, before they get clobbered
        ArrayList<MessagingGroup> oldGroups = new ArrayList<>(mGroups);

@@ -1101,6 +1097,10 @@ public class ConversationLayout extends FrameLayout
        return mConversationText.getText();
    }

    private boolean isShowingSummarization() {
        return !TextUtils.isEmpty(mSummarizedContent) && mIsCollapsed;
    }

    private void removeGroups(ArrayList<MessagingGroup> oldGroups) {
        int size = oldGroups.size();
        for (int i = 0; i < size; i++) {
@@ -1288,7 +1288,7 @@ public class ConversationLayout extends FrameLayout
                mMessagingLinearLayout.removeView(newGroup);
                mMessagingLinearLayout.addView(newGroup, groupIndex);
            }
            newGroup.setMessages(group);
            newGroup.setMessages(group, isShowingSummarization());
        }

        if (Flags.dropNonExistingMessages()) {
@@ -1756,6 +1756,28 @@ public class ConversationLayout extends FrameLayout
        updateContentEndPaddings();
    }

    private void updateViewsForSummarization() {
        int maxLines = Integer.MAX_VALUE;
        if (isShowingSummarization()) {
            maxLines = MAX_SUMMARIZATION_LINES;
        } else if (mIsCollapsed) {
            if (android.app.Flags.nmCollapsedLines()) {
                maxLines = 2;
            } else {
                maxLines = 1;
            }
        }
        mMessagingLinearLayout.setMaxDisplayedLines(maxLines);
        if (isShowingSummarization()) {
            ViewGroup.LayoutParams lp = mConversationContentView.getLayoutParams();
            if (lp != null && lp instanceof MarginLayoutParams) {
                final MarginLayoutParams mlp = (MarginLayoutParams) lp;
                mlp.setMarginStart(mSummarizationStartMargin);
                // this happens before layout, so we don't need to explicitly ask for one
            }
        }
    }

    @Override
    public void setMessagingClippingDisabled(boolean clippingDisabled) {
        mMessagingLinearLayout.setClipBounds(clippingDisabled ? null : mMessagingClipRect);
+2 −1
Original line number Diff line number Diff line
@@ -528,12 +528,13 @@ public class MessagingGroup extends NotificationOptimizedLinearLayout implements
        }
    }

    public void setMessages(List<MessagingMessage> group) {
    public void setMessages(List<MessagingMessage> group, boolean showingSummarization) {
        // Let's now make sure all children are added and in the correct order
        int textMessageIndex = 0;
        MessagingImageMessage isolatedMessage = null;
        for (int messageIndex = 0; messageIndex < group.size(); messageIndex++) {
            MessagingMessage message = group.get(messageIndex);
            message.updateViewForSummarization(showingSummarization);
            if (message.getGroup() != this) {
                message.setMessagingGroup(this);
                mAddedMessages.add(message);
+37 −7
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RemoteViews;
import android.widget.flags.Flags;

@@ -97,6 +98,8 @@ public class MessagingLayout extends FrameLayout
    private CharSequence mSummarizedContent;
    private int mSpacingForExpander;
    private int mSpacingForImage;
    private LinearLayout mMessageContentView;
    private int mSummarizationStartMargin;

    public MessagingLayout(@NonNull Context context) {
        super(context);
@@ -156,6 +159,10 @@ public class MessagingLayout extends FrameLayout
        int size = Math.max(displayMetrics.widthPixels, displayMetrics.heightPixels);
        mMessagingClipRect = new Rect(0, 0, size, size);
        setMessagingClippingDisabled(false);

        mMessageContentView = findViewById(R.id.notification_main_column);
        mSummarizationStartMargin = getResources().getDimensionPixelSize(
                R.dimen.notification_2025_content_margin_start_summarization);
    }

    @RemotableViewMethod(asyncImpl = "setAvatarReplacementAsync")
@@ -192,10 +199,6 @@ public class MessagingLayout extends FrameLayout
    @RemotableViewMethod(asyncImpl = "setIsCollapsedAsync")
    public void setIsCollapsed(boolean isCollapsed) {
        mIsCollapsed = isCollapsed;
        if (mIsCollapsed) {
            mMessagingLinearLayout.setMaxDisplayedLines(
                    android.app.Flags.nmCollapsedLines() ? 2 : 1);
        }
    }

    /**
@@ -263,8 +266,7 @@ public class MessagingLayout extends FrameLayout
                /* isHistoric= */true, usePrecomputedText, false);
        List<MessagingMessage> newMessagingMessages;
        mSummarizedContent = extras.getCharSequence(Notification.EXTRA_SUMMARIZED_CONTENT);
        if (!TextUtils.isEmpty(mSummarizedContent) && mIsCollapsed) {
            mMessagingLinearLayout.setMaxDisplayedLines(MAX_SUMMARIZATION_LINES);
        if (isShowingSummarization()) {
            Notification.MessagingStyle.Message summary =
                    new Notification.MessagingStyle.Message(mSummarizedContent, 0, "");
            newMessagingMessages =
@@ -346,9 +348,37 @@ public class MessagingLayout extends FrameLayout
        }
    }

    private void updateViewsForSummarization() {
        int maxLines = Integer.MAX_VALUE;
        if (isShowingSummarization()) {
            maxLines = MAX_SUMMARIZATION_LINES;
        } else if (mIsCollapsed) {
            if (android.app.Flags.nmCollapsedLines()) {
                maxLines = 2;
            } else {
                maxLines = 1;
            }
        }
        mMessagingLinearLayout.setMaxDisplayedLines(maxLines);
        if (isShowingSummarization()) {
            ViewGroup.LayoutParams lp = mMessageContentView.getLayoutParams();
            if (lp != null && lp instanceof MarginLayoutParams) {
                final MarginLayoutParams mlp = (MarginLayoutParams) lp;
                mlp.setMarginStart(mSummarizationStartMargin);
                // this happens before layout, so we don't need to explicitly ask for one
            }
        }
    }

    private boolean isShowingSummarization() {
        return !TextUtils.isEmpty(mSummarizedContent) && mIsCollapsed;
    }

    private void bind(MessagingData messagingData) {
        setUser(messagingData.getUser());

        updateViewsForSummarization();

        // Let's now create the views and reorder them accordingly
        ArrayList<MessagingGroup> oldGroups = new ArrayList<>(mGroups);
        createGroupViews(messagingData.getGroups(), messagingData.getSenders(),
@@ -652,7 +682,7 @@ public class MessagingLayout extends FrameLayout
                mMessagingLinearLayout.removeView(newGroup);
                mMessagingLinearLayout.addView(newGroup, groupIndex);
            }
            newGroup.setMessages(group);
            newGroup.setMessages(group, isShowingSummarization());
        }

        if (Flags.dropNonExistingMessages()) {
+2 −0
Original line number Diff line number Diff line
@@ -163,6 +163,8 @@ public interface MessagingMessage extends MessagingLinearLayout.MessagingChild {

    int getVisibility();

    default void updateViewForSummarization(boolean summarizationShowing) {}

    /**
     * Finalize inflation of the MessagingMessages, which should be called on Main Thread.
     * @hide
+19 −3
Original line number Diff line number Diff line
@@ -92,9 +92,6 @@ public class MessagingTextMessage extends ImageFloatingTextView implements Messa
                    R.layout.notification_template_messaging_text_message,
                    messagingLinearLayout,
                    false);
            if (useItalics) {
                createdMessage.setTypeface(Typeface.DEFAULT, Typeface.ITALIC);
            }
            createdMessage.addOnLayoutChangeListener(MessagingLayout.MESSAGING_PROPERTY_ANIMATOR);
        }
        createdMessage.setMessage(m, usePrecomputedText);
@@ -152,6 +149,25 @@ public class MessagingTextMessage extends ImageFloatingTextView implements Messa
        setTextColor(color);
    }

    @Override
    public void updateViewForSummarization(boolean summarizationShowing) {
        if (summarizationShowing) {
            // Summarization text is italic, so we have to add space for it or characters like 'j'
            // will be cut off
            setPaddingRelative(mContext.getResources().getDimensionPixelSize(
                            R.dimen.notification_text_message_start_padding_summarization),
                    getPaddingTop(), getPaddingEnd(), getPaddingBottom());
            setTypeface(Typeface.create("variable-body-medium", Typeface.ITALIC));
            setShadowLayer(25f, 0f, 0f, 0);
        } else {
            setPaddingRelative(mContext.getResources().getDimensionPixelSize(
                    R.dimen.notification_text_message_start_padding),
                    getPaddingTop(), getPaddingEnd(), getPaddingBottom());
            setTextAppearance(R.style.TextAppearance_DeviceDefault_Notification);
            setShadowLayer(0f, 0f, 0f, 0);
        }
    }

    @Override
    public void finalizeInflate() {
        try {
Loading