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
This commit is contained in:
Shen Lin
2022-09-27 21:25:08 +08:00
parent 90a441ea64
commit f287bdaef4
3 changed files with 9 additions and 4 deletions

View File

@@ -924,7 +924,8 @@ public class ConversationLayout extends FrameLayout
message = messages.get(i - histSize);
}
boolean isNewGroup = currentGroup == null;
Person sender = message.getMessage().getSenderPerson();
Person sender =
message.getMessage() == null ? null : message.getMessage().getSenderPerson();
CharSequence key = getKey(sender);
isNewGroup |= !TextUtils.equals(key, currentSenderKey);
if (isNewGroup) {
@@ -1187,7 +1188,8 @@ public class ConversationLayout extends FrameLayout
return null;
}
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) {
final String unformatted =
getResources().getString(R.string.conversation_single_line_image_placeholder);

View File

@@ -492,7 +492,9 @@ public class MessagingGroup extends LinearLayout implements MessagingLinearLayou
int color = mSendingSpinnerContainer.getVisibility() == View.VISIBLE
? mSendingTextColor : mTextColor;
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);
}
}
}

View File

@@ -470,7 +470,8 @@ public class MessagingLayout extends FrameLayout
message = messages.get(i - histSize);
}
boolean isNewGroup = currentGroup == null;
Person sender = message.getMessage().getSenderPerson();
Person sender =
message.getMessage() == null ? null : message.getMessage().getSenderPerson();
CharSequence key = sender == null ? null
: sender.getKey() == null ? sender.getName() : sender.getKey();
isNewGroup |= !TextUtils.equals(key, currentSenderKey);