diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index a171ce8247..63a2bce264 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -29,6 +29,7 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.animation.AnimationCompleteListener; import org.thoughtcrime.securesms.conversation.ConversationItemDisplayMode; +import org.thoughtcrime.securesms.conversation.v2.computed.FormattedDate; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord; @@ -325,15 +326,18 @@ public class ConversationItemFooter extends ConstraintLayout { timestamp = messageRecord.getDateSent(); } } - String date = DateUtils.getDatelessRelativeTimeSpanString(getContext(), locale, timestamp); + FormattedDate date = DateUtils.getDatelessRelativeTimeSpanFormattedDate(getContext(), locale, timestamp); + String dateLabel = date.getValue(); if (displayMode != ConversationItemDisplayMode.Detailed.INSTANCE && messageRecord.isEditMessage() && messageRecord.isLatestRevision()) { - if (DateUtils.isNow(timestamp)) { - date = getContext().getString(R.string.ConversationItem_edited_now_timestamp_footer); + if (date.isNow()) { + dateLabel = getContext().getString(R.string.ConversationItem_edited_now_timestamp_footer); + } else if (date.isRelative()) { + dateLabel = getContext().getString(R.string.ConversationItem_edited_relative_timestamp_footer, date.getValue()); } else { - date = getContext().getString(R.string.ConversationItem_edited_timestamp_footer, date); + dateLabel = getContext().getString(R.string.ConversationItem_edited_absolute_timestamp_footer, date.getValue()); } } - dateView.setText(date); + dateView.setText(dateLabel); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt index 4d10d95a4f..086d13bd21 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt @@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.conversation.colors.ChatColors import org.thoughtcrime.securesms.conversation.mutiselect.Multiselect import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart import org.thoughtcrime.securesms.conversation.mutiselect.Multiselectable +import org.thoughtcrime.securesms.conversation.v2.computed.FormattedDate import org.thoughtcrime.securesms.conversation.v2.data.ConversationMessageElement import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -100,7 +101,7 @@ open class V2ConversationItemTextOnlyViewHolder>( override val badgeImageView: View? = binding.senderBadge private var reactionMeasureListener: ReactionMeasureListener = ReactionMeasureListener() - private var dateString: String = "" + private var formattedDate: FormattedDate? = null private val bodyBubbleDrawable = ChatColorsDrawable() private val footerDrawable = ChatColorsDrawable() @@ -197,7 +198,7 @@ open class V2ConversationItemTextOnlyViewHolder>( ) if (ConversationAdapterBridge.PAYLOAD_TIMESTAMP in payload) { - if (conversationMessage.computedProperties.formattedDate.value != dateString) { + if (conversationMessage.computedProperties.formattedDate != formattedDate) { presentDate() } hasProcessedSupportedPayload = true @@ -616,7 +617,7 @@ open class V2ConversationItemTextOnlyViewHolder>( return } - dateString = conversationMessage.computedProperties.formattedDate.value + formattedDate = conversationMessage.computedProperties.formattedDate binding.footerDate.setOnClickListener(null) binding.footerDate.visible = true @@ -638,12 +639,14 @@ open class V2ConversationItemTextOnlyViewHolder>( } else if (record.isScheduled()) { binding.footerDate.text = conversationMessage.computedProperties.formattedDate.value } else { - var date = dateString + var dateLabel = conversationMessage.computedProperties.formattedDate.value if (conversationContext.displayMode != ConversationItemDisplayMode.Detailed && record is MmsMessageRecord && record.isEditMessage()) { - date = if (conversationMessage.computedProperties.formattedDate.isNow) { + dateLabel = if (conversationMessage.computedProperties.formattedDate.isNow) { getContext().getString(R.string.ConversationItem_edited_now_timestamp_footer) + } else if (conversationMessage.computedProperties.formattedDate.isRelative) { + getContext().getString(R.string.ConversationItem_edited_relative_timestamp_footer, dateLabel) } else { - getContext().getString(R.string.ConversationItem_edited_timestamp_footer, date) + getContext().getString(R.string.ConversationItem_edited_absolute_timestamp_footer, dateLabel) } binding.footerDate.setOnClickListener { @@ -651,7 +654,7 @@ open class V2ConversationItemTextOnlyViewHolder>( } } - binding.footerDate.text = date + binding.footerDate.text = dateLabel } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e83d57aae0..e35574f2b7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -323,10 +323,12 @@ Can\'t download image. You will need to send it again. Can\'t download video. You will need to send it again. - + Edited\u2000Now - - Edited\u2000%1$s + + Edited\u2000%1$s + + Edited\u2000%1$s Join call