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 6e47226c96..421bc07d14 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 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (sharedContactStub.resolved()) sharedContactStub.get().getFooter().setVisibility(GONE); if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().getFooter().setVisibility(GONE); - boolean differentTimestamps = next.isPresent() && !DateUtils.isSameExtendedRelativeTimestamp(context, locale, next.get().getTimestamp(), current.getTimestamp()); + boolean differentTimestamps = next.isPresent() && !DateUtils.isSameExtendedRelativeTimestamp(next.get().getTimestamp(), current.getTimestamp()); if (forceFooter(messageRecord) || current.getExpiresIn() > 0 || !current.isSecure() || current.isPending() || current.isPendingInsecureSmsFallback() || current.isFailed() || current.isRateLimited() || differentTimestamps || isEndOfMessageCluster(current, next, isGroupThread)) @@ -1428,10 +1428,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo 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 53802925ac..b285e257a2 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 @@ import java.util.concurrent.TimeUnit; 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 class DateUtils extends android.text.format.DateUtils { 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 ff2c7645af..14727bef89 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.app.Activity; 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;