|
8 | 8 | import androidx.annotation.WorkerThread; |
9 | 9 |
|
10 | 10 | import org.signal.core.util.Conversions; |
| 11 | +import org.signal.core.util.logging.Log; |
11 | 12 | import org.thoughtcrime.securesms.components.mention.MentionAnnotation; |
12 | 13 | import org.thoughtcrime.securesms.conversation.mutiselect.Multiselect; |
13 | 14 | import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectCollection; |
14 | 15 | import org.thoughtcrime.securesms.database.BodyRangeUtil; |
15 | 16 | import org.thoughtcrime.securesms.database.MentionUtil; |
| 17 | +import org.thoughtcrime.securesms.database.NoSuchMessageException; |
16 | 18 | import org.thoughtcrime.securesms.database.SignalDatabase; |
17 | 19 | import org.thoughtcrime.securesms.database.model.Mention; |
18 | 20 | import org.thoughtcrime.securesms.database.model.MessageRecord; |
|
30 | 32 | * for various presentations. |
31 | 33 | */ |
32 | 34 | public class ConversationMessage { |
| 35 | + |
| 36 | + private static final String TAG = Log.tag(ConversationMessage.class); |
| 37 | + |
33 | 38 | @NonNull private final MessageRecord messageRecord; |
34 | 39 | @NonNull private final List<Mention> mentions; |
35 | 40 | @Nullable private final SpannableString body; |
36 | 41 | @NonNull private final MultiselectCollection multiselectCollection; |
37 | 42 | @NonNull private final MessageStyler.Result styleResult; |
38 | 43 | @NonNull private final Recipient threadRecipient; |
39 | 44 | private final boolean hasBeenQuoted; |
| 45 | + @Nullable private final MessageRecord originalMessage; |
40 | 46 |
|
41 | 47 | private ConversationMessage(@NonNull MessageRecord messageRecord, |
42 | 48 | @Nullable CharSequence body, |
43 | 49 | @Nullable List<Mention> mentions, |
44 | 50 | boolean hasBeenQuoted, |
45 | 51 | @Nullable MessageStyler.Result styleResult, |
46 | | - @NonNull Recipient threadRecipient) |
| 52 | + @NonNull Recipient threadRecipient, |
| 53 | + @Nullable MessageRecord originalMessage) |
47 | 54 | { |
48 | 55 | this.messageRecord = messageRecord; |
49 | 56 | this.hasBeenQuoted = hasBeenQuoted; |
50 | 57 | this.mentions = mentions != null ? mentions : Collections.emptyList(); |
51 | 58 | this.styleResult = styleResult != null ? styleResult : MessageStyler.Result.none(); |
52 | 59 | this.threadRecipient = threadRecipient; |
| 60 | + this.originalMessage = originalMessage; |
53 | 61 |
|
54 | 62 | if (body != null) { |
55 | 63 | this.body = SpannableString.valueOf(body); |
@@ -120,6 +128,20 @@ public boolean isTextOnly(@NonNull Context context) { |
120 | 128 | getBottomButton() == null; |
121 | 129 | } |
122 | 130 |
|
| 131 | + public long getConversationTimestamp() { |
| 132 | + if (originalMessage != null) { |
| 133 | + return originalMessage.getDateSent(); |
| 134 | + } |
| 135 | + return messageRecord.getDateSent(); |
| 136 | + } |
| 137 | + |
| 138 | + public MessageRecord getOriginalMessage() { |
| 139 | + if (originalMessage != null) { |
| 140 | + return originalMessage; |
| 141 | + } |
| 142 | + return messageRecord; |
| 143 | + } |
| 144 | + |
123 | 145 | public boolean hasBeenScheduled() { |
124 | 146 | return MessageRecordUtil.isScheduled(messageRecord); |
125 | 147 | } |
@@ -163,12 +185,22 @@ public static class ConversationMessageFactory { |
163 | 185 | styleResult = MessageStyler.style(messageRecord.getDateSent(), bodyRanges, styledAndMentionBody); |
164 | 186 | } |
165 | 187 |
|
| 188 | + MessageRecord originalMessage = null; |
| 189 | + if (messageRecord.isEditMessage()) { |
| 190 | + try { |
| 191 | + originalMessage = SignalDatabase.messages().getMessageRecord(messageRecord.getOriginalMessageId().getId()); |
| 192 | + } catch (NoSuchMessageException e) { |
| 193 | + Log.e(TAG, "Original message of edit message not found!", e); |
| 194 | + } |
| 195 | + } |
| 196 | + |
166 | 197 | return new ConversationMessage(messageRecord, |
167 | 198 | styledAndMentionBody != null ? styledAndMentionBody : mentionsUpdate != null ? mentionsUpdate.getBody() : body, |
168 | 199 | mentionsUpdate != null ? mentionsUpdate.getMentions() : null, |
169 | 200 | hasBeenQuoted, |
170 | 201 | styleResult, |
171 | | - threadRecipient); |
| 202 | + threadRecipient, |
| 203 | + originalMessage); |
172 | 204 | } |
173 | 205 |
|
174 | 206 | /** |
|
0 commit comments