From b9081dc9422bdee1e1f18f6a59d0c1d6579acc47 Mon Sep 17 00:00:00 2001 From: Lucio Maciel Date: Tue, 27 Jul 2021 19:52:28 -0300 Subject: [PATCH] Update message collapsing criteria --- .../securesms/conversation/ConversationItem.java | 6 +++--- .../org/thoughtcrime/securesms/util/DateUtils.java | 11 ++++++----- .../org/thoughtcrime/securesms/util/ViewUtil.java | 1 + 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 6e47226c967..421bc07d14e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -1234,7 +1234,7 @@ private void setFooter(@NonNull MessageRecord current, @NonNull Optional 0 || !current.isSecure() || current.isPending() || current.isPendingInsecureSmsFallback() || current.isFailed() || current.isRateLimited() || differentTimestamps || isEndOfMessageCluster(current, next, isGroupThread)) @@ -1428,10 +1428,10 @@ private boolean isStartOfMessageCluster(@NonNull MessageRecord current, @NonNull private boolean isEndOfMessageCluster(@NonNull MessageRecord current, @NonNull Optional next, boolean isGroupThread) { if (isGroupThread) { return !next.isPresent() || next.get().isUpdate() || !DateUtils.isSameDay(current.getTimestamp(), next.get().getTimestamp()) || - !current.getRecipient().equals(next.get().getRecipient()); + !current.getRecipient().equals(next.get().getRecipient()) || !current.getReactions().isEmpty(); } else { return !next.isPresent() || next.get().isUpdate() || !DateUtils.isSameDay(current.getTimestamp(), next.get().getTimestamp()) || - current.isOutgoing() != next.get().isOutgoing(); + current.isOutgoing() != next.get().isOutgoing() || !current.getReactions().isEmpty(); } } 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 53802925acc..b285e257a27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java @@ -40,9 +40,10 @@ public class DateUtils extends android.text.format.DateUtils { @SuppressWarnings("unused") - private static final String TAG = Log.tag(DateUtils.class); - private static final ThreadLocal DATE_FORMAT = new ThreadLocal<>(); - private static final ThreadLocal BRIEF_EXACT_FORMAT = new ThreadLocal<>(); + private static final String TAG = Log.tag(DateUtils.class); + private static final ThreadLocal DATE_FORMAT = new ThreadLocal<>(); + private static final ThreadLocal BRIEF_EXACT_FORMAT = new ThreadLocal<>(); + private static final long MAX_RELATIVE_TIMESTAMP = TimeUnit.MINUTES.toMillis(3); private static boolean isWithin(final long millis, final long span, final TimeUnit unit) { return System.currentTimeMillis() - millis <= unit.toMillis(span); @@ -172,8 +173,8 @@ public static boolean isSameDay(long t1, long t2) { return d1.equals(d2); } - public static boolean isSameExtendedRelativeTimestamp(@NonNull Context context, @NonNull Locale locale, long t1, long t2) { - return getExtendedRelativeTimeSpanString(context, locale, t1).equals(getExtendedRelativeTimeSpanString(context, locale, t2)); + public static boolean isSameExtendedRelativeTimestamp(long second, long first) { + return second - first < MAX_RELATIVE_TIMESTAMP; } private static String getLocalizedPattern(String template, Locale locale) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java index ff2c7645af3..14727bef896 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.Paint; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater;