From 138b7ea7966df66a1f6377859b08f2311637143b Mon Sep 17 00:00:00 2001 From: Lucio Maciel Date: Wed, 28 Jul 2021 12:39:50 -0300 Subject: [PATCH] Update message bubble and date header timestamps. --- .../components/ConversationItemFooter.java | 2 +- .../conversation/ConversationAdapter.java | 2 +- .../securesms/util/DateUtils.java | 30 ++++++++++++++++--- 3 files changed, 28 insertions(+), 6 deletions(-) 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 bbf090539b..755de69df2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -307,7 +307,7 @@ public class ConversationItemFooter extends ConstraintLayout { } else if (messageRecord.isRateLimited()) { dateView.setText(R.string.ConversationItem_send_paused); } else { - dateView.setText(DateUtils.getExtendedRelativeTimeSpanString(getContext(), locale, messageRecord.getTimestamp())); + dateView.setText(DateUtils.getSimpleRelativeTimeSpanString(getContext(), locale, messageRecord.getTimestamp())); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java index 6b08f5bf96..04e8c13f29 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java @@ -352,7 +352,7 @@ public class ConversationAdapter Context context = viewHolder.itemView.getContext(); ConversationMessage conversationMessage = Objects.requireNonNull(getItem(position)); - viewHolder.setText(DateUtils.getRelativeDate(viewHolder.itemView.getContext(), locale, conversationMessage.getMessageRecord().getDateReceived())); + viewHolder.setText(DateUtils.getConversationDateHeaderString(viewHolder.itemView.getContext(), locale, conversationMessage.getMessageRecord().getDateReceived())); if (type == HEADER_TYPE_POPOVER_DATE) { if (hasWallpaper) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java b/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java index b285e257a2..0e3a8785e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java @@ -103,6 +103,18 @@ public class DateUtils extends android.text.format.DateUtils { } } + public static String getSimpleRelativeTimeSpanString(final Context context, final Locale locale, final long timestamp) { + if (isWithin(timestamp, 1, TimeUnit.MINUTES)) { + return context.getString(R.string.DateUtils_just_now); + } else if (isWithin(timestamp, 1, TimeUnit.HOURS)) { + int mins = (int) TimeUnit.MINUTES.convert(System.currentTimeMillis() - timestamp, TimeUnit.MILLISECONDS); + return context.getResources().getString(R.string.DateUtils_minutes_ago, mins); + } else { + String format = DateFormat.is24HourFormat(context) ? "HH:mm" : "hh:mm a"; + return getFormattedDateTime(timestamp, format, locale); + } + } + public static String getTimeString(final Context c, final Locale locale, final long timestamp) { StringBuilder format = new StringBuilder(); @@ -145,19 +157,29 @@ public class DateUtils extends android.text.format.DateUtils { return new SimpleDateFormat(dateFormatPattern, locale); } - public static String getRelativeDate(@NonNull Context context, - @NonNull Locale locale, - long timestamp) + public static String getConversationDateHeaderString(@NonNull Context context, + @NonNull Locale locale, + long timestamp) { if (isToday(timestamp)) { return context.getString(R.string.DateUtils_today); } else if (isYesterday(timestamp)) { return context.getString(R.string.DateUtils_yesterday); + } else if (isWithin(timestamp, 182, TimeUnit.DAYS)) { + return formatDateWithDayOfWeek(locale, timestamp); } else { - return formatDate(locale, timestamp); + return formatDateWithYear(locale, timestamp); } } + public static String formatDateWithDayOfWeek(@NonNull Locale locale, long timestamp) { + return getFormattedDateTime(timestamp, "EEE, MMM d", locale); + } + + public static String formatDateWithYear(@NonNull Locale locale, long timestamp) { + return getFormattedDateTime(timestamp, "MMM d, yyyy", locale); + } + public static String formatDate(@NonNull Locale locale, long timestamp) { return getFormattedDateTime(timestamp, "EEE, MMM d, yyyy", locale); }