summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shen Lin <shhenlin@gmail.com> 2022-09-27 21:25:08 +0800
committer Shen Lin <shhenlin@gmail.com> 2022-10-21 07:50:20 +0000
commitf287bdaef488f230118c8fc450b33c67b7f94f85 (patch)
treef927eb70aeea1f5e732650a043171d6306ba23b9
parent90a441ea64142014ee201115b7d771d8777f98aa (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
-rw-r--r--core/java/com/android/internal/widget/ConversationLayout.java6
-rw-r--r--core/java/com/android/internal/widget/MessagingGroup.java4
-rw-r--r--core/java/com/android/internal/widget/MessagingLayout.java3
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);