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

Commit f287bdae authored by Shen Lin's avatar Shen Lin
Browse files

Fix potential NPE when MessagingMessage's message is null

message.getMessage() is nullable because it may be recycled, so we have to add null check before calling its reference.
This can affect several messaging related layout classes.

Bug: 249260110
Test: manual and atest
Change-Id: I9ac68ab0edca5a5a1a46acfae9bcd52be51ea612
parent 90a441ea
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -924,7 +924,8 @@ public class ConversationLayout extends FrameLayout
                message = messages.get(i - histSize);
                message = messages.get(i - histSize);
            }
            }
            boolean isNewGroup = currentGroup == null;
            boolean isNewGroup = currentGroup == null;
            Person sender = message.getMessage().getSenderPerson();
            Person sender =
                    message.getMessage() == null ? null : message.getMessage().getSenderPerson();
            CharSequence key = getKey(sender);
            CharSequence key = getKey(sender);
            isNewGroup |= !TextUtils.equals(key, currentSenderKey);
            isNewGroup |= !TextUtils.equals(key, currentSenderKey);
            if (isNewGroup) {
            if (isNewGroup) {
@@ -1187,7 +1188,8 @@ public class ConversationLayout extends FrameLayout
            return null;
            return null;
        }
        }
        final MessagingMessage messagingMessage = mMessages.get(mMessages.size() - 1);
        final MessagingMessage messagingMessage = mMessages.get(mMessages.size() - 1);
        final CharSequence text = messagingMessage.getMessage().getText();
        final CharSequence text = messagingMessage.getMessage() == null ? null
                : messagingMessage.getMessage().getText();
        if (text == null && messagingMessage instanceof MessagingImageMessage) {
        if (text == null && messagingMessage instanceof MessagingImageMessage) {
            final String unformatted =
            final String unformatted =
                    getResources().getString(R.string.conversation_single_line_image_placeholder);
                    getResources().getString(R.string.conversation_single_line_image_placeholder);
+3 −1
Original line number Original line Diff line number Diff line
@@ -492,7 +492,9 @@ public class MessagingGroup extends LinearLayout implements MessagingLinearLayou
            int color = mSendingSpinnerContainer.getVisibility() == View.VISIBLE
            int color = mSendingSpinnerContainer.getVisibility() == View.VISIBLE
                    ? mSendingTextColor : mTextColor;
                    ? mSendingTextColor : mTextColor;
            for (MessagingMessage message : mMessages) {
            for (MessagingMessage message : mMessages) {
                message.setColor(message.getMessage().isRemoteInputHistory() ? color : mTextColor);
                final boolean isRemoteInputHistory =
                        message.getMessage() != null && message.getMessage().isRemoteInputHistory();
                message.setColor(isRemoteInputHistory ? color : mTextColor);
            }
            }
        }
        }
    }
    }
+2 −1
Original line number Original line Diff line number Diff line
@@ -470,7 +470,8 @@ public class MessagingLayout extends FrameLayout
                message = messages.get(i - histSize);
                message = messages.get(i - histSize);
            }
            }
            boolean isNewGroup = currentGroup == null;
            boolean isNewGroup = currentGroup == null;
            Person sender = message.getMessage().getSenderPerson();
            Person sender =
                    message.getMessage() == null ? null : message.getMessage().getSenderPerson();
            CharSequence key = sender == null ? null
            CharSequence key = sender == null ? null
                    : sender.getKey() == null ? sender.getName() : sender.getKey();
                    : sender.getKey() == null ? sender.getName() : sender.getKey();
            isNewGroup |= !TextUtils.equals(key, currentSenderKey);
            isNewGroup |= !TextUtils.equals(key, currentSenderKey);