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

Commit 9ac1d7c9 authored by Ibrahim Yilmaz's avatar Ibrahim Yilmaz
Browse files

Use PrecomputedText in MessagingLayouts

This CL enables MessagingLayouts to use precomputedtext when setPrecomputedTextEnabled is enabled.

Bug: 289250881
Test: Manual. Check if Messaging and Conversation Style notifs are rendered properly.

Change-Id: Iaf64873950a9ede8f2c3f85b78c74e3c869b5688
parent 53f24758
Loading
Loading
Loading
Loading
+57 −4
Original line number Diff line number Diff line
@@ -149,6 +149,7 @@ public class ConversationLayout extends FrameLayout
    private View mAppNameDivider;
    private TouchDelegateComposite mTouchDelegate = new TouchDelegateComposite(this);
    private ArrayList<MessagingLinearLayout.MessagingChild> mToRecycle = new ArrayList<>();
    private boolean mPrecomputedTextEnabled = false;

    public ConversationLayout(@NonNull Context context) {
        super(context);
@@ -430,9 +431,61 @@ public class ConversationLayout extends FrameLayout
     */
    @NonNull
    public Runnable setDataAsync(Bundle extras) {
        if (!mPrecomputedTextEnabled) {
            return () -> setData(extras);
        }

        Parcelable[] messages = extras.getParcelableArray(Notification.EXTRA_MESSAGES);
        List<Notification.MessagingStyle.Message> newMessages =
                Notification.MessagingStyle.Message.getMessagesFromBundleArray(messages);
        Parcelable[] histMessages = extras.getParcelableArray(Notification.EXTRA_HISTORIC_MESSAGES);
        List<Notification.MessagingStyle.Message> newHistoricMessages =
                Notification.MessagingStyle.Message.getMessagesFromBundleArray(histMessages);

        // mUser now set (would be nice to avoid the side effect but WHATEVER)
        final Person user = extras.getParcelable(Notification.EXTRA_MESSAGING_PERSON, Person.class);
        // Append remote input history to newMessages (again, side effect is lame but WHATEVS)
        RemoteInputHistoryItem[] history = (RemoteInputHistoryItem[])
                extras.getParcelableArray(Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS,
                        android.app.RemoteInputHistoryItem.class);
        addRemoteInputHistoryToMessages(newMessages, history);

        boolean showSpinner =
                extras.getBoolean(Notification.EXTRA_SHOW_REMOTE_INPUT_SPINNER, false);
        int unreadCount = extras.getInt(Notification.EXTRA_CONVERSATION_UNREAD_MESSAGE_COUNT);

        // bind it, baby
        final List<MessagingMessage> newMessagingMessages =
                createMessages(newMessages, /* isHistoric= */false, /* usePrecomputedText= */true);
        final List<MessagingMessage> newHistoricMessagingMessages =
                createMessages(newHistoricMessages, /* isHistoric= */true,
                        /* usePrecomputedText= */true);

        return () -> {
            finalizeInflate(newHistoricMessagingMessages);
            finalizeInflate(newMessagingMessages);

            bindViews(user, showSpinner, unreadCount,
                    newMessagingMessages,
                    newHistoricMessagingMessages);
        };
    }


    /**
     * enable/disable precomputed text usage
     * @hide
     */
    public void setPrecomputedTextEnabled(boolean precomputedTextEnabled) {
        mPrecomputedTextEnabled = precomputedTextEnabled;
    }

    private void finalizeInflate(List<MessagingMessage> historicMessagingMessages) {
        for (MessagingMessage messagingMessage : historicMessagingMessages) {
            messagingMessage.finalizeInflate();
        }
    }

    @Override
    public void setImageResolver(ImageResolver resolver) {
        mImageResolver = resolver;
+48 −2
Original line number Diff line number Diff line
@@ -87,7 +87,7 @@ public class MessagingLayout extends FrameLayout
    private ImageResolver mImageResolver;
    private CharSequence mConversationTitle;
    private ArrayList<MessagingLinearLayout.MessagingChild> mToRecycle = new ArrayList<>();

    private boolean mPrecomputedTextEnabled = false;
    public MessagingLayout(@NonNull Context context) {
        super(context);
    }
@@ -193,9 +193,55 @@ public class MessagingLayout extends FrameLayout
     */
    @NonNull
    public Runnable setDataAsync(Bundle extras) {
        if (!mPrecomputedTextEnabled) {
            return () -> setData(extras);
        }

        Parcelable[] messages = extras.getParcelableArray(Notification.EXTRA_MESSAGES);
        List<Notification.MessagingStyle.Message> newMessages =
                Notification.MessagingStyle.Message.getMessagesFromBundleArray(messages);
        Parcelable[] histMessages = extras.getParcelableArray(Notification.EXTRA_HISTORIC_MESSAGES);
        List<Notification.MessagingStyle.Message> newHistoricMessages =
                Notification.MessagingStyle.Message.getMessagesFromBundleArray(histMessages);
        setUser(extras.getParcelable(Notification.EXTRA_MESSAGING_PERSON,
                android.app.Person.class));
        RemoteInputHistoryItem[] history =
                (RemoteInputHistoryItem[]) extras.getParcelableArray(
                        Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS,
                        android.app.RemoteInputHistoryItem.class);
        addRemoteInputHistoryToMessages(newMessages, history);

        final Person user = extras.getParcelable(Notification.EXTRA_MESSAGING_PERSON, Person.class);
        boolean showSpinner =
                extras.getBoolean(Notification.EXTRA_SHOW_REMOTE_INPUT_SPINNER, false);

        final List<MessagingMessage> historicMessagingMessages = createMessages(newHistoricMessages,
                        /* isHistoric= */true, /* usePrecomputedText= */ true);
        final List<MessagingMessage> newMessagingMessages =
                createMessages(newMessages, /* isHistoric */false, /* usePrecomputedText= */true);

        return () -> {
            finalizeInflate(historicMessagingMessages);
            finalizeInflate(newMessagingMessages);
            bindViews(user, showSpinner, historicMessagingMessages, newMessagingMessages);
        };
    }


    /**
     * enable/disable precomputed text usage
     * @hide
     */
    public void setPrecomputedTextEnabled(boolean precomputedTextEnabled) {
        mPrecomputedTextEnabled = precomputedTextEnabled;
    }

    private void finalizeInflate(List<MessagingMessage> historicMessagingMessages) {
        for (MessagingMessage messagingMessage: historicMessagingMessages) {
            messagingMessage.finalizeInflate();
        }
    }

    @Override
    public void setImageResolver(ImageResolver resolver) {
        mImageResolver = resolver;