diff --git a/core/java/com/android/internal/widget/MessagingMessage.java b/core/java/com/android/internal/widget/MessagingMessage.java index f0b60685b70e0..d2b670fa2d665 100644 --- a/core/java/com/android/internal/widget/MessagingMessage.java +++ b/core/java/com/android/internal/widget/MessagingMessage.java @@ -73,7 +73,14 @@ public interface MessagingMessage extends MessagingLinearLayout.MessagingChild { if (!Objects.equals(message.getSender(), ownMessage.getSender())) { return false; } - if (!Objects.equals(message.getTimestamp(), ownMessage.getTimestamp())) { + boolean hasRemoteInputHistoryChanged = message.isRemoteInputHistory() + != ownMessage.isRemoteInputHistory(); + // When the remote input history has changed, we want to regard messages equal even when + // the timestamp changes. The main reason is that the message that the system inserts + // will have a different time set than the one that the app will update us with and we + // still want to reuse that message. + if (!hasRemoteInputHistoryChanged + && !Objects.equals(message.getTimestamp(), ownMessage.getTimestamp())) { return false; } if (!Objects.equals(message.getDataMimeType(), ownMessage.getDataMimeType())) { @@ -82,9 +89,6 @@ public interface MessagingMessage extends MessagingLinearLayout.MessagingChild { if (!Objects.equals(message.getDataUri(), ownMessage.getDataUri())) { return false; } - if (message.isRemoteInputHistory() != ownMessage.isRemoteInputHistory()) { - return false; - } return true; }