diff options
author | 2022-09-27 21:25:08 +0800 | |
---|---|---|
committer | 2022-10-21 07:50:20 +0000 | |
commit | f287bdaef488f230118c8fc450b33c67b7f94f85 (patch) | |
tree | f927eb70aeea1f5e732650a043171d6306ba23b9 | |
parent | 90a441ea64142014ee201115b7d771d8777f98aa (diff) |
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
3 files changed, 9 insertions, 4 deletions
diff --git a/core/java/com/android/internal/widget/ConversationLayout.java b/core/java/com/android/internal/widget/ConversationLayout.java index 4706affa3541..8b1657b50139 100644 --- a/core/java/com/android/internal/widget/ConversationLayout.java +++ b/core/java/com/android/internal/widget/ConversationLayout.java @@ -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); diff --git a/core/java/com/android/internal/widget/MessagingGroup.java b/core/java/com/android/internal/widget/MessagingGroup.java index 146cb3fadaac..30e4099f9a6f 100644 --- a/core/java/com/android/internal/widget/MessagingGroup.java +++ b/core/java/com/android/internal/widget/MessagingGroup.java @@ -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); } } } diff --git a/core/java/com/android/internal/widget/MessagingLayout.java b/core/java/com/android/internal/widget/MessagingLayout.java index 9ac6ef77bc07..a270b28e4e80 100644 --- a/core/java/com/android/internal/widget/MessagingLayout.java +++ b/core/java/com/android/internal/widget/MessagingLayout.java @@ -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); |