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

Commit 2e74e4b3 authored by Ibrahim Yilmaz's avatar Ibrahim Yilmaz Committed by Android (Google) Code Review
Browse files

Merge "1/n Move grouping logic to parseMessagingData" into main

parents 0621a1c8 01c05ef8
Loading
Loading
Loading
Loading
+22 −21
Original line number Diff line number Diff line
@@ -432,8 +432,14 @@ public class ConversationLayout extends FrameLayout
        final List<MessagingMessage> newHistoricMessagingMessages =
                createMessages(newHistoricMessages, /* isHistoric= */true, usePrecomputedText);

        // Add our new MessagingMessages to groups
        List<List<MessagingMessage>> groups = new ArrayList<>();
        List<Person> senders = new ArrayList<>();
        // Lets first find the groups (populate `groups` and `senders`)
        findGroups(newHistoricMessagingMessages, newMessagingMessages, user, groups, senders);

        return new MessagingData(user, showSpinner, unreadCount,
                newHistoricMessagingMessages, newMessagingMessages);
                newHistoricMessagingMessages, newMessagingMessages, groups, senders);
    }

    /**
@@ -509,21 +515,13 @@ public class ConversationLayout extends FrameLayout
        setUser(messagingData.getUser());
        setUnreadCount(messagingData.getUnreadCount());

        List<MessagingMessage> messages = messagingData.getNewMessagingMessages();
        List<MessagingMessage> historicMessages = messagingData.getHistoricMessagingMessages();
        // Copy our groups, before they get clobbered
        ArrayList<MessagingGroup> oldGroups = new ArrayList<>(mGroups);

        // Add our new MessagingMessages to groups
        List<List<MessagingMessage>> groups = new ArrayList<>();
        List<Person> senders = new ArrayList<>();

        // Lets first find the groups (populate `groups` and `senders`)
        findGroups(historicMessages, messages, groups, senders);

        // Let's now create the views and reorder them accordingly
        //   side-effect: updates mGroups, mAddedGroups
        createGroupViews(groups, senders, messagingData.getShowSpinner());
        createGroupViews(messagingData.getGroups(), messagingData.getSenders(),
                messagingData.getShowSpinner());

        // Let's first check which groups were removed altogether and remove them in one animation
        removeGroups(oldGroups);
@@ -536,8 +534,8 @@ public class ConversationLayout extends FrameLayout
            historicMessage.removeMessage(mToRecycle);
        }

        mMessages = messages;
        mHistoricMessages = historicMessages;
        mMessages = messagingData.getNewMessagingMessages();
        mHistoricMessages = messagingData.getHistoricMessagingMessages();

        updateHistoricMessageVisibility();
        updateTitleAndNamesDisplay();
@@ -983,9 +981,12 @@ public class ConversationLayout extends FrameLayout
        }
    }

    /**
     * Finds groups and senders from the given messaging messages and fills outGroups and outSenders
     */
    private void findGroups(List<MessagingMessage> historicMessages,
                            List<MessagingMessage> messages, List<List<MessagingMessage>> groups,
                            List<Person> senders) {
            List<MessagingMessage> messages, Person user, List<List<MessagingMessage>> outGroups,
            List<Person> outSenders) {
        CharSequence currentSenderKey = null;
        List<MessagingMessage> currentGroup = null;
        int histSize = historicMessages.size();
@@ -1003,14 +1004,14 @@ public class ConversationLayout extends FrameLayout
            isNewGroup |= !TextUtils.equals(key, currentSenderKey);
            if (isNewGroup) {
                currentGroup = new ArrayList<>();
                groups.add(currentGroup);
                outGroups.add(currentGroup);
                if (sender == null) {
                    sender = mUser;
                    sender = user;
                } else {
                    // Remove all formatting from the sender name
                    sender = sender.toBuilder().setName(Objects.toString(sender.getName())).build();
                }
                senders.add(sender);
                outSenders.add(sender);
                currentSenderKey = key;
            }
            currentGroup.add(message);
+20 −3
Original line number Diff line number Diff line
@@ -28,24 +28,33 @@ final class MessagingData {
    private final boolean mShowSpinner;
    private final List<MessagingMessage> mHistoricMessagingMessages;
    private final List<MessagingMessage> mNewMessagingMessages;
    private final List<List<MessagingMessage>> mGroups;
    private final List<Person> mSenders;
    private final int mUnreadCount;

    MessagingData(Person user, boolean showSpinner,
            List<MessagingMessage> historicMessagingMessages,
            List<MessagingMessage> newMessagingMessages) {
            List<MessagingMessage> newMessagingMessages, List<List<MessagingMessage>> groups,
            List<Person> senders) {
        this(user, showSpinner, /* unreadCount= */0,
                historicMessagingMessages, newMessagingMessages);
                historicMessagingMessages, newMessagingMessages,
                groups,
                senders);
    }

    MessagingData(Person user, boolean showSpinner,
            int unreadCount,
            List<MessagingMessage> historicMessagingMessages,
            List<MessagingMessage> newMessagingMessages) {
            List<MessagingMessage> newMessagingMessages,
            List<List<MessagingMessage>> groups,
            List<Person> senders) {
        mUser = user;
        mShowSpinner = showSpinner;
        mUnreadCount = unreadCount;
        mHistoricMessagingMessages = historicMessagingMessages;
        mNewMessagingMessages = newMessagingMessages;
        mGroups = groups;
        mSenders = senders;
    }

    public Person getUser() {
@@ -67,4 +76,12 @@ final class MessagingData {
    public int getUnreadCount() {
        return mUnreadCount;
    }

    public List<Person> getSenders() {
        return mSenders;
    }

    public List<List<MessagingMessage>> getGroups() {
        return mGroups;
    }
}
+12 −19
Original line number Diff line number Diff line
@@ -189,9 +189,15 @@ public class MessagingLayout extends FrameLayout
                /* isHistoric= */true, usePrecomputedText);
        final List<MessagingMessage> newMessagingMessages =
                createMessages(newMessages, /* isHistoric */false, usePrecomputedText);
        // Let's first find our groups!
        List<List<MessagingMessage>> groups = new ArrayList<>();
        List<Person> senders = new ArrayList<>();

        // Lets first find the groups
        findGroups(historicMessagingMessages, newMessagingMessages, groups, senders);

        return new MessagingData(user, showSpinner,
                historicMessagingMessages, newMessagingMessages);
                historicMessagingMessages, newMessagingMessages, groups, senders);
    }

    /**
@@ -256,10 +262,10 @@ public class MessagingLayout extends FrameLayout
    private void bind(MessagingData messagingData) {
        setUser(messagingData.getUser());

        List<MessagingMessage> historicMessages = messagingData.getHistoricMessagingMessages();
        List<MessagingMessage> messages = messagingData.getNewMessagingMessages();
        // Let's now create the views and reorder them accordingly
        ArrayList<MessagingGroup> oldGroups = new ArrayList<>(mGroups);
        addMessagesToGroups(historicMessages, messages, messagingData.getShowSpinner());
        createGroupViews(messagingData.getGroups(), messagingData.getSenders(),
                messagingData.getShowSpinner());

        // Let's first check which groups were removed altogether and remove them in one animation
        removeGroups(oldGroups);
@@ -272,8 +278,8 @@ public class MessagingLayout extends FrameLayout
            historicMessage.removeMessage(mToRecycle);
        }

        mMessages = messages;
        mHistoricMessages = historicMessages;
        mMessages = messagingData.getNewMessagingMessages();
        mHistoricMessages = messagingData.getHistoricMessagingMessages();

        updateHistoricMessageVisibility();
        updateTitleAndNamesDisplay();
@@ -451,19 +457,6 @@ public class MessagingLayout extends FrameLayout
        }
    }

    private void addMessagesToGroups(List<MessagingMessage> historicMessages,
            List<MessagingMessage> messages, boolean showSpinner) {
        // Let's first find our groups!
        List<List<MessagingMessage>> groups = new ArrayList<>();
        List<Person> senders = new ArrayList<>();

        // Lets first find the groups
        findGroups(historicMessages, messages, groups, senders);

        // Let's now create the views and reorder them accordingly
        createGroupViews(groups, senders, showSpinner);
    }

    private void createGroupViews(List<List<MessagingMessage>> groups,
            List<Person> senders, boolean showSpinner) {
        mGroups.clear();