Compute ConversationItem dates in the background.
This commit is contained in:
parent
4494d8652d
commit
f4df37da23
5 changed files with 26 additions and 11 deletions
|
@ -16,15 +16,18 @@ import org.thoughtcrime.securesms.database.BodyRangeUtil;
|
|||
import org.thoughtcrime.securesms.database.MentionUtil;
|
||||
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.database.model.Mention;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.util.MessageRecordUtil;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
|
@ -43,6 +46,7 @@ public class ConversationMessage {
|
|||
@NonNull private final Recipient threadRecipient;
|
||||
private final boolean hasBeenQuoted;
|
||||
@Nullable private final MessageRecord originalMessage;
|
||||
@NonNull private final String formattedDate;
|
||||
|
||||
private ConversationMessage(@NonNull MessageRecord messageRecord,
|
||||
@Nullable CharSequence body,
|
||||
|
@ -50,7 +54,8 @@ public class ConversationMessage {
|
|||
boolean hasBeenQuoted,
|
||||
@Nullable MessageStyler.Result styleResult,
|
||||
@NonNull Recipient threadRecipient,
|
||||
@Nullable MessageRecord originalMessage)
|
||||
@Nullable MessageRecord originalMessage,
|
||||
@NonNull String formattedDate)
|
||||
{
|
||||
this.messageRecord = messageRecord;
|
||||
this.hasBeenQuoted = hasBeenQuoted;
|
||||
|
@ -58,6 +63,7 @@ public class ConversationMessage {
|
|||
this.styleResult = styleResult != null ? styleResult : MessageStyler.Result.none();
|
||||
this.threadRecipient = threadRecipient;
|
||||
this.originalMessage = originalMessage;
|
||||
this.formattedDate = formattedDate;
|
||||
|
||||
if (body != null) {
|
||||
this.body = SpannableString.valueOf(body);
|
||||
|
@ -90,6 +96,11 @@ public class ConversationMessage {
|
|||
return hasBeenQuoted;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getFormattedDate() {
|
||||
return formattedDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
@ -194,13 +205,18 @@ public class ConversationMessage {
|
|||
}
|
||||
}
|
||||
|
||||
String formattedDate = MessageRecordUtil.isScheduled(messageRecord) ? DateUtils.getOnlyTimeString(context, Locale.getDefault(), ((MediaMmsMessageRecord) messageRecord).getScheduledDate())
|
||||
: DateUtils.getSimpleRelativeTimeSpanString(context, Locale.getDefault(), messageRecord.getTimestamp());
|
||||
|
||||
|
||||
return new ConversationMessage(messageRecord,
|
||||
styledAndMentionBody != null ? styledAndMentionBody : mentionsUpdate != null ? mentionsUpdate.getBody() : body,
|
||||
mentionsUpdate != null ? mentionsUpdate.getMentions() : null,
|
||||
hasBeenQuoted,
|
||||
styleResult,
|
||||
threadRecipient,
|
||||
originalMessage);
|
||||
originalMessage,
|
||||
formattedDate);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -395,7 +395,7 @@ class ConversationFragment :
|
|||
ConversationViewModel(
|
||||
threadId = args.threadId,
|
||||
requestedStartingPosition = args.startingPosition,
|
||||
repository = ConversationRepository(context = requireContext(), isInBubble = args.conversationScreenType == ConversationScreenType.BUBBLE),
|
||||
repository = ConversationRepository(localContext = requireContext(), isInBubble = args.conversationScreenType == ConversationScreenType.BUBBLE),
|
||||
recipientRepository = conversationRecipientRepository,
|
||||
messageRequestRepository = messageRequestRepository,
|
||||
scheduledMessagesRepository = ScheduledMessagesRepository()
|
||||
|
@ -1035,7 +1035,7 @@ class ConversationFragment :
|
|||
|
||||
getVoiceNoteMediaController().voiceNotePlaybackState.observe(viewLifecycleOwner, inputPanel.playbackStateObserver)
|
||||
|
||||
val conversationUpdateTick = ConversationUpdateTick { adapter.updateTimestamps() }
|
||||
val conversationUpdateTick = ConversationUpdateTick { viewModel.pagingController.onDataInvalidated() }
|
||||
viewLifecycleOwner.lifecycle.addObserver(conversationUpdateTick)
|
||||
|
||||
if (args.conversationScreenType.isInPopup) {
|
||||
|
|
|
@ -106,7 +106,7 @@ import kotlin.time.Duration
|
|||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
class ConversationRepository(
|
||||
context: Context,
|
||||
private val localContext: Context,
|
||||
private val isInBubble: Boolean
|
||||
) {
|
||||
|
||||
|
@ -114,7 +114,7 @@ class ConversationRepository(
|
|||
private val TAG = Log.tag(ConversationRepository::class.java)
|
||||
}
|
||||
|
||||
private val applicationContext = context.applicationContext
|
||||
private val applicationContext = localContext.applicationContext
|
||||
private val oldConversationRepository = org.thoughtcrime.securesms.conversation.ConversationRepository()
|
||||
|
||||
/**
|
||||
|
@ -139,7 +139,7 @@ class ConversationRepository(
|
|||
|
||||
val messageRequestData = metadata.messageRequestData
|
||||
val dataSource = ConversationDataSource(
|
||||
applicationContext,
|
||||
localContext,
|
||||
threadId,
|
||||
messageRequestData,
|
||||
metadata.showUniversalExpireTimerMessage,
|
||||
|
|
|
@ -74,7 +74,7 @@ import kotlin.time.Duration
|
|||
*/
|
||||
class ConversationViewModel(
|
||||
val threadId: Long,
|
||||
requestedStartingPosition: Int,
|
||||
private val requestedStartingPosition: Int,
|
||||
private val repository: ConversationRepository,
|
||||
recipientRepository: ConversationRecipientRepository,
|
||||
messageRequestRepository: MessageRequestRepository,
|
||||
|
|
|
@ -40,7 +40,6 @@ import org.thoughtcrime.securesms.database.model.MessageRecord
|
|||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.util.DateUtils
|
||||
import org.thoughtcrime.securesms.util.InterceptableLongClickCopyLinkSpan
|
||||
import org.thoughtcrime.securesms.util.LongClickMovementMethod
|
||||
import org.thoughtcrime.securesms.util.PlaceholderURLSpan
|
||||
|
@ -532,9 +531,9 @@ class V2TextOnlyViewHolder<Model : MappingModel<Model>>(
|
|||
} else if (record.isRateLimited) {
|
||||
binding.conversationItemFooterDate.setText(R.string.ConversationItem_send_paused)
|
||||
} else if (record.isScheduled()) {
|
||||
binding.conversationItemFooterDate.text = (DateUtils.getOnlyTimeString(getContext(), Locale.getDefault(), (record as MediaMmsMessageRecord).scheduledDate))
|
||||
binding.conversationItemFooterDate.text = conversationMessage.formattedDate
|
||||
} else {
|
||||
var date = DateUtils.getSimpleRelativeTimeSpanString(context, Locale.getDefault(), record.timestamp)
|
||||
var date = conversationMessage.formattedDate
|
||||
if (conversationContext.displayMode != ConversationItemDisplayMode.DETAILED && record is MediaMmsMessageRecord && record.isEditMessage()) {
|
||||
date = getContext().getString(R.string.ConversationItem_edited_timestamp_footer, date)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue