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

Commit 8a9733fc authored by Ibrahim Yilmaz's avatar Ibrahim Yilmaz
Browse files

Decouple MessagingMessage View creation from view binding in Messaging Layouts

MessagingLayout and ConversationLayout bindings create MessagingMessage for historic and normal messages.
This CL decouples these logics to create Precomputed Text version of MessagingMessage.

Bug: 289250881
Test: Manual. Post Messaging and Conversation notifications with and without this. No change is expected.
Change-Id: Id09362b9a2263653ea3e145f20369ba017a63924
parent d7ab422d
Loading
Loading
Loading
Loading
+22 −14
Original line number Diff line number Diff line
@@ -397,8 +397,7 @@ public class ConversationLayout extends FrameLayout
                = Notification.MessagingStyle.Message.getMessagesFromBundleArray(histMessages);

        // mUser now set (would be nice to avoid the side effect but WHATEVER)
        setUser(extras.getParcelable(Notification.EXTRA_MESSAGING_PERSON, android.app.Person.class));

        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);
@@ -406,11 +405,18 @@ public class ConversationLayout extends FrameLayout

        boolean showSpinner =
                extras.getBoolean(Notification.EXTRA_SHOW_REMOTE_INPUT_SPINNER, false);
        // bind it, baby
        bind(newMessages, newHistoricMessages, showSpinner);

        int unreadCount = extras.getInt(Notification.EXTRA_CONVERSATION_UNREAD_MESSAGE_COUNT);
        setUnreadCount(unreadCount);

        // convert MessagingStyle.Message to MessagingMessage, re-using ones from a previous binding
        // if they exist
        final List<MessagingMessage> newMessagingMessages =
                createMessages(newMessages, false /* isHistoric */);
        final List<MessagingMessage> newHistoricMessagingMessages =
                createMessages(newHistoricMessages, true /* isHistoric */);
        // bind it, baby
        bindViews(user, showSpinner, unreadCount,
                newMessagingMessages,
                newHistoricMessagingMessages);
    }

    /**
@@ -452,15 +458,17 @@ public class ConversationLayout extends FrameLayout
        }
    }

    private void bind(List<Notification.MessagingStyle.Message> newMessages,
            List<Notification.MessagingStyle.Message> newHistoricMessages,
            boolean showSpinner) {
        // convert MessagingStyle.Message to MessagingMessage, re-using ones from a previous binding
        // if they exist
        List<MessagingMessage> historicMessages = createMessages(newHistoricMessages,
                true /* isHistoric */);
        List<MessagingMessage> messages = createMessages(newMessages, false /* isHistoric */);

    private void bindViews(Person user,
            boolean showSpinner, int unreadCount, List<MessagingMessage> newMessagingMessages,
            List<MessagingMessage> newHistoricMessagingMessages) {
        setUser(user);
        setUnreadCount(unreadCount);
        bind(showSpinner, newMessagingMessages, newHistoricMessagingMessages);
    }

    private void bind(boolean showSpinner, List<MessagingMessage> messages,
            List<MessagingMessage> historicMessages) {
        // Copy our groups, before they get clobbered
        ArrayList<MessagingGroup> oldGroups = new ArrayList<>(mGroups);

+16 −8
Original line number Diff line number Diff line
@@ -172,9 +172,16 @@ public class MessagingLayout extends FrameLayout
        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);
        bind(newMessages, newHistoricMessages, showSpinner);

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

    /**
@@ -211,14 +218,15 @@ public class MessagingLayout extends FrameLayout
        }
    }

    private void bind(List<Notification.MessagingStyle.Message> newMessages,
            List<Notification.MessagingStyle.Message> newHistoricMessages,
            boolean showSpinner) {

        List<MessagingMessage> historicMessages = createMessages(newHistoricMessages,
                true /* isHistoric */);
        List<MessagingMessage> messages = createMessages(newMessages, false /* isHistoric */);
    private void bindViews(Person user, boolean showSpinner,
            List<MessagingMessage> historicMessagingMessages,
            List<MessagingMessage> newMessagingMessages) {
        setUser(user);
        bind(showSpinner, historicMessagingMessages, newMessagingMessages);
    }

    private void bind(boolean showSpinner, List<MessagingMessage> historicMessages,
            List<MessagingMessage> messages) {
        ArrayList<MessagingGroup> oldGroups = new ArrayList<>(mGroups);
        addMessagesToGroups(historicMessages, messages, showSpinner);