Update view-once messages

This commit is contained in:
Lucio Maciel
2021-07-29 16:46:32 -03:00
committed by GitHub
parent 9398716848
commit c0c4092cd9
11 changed files with 140 additions and 58 deletions

View File

@@ -479,7 +479,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
footer.setIconColor(colorizer.getOutgoingFooterIconColor(context));
footer.setRevealDotColor(colorizer.getOutgoingFooterIconColor(context));
footer.setOnlyShowSendingStatus(false, messageRecord);
} else if (messageRecord.isRemoteDelete() || (isViewOnceMessage(messageRecord) && ViewOnceUtil.isViewed((MmsMessageRecord) messageRecord))) {
} else if (messageRecord.isRemoteDelete()) {
if (hasWallpaper) {
bodyBubble.getBackground().setColorFilter(ContextCompat.getColor(context, R.color.wallpaper_bubble_color), PorterDuff.Mode.SRC_IN);
} else {
@@ -597,8 +597,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
if (hasWallpaper) {
return false;
} else {
boolean isIncomingViewedOnce = !messageRecord.isOutgoing() && isViewOnceMessage(messageRecord) && ViewOnceUtil.isViewed((MmsMessageRecord) messageRecord);
return isIncomingViewedOnce || messageRecord.isRemoteDelete();
return messageRecord.isRemoteDelete();
}
}
@@ -765,10 +764,12 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
if (linkPreviewStub.resolved()) linkPreviewStub.get().setVisibility(GONE);
if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE);
revealableStub.get().setMessage((MmsMessageRecord) messageRecord);
revealableStub.get().setMessage((MmsMessageRecord) messageRecord, hasWallpaper);
revealableStub.get().setOnClickListener(revealableClickListener);
revealableStub.get().setOnLongClickListener(passthroughClickListener);
updateRevealableMargins(messageRecord, previousRecord, nextRecord, isGroupThread);
footer.setVisibility(VISIBLE);
} else if (hasSharedContact(messageRecord)) {
sharedContactStub.get().setVisibility(VISIBLE);
@@ -976,6 +977,24 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
}
}
private void updateRevealableMargins(MessageRecord messageRecord, Optional<MessageRecord> previous, Optional<MessageRecord> next, boolean isGroupThread) {
int bigMargin = readDimen(R.dimen.message_bubble_revealable_padding);
int smallMargin = readDimen(R.dimen.message_bubble_top_padding);
//noinspection ConstantConditions
if (messageRecord.isOutgoing() || !isStartOfMessageCluster(messageRecord, previous, isGroupThread)) {
ViewUtil.setTopMargin(revealableStub.get(), bigMargin);
} else {
ViewUtil.setTopMargin(revealableStub.get(), smallMargin);
}
if (isFooterVisible(messageRecord, next, isGroupThread)) {
ViewUtil.setBottomMargin(revealableStub.get(), smallMargin);
} else {
ViewUtil.setBottomMargin(revealableStub.get(), bigMargin);
}
}
private void setThumbnailCorners(@NonNull MessageRecord current,
@NonNull Optional<MessageRecord> previous,
@NonNull Optional<MessageRecord> next,
@@ -1234,10 +1253,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(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))
if (isFooterVisible(current, next, isGroupThread))
{
ConversationItemFooter activeFooter = getActiveFooter(current);
activeFooter.setVisibility(VISIBLE);
@@ -1439,6 +1455,13 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
return isStartOfMessageCluster(current, previous, isGroupThread) && isEndOfMessageCluster(current, next, isGroupThread);
}
private boolean isFooterVisible(@NonNull MessageRecord current, @NonNull Optional<MessageRecord> next, boolean isGroupThread) {
boolean differentTimestamps = next.isPresent() && !DateUtils.isSameExtendedRelativeTimestamp(next.get().getTimestamp(), current.getTimestamp());
return forceFooter(messageRecord) || current.getExpiresIn() > 0 || !current.isSecure() || current.isPending() || current.isPendingInsecureSmsFallback() ||
current.isFailed() || current.isRateLimited() || differentTimestamps || isEndOfMessageCluster(current, next, isGroupThread);
}
private void setMessageSpacing(@NonNull Context context, @NonNull MessageRecord current, @NonNull Optional<MessageRecord> previous, @NonNull Optional<MessageRecord> next, boolean isGroupThread) {
int spacingTop = readDimen(context, R.dimen.conversation_vertical_message_spacing_collapse);
int spacingBottom = spacingTop;