Skip to content

Commit 1037acd

Browse files
authored
Load original message and use it for timestamps in Conversation.
1 parent 68042fc commit 1037acd

5 files changed

Lines changed: 40 additions & 17 deletions

File tree

app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ public void onBindHeaderViewHolder(StickyHeaderViewHolder viewHolder, int positi
356356
if (scheduledMessagesMode) {
357357
viewHolder.setText(DateUtils.getScheduledMessagesDateHeaderString(viewHolder.itemView.getContext(), locale, ((MediaMmsMessageRecord) conversationMessage.getMessageRecord()).getScheduledDate()));
358358
} else {
359-
viewHolder.setText(DateUtils.getConversationDateHeaderString(viewHolder.itemView.getContext(), locale, conversationMessage.getMessageRecord().getConversationTimestamp()));
359+
viewHolder.setText(DateUtils.getConversationDateHeaderString(viewHolder.itemView.getContext(), locale, conversationMessage.getConversationTimestamp()));
360360
}
361361

362362
if (type == HEADER_TYPE_POPOVER_DATE) {

app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationMessage.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import androidx.annotation.WorkerThread;
99

1010
import org.signal.core.util.Conversions;
11+
import org.signal.core.util.logging.Log;
1112
import org.thoughtcrime.securesms.components.mention.MentionAnnotation;
1213
import org.thoughtcrime.securesms.conversation.mutiselect.Multiselect;
1314
import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectCollection;
1415
import org.thoughtcrime.securesms.database.BodyRangeUtil;
1516
import org.thoughtcrime.securesms.database.MentionUtil;
17+
import org.thoughtcrime.securesms.database.NoSuchMessageException;
1618
import org.thoughtcrime.securesms.database.SignalDatabase;
1719
import org.thoughtcrime.securesms.database.model.Mention;
1820
import org.thoughtcrime.securesms.database.model.MessageRecord;
@@ -30,26 +32,32 @@
3032
* for various presentations.
3133
*/
3234
public class ConversationMessage {
35+
36+
private static final String TAG = Log.tag(ConversationMessage.class);
37+
3338
@NonNull private final MessageRecord messageRecord;
3439
@NonNull private final List<Mention> mentions;
3540
@Nullable private final SpannableString body;
3641
@NonNull private final MultiselectCollection multiselectCollection;
3742
@NonNull private final MessageStyler.Result styleResult;
3843
@NonNull private final Recipient threadRecipient;
3944
private final boolean hasBeenQuoted;
45+
@Nullable private final MessageRecord originalMessage;
4046

4147
private ConversationMessage(@NonNull MessageRecord messageRecord,
4248
@Nullable CharSequence body,
4349
@Nullable List<Mention> mentions,
4450
boolean hasBeenQuoted,
4551
@Nullable MessageStyler.Result styleResult,
46-
@NonNull Recipient threadRecipient)
52+
@NonNull Recipient threadRecipient,
53+
@Nullable MessageRecord originalMessage)
4754
{
4855
this.messageRecord = messageRecord;
4956
this.hasBeenQuoted = hasBeenQuoted;
5057
this.mentions = mentions != null ? mentions : Collections.emptyList();
5158
this.styleResult = styleResult != null ? styleResult : MessageStyler.Result.none();
5259
this.threadRecipient = threadRecipient;
60+
this.originalMessage = originalMessage;
5361

5462
if (body != null) {
5563
this.body = SpannableString.valueOf(body);
@@ -120,6 +128,20 @@ public boolean isTextOnly(@NonNull Context context) {
120128
getBottomButton() == null;
121129
}
122130

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+
123145
public boolean hasBeenScheduled() {
124146
return MessageRecordUtil.isScheduled(messageRecord);
125147
}
@@ -163,12 +185,22 @@ public static class ConversationMessageFactory {
163185
styleResult = MessageStyler.style(messageRecord.getDateSent(), bodyRanges, styledAndMentionBody);
164186
}
165187

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+
166197
return new ConversationMessage(messageRecord,
167198
styledAndMentionBody != null ? styledAndMentionBody : mentionsUpdate != null ? mentionsUpdate.getBody() : body,
168199
mentionsUpdate != null ? mentionsUpdate.getMentions() : null,
169200
hasBeenQuoted,
170201
styleResult,
171-
threadRecipient);
202+
threadRecipient,
203+
originalMessage);
172204
}
173205

174206
/**

app/src/main/java/org/thoughtcrime/securesms/conversation/MenuState.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,9 @@ public static MenuState getMenuState(@NonNull Recipient conversationRecipient,
162162
.shouldShowResendAction(false)
163163
.shouldShowEdit(false);
164164
} else {
165-
MessageRecord messageRecord = selectedParts.iterator().next().getMessageRecord();
165+
MultiselectPart multiSelectRecord = selectedParts.iterator().next();
166+
167+
MessageRecord messageRecord = multiSelectRecord.getMessageRecord();
166168

167169
builder.shouldShowResendAction(messageRecord.isFailed())
168170
.shouldShowSaveAttachmentAction(mediaIsSelected &&
@@ -180,7 +182,7 @@ public static MenuState getMenuState(@NonNull Recipient conversationRecipient,
180182

181183
builder.shouldShowEdit(!actionMessage &&
182184
hasText &&
183-
MessageConstraintsUtil.isValidEditMessageSend(messageRecord, System.currentTimeMillis()));
185+
MessageConstraintsUtil.isValidEditMessageSend(multiSelectRecord.getConversationMessage().getOriginalMessage(), System.currentTimeMillis()));
184186
}
185187

186188
return builder.shouldShowCopyAction(!actionMessage && !remoteDelete && hasText && !hasGift && !hasPayment)

app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DateHeaderDecoration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class DateHeaderDecoration(hasWallpaper: Boolean = false, private val scheduleMe
116116
return if (scheduleMessageMode) {
117117
(conversationMessage.messageRecord as MediaMmsMessageRecord).scheduledDate
118118
} else {
119-
conversationMessage.messageRecord.conversationTimestamp
119+
conversationMessage.conversationTimestamp
120120
}
121121
}
122122

app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -741,17 +741,6 @@ public boolean isEditMessage() {
741741
return originalMessageId;
742742
}
743743

744-
/**
745-
* Get the timestamp of a message, shown in the conversation. This is used
746-
* for example when showing the conversation date separators.
747-
*/
748-
public long getConversationTimestamp() {
749-
if (isEditMessage()) {
750-
return getDateReceived();
751-
}
752-
return getDateSent();
753-
}
754-
755744
public int getRevisionNumber() {
756745
return revisionNumber;
757746
}

0 commit comments

Comments
 (0)