|
|
|
@ -128,6 +128,7 @@ import org.thoughtcrime.securesms.util.UrlClickHandler;
|
|
|
|
|
import org.thoughtcrime.securesms.util.Util;
|
|
|
|
|
import org.thoughtcrime.securesms.util.VibrateUtil;
|
|
|
|
|
import org.thoughtcrime.securesms.util.ViewUtil;
|
|
|
|
|
import org.thoughtcrime.securesms.util.views.NullableStub;
|
|
|
|
|
import org.thoughtcrime.securesms.util.views.Stub;
|
|
|
|
|
import org.thoughtcrime.securesms.video.exo.AttachmentMediaSourceFactory;
|
|
|
|
|
import org.whispersystems.libsignal.util.guava.Optional;
|
|
|
|
@ -184,19 +185,19 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
private AlertView alertView;
|
|
|
|
|
protected ReactionsConversationView reactionsView;
|
|
|
|
|
|
|
|
|
|
private @NonNull Set<ConversationMessage> batchSelected = new HashSet<>();
|
|
|
|
|
private @NonNull Outliner outliner = new Outliner();
|
|
|
|
|
private @NonNull Outliner pulseOutliner = new Outliner();
|
|
|
|
|
private @NonNull List<Outliner> outliners = new ArrayList<>(2);
|
|
|
|
|
private LiveRecipient conversationRecipient;
|
|
|
|
|
private Stub<ConversationItemThumbnail> mediaThumbnailStub;
|
|
|
|
|
private Stub<AudioView> audioViewStub;
|
|
|
|
|
private Stub<DocumentView> documentViewStub;
|
|
|
|
|
private Stub<SharedContactView> sharedContactStub;
|
|
|
|
|
private Stub<LinkPreviewView> linkPreviewStub;
|
|
|
|
|
private Stub<BorderlessImageView> stickerStub;
|
|
|
|
|
private Stub<ViewOnceMessageView> revealableStub;
|
|
|
|
|
private @Nullable EventListener eventListener;
|
|
|
|
|
private @NonNull Set<ConversationMessage> batchSelected = new HashSet<>();
|
|
|
|
|
private @NonNull Outliner outliner = new Outliner();
|
|
|
|
|
private @NonNull Outliner pulseOutliner = new Outliner();
|
|
|
|
|
private @NonNull List<Outliner> outliners = new ArrayList<>(2);
|
|
|
|
|
private LiveRecipient conversationRecipient;
|
|
|
|
|
private NullableStub<ConversationItemThumbnail> mediaThumbnailStub;
|
|
|
|
|
private Stub<AudioView> audioViewStub;
|
|
|
|
|
private Stub<DocumentView> documentViewStub;
|
|
|
|
|
private Stub<SharedContactView> sharedContactStub;
|
|
|
|
|
private Stub<LinkPreviewView> linkPreviewStub;
|
|
|
|
|
private Stub<BorderlessImageView> stickerStub;
|
|
|
|
|
private Stub<ViewOnceMessageView> revealableStub;
|
|
|
|
|
private @Nullable EventListener eventListener;
|
|
|
|
|
|
|
|
|
|
private int defaultBubbleColor;
|
|
|
|
|
private int defaultBubbleColorForWallpaper;
|
|
|
|
@ -243,26 +244,26 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
|
|
|
|
|
this.backgroundDrawable = new ClipProjectionDrawable(Objects.requireNonNull(ContextCompat.getDrawable(getContext(),
|
|
|
|
|
R.drawable.conversation_item_background)));
|
|
|
|
|
this.bodyText = findViewById(R.id.conversation_item_body);
|
|
|
|
|
this.footer = findViewById(R.id.conversation_item_footer);
|
|
|
|
|
this.stickerFooter = findViewById(R.id.conversation_item_sticker_footer);
|
|
|
|
|
this.groupSender = findViewById(R.id.group_message_sender);
|
|
|
|
|
this.alertView = findViewById(R.id.indicators_parent);
|
|
|
|
|
this.contactPhoto = findViewById(R.id.contact_photo);
|
|
|
|
|
this.contactPhotoHolder = findViewById(R.id.contact_photo_container);
|
|
|
|
|
this.bodyBubble = findViewById(R.id.body_bubble);
|
|
|
|
|
this.mediaThumbnailStub = new Stub<>(findViewById(R.id.image_view_stub));
|
|
|
|
|
this.audioViewStub = new Stub<>(findViewById(R.id.audio_view_stub));
|
|
|
|
|
this.documentViewStub = new Stub<>(findViewById(R.id.document_view_stub));
|
|
|
|
|
this.sharedContactStub = new Stub<>(findViewById(R.id.shared_contact_view_stub));
|
|
|
|
|
this.linkPreviewStub = new Stub<>(findViewById(R.id.link_preview_stub));
|
|
|
|
|
this.stickerStub = new Stub<>(findViewById(R.id.sticker_view_stub));
|
|
|
|
|
this.revealableStub = new Stub<>(findViewById(R.id.revealable_view_stub));
|
|
|
|
|
this.groupSenderHolder = findViewById(R.id.group_sender_holder);
|
|
|
|
|
this.quoteView = findViewById(R.id.quote_view);
|
|
|
|
|
this.reply = findViewById(R.id.reply_icon_wrapper);
|
|
|
|
|
this.replyIcon = findViewById(R.id.reply_icon);
|
|
|
|
|
this.reactionsView = findViewById(R.id.reactions_view);
|
|
|
|
|
this.bodyText = findViewById(R.id.conversation_item_body);
|
|
|
|
|
this.footer = findViewById(R.id.conversation_item_footer);
|
|
|
|
|
this.stickerFooter = findViewById(R.id.conversation_item_sticker_footer);
|
|
|
|
|
this.groupSender = findViewById(R.id.group_message_sender);
|
|
|
|
|
this.alertView = findViewById(R.id.indicators_parent);
|
|
|
|
|
this.contactPhoto = findViewById(R.id.contact_photo);
|
|
|
|
|
this.contactPhotoHolder = findViewById(R.id.contact_photo_container);
|
|
|
|
|
this.bodyBubble = findViewById(R.id.body_bubble);
|
|
|
|
|
this.mediaThumbnailStub = new NullableStub<>(findViewById(R.id.image_view_stub));
|
|
|
|
|
this.audioViewStub = new Stub<>(findViewById(R.id.audio_view_stub));
|
|
|
|
|
this.documentViewStub = new Stub<>(findViewById(R.id.document_view_stub));
|
|
|
|
|
this.sharedContactStub = new Stub<>(findViewById(R.id.shared_contact_view_stub));
|
|
|
|
|
this.linkPreviewStub = new Stub<>(findViewById(R.id.link_preview_stub));
|
|
|
|
|
this.stickerStub = new Stub<>(findViewById(R.id.sticker_view_stub));
|
|
|
|
|
this.revealableStub = new Stub<>(findViewById(R.id.revealable_view_stub));
|
|
|
|
|
this.groupSenderHolder = findViewById(R.id.group_sender_holder);
|
|
|
|
|
this.quoteView = findViewById(R.id.quote_view);
|
|
|
|
|
this.reply = findViewById(R.id.reply_icon_wrapper);
|
|
|
|
|
this.replyIcon = findViewById(R.id.reply_icon);
|
|
|
|
|
this.reactionsView = findViewById(R.id.reactions_view);
|
|
|
|
|
|
|
|
|
|
setOnClickListener(new ClickListener(null));
|
|
|
|
|
|
|
|
|
@ -425,7 +426,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
if (hasAudio(messageRecord)) {
|
|
|
|
|
availableWidth = audioViewStub.get().getMeasuredWidth() + ViewUtil.getLeftMargin(audioViewStub.get()) + ViewUtil.getRightMargin(audioViewStub.get());
|
|
|
|
|
} else if (!isViewOnceMessage(messageRecord) && (hasThumbnail(messageRecord) || hasBigImageLinkPreview(messageRecord))) {
|
|
|
|
|
availableWidth = mediaThumbnailStub.get().getMeasuredWidth();
|
|
|
|
|
availableWidth = mediaThumbnailStub.require().getMeasuredWidth();
|
|
|
|
|
} else {
|
|
|
|
|
availableWidth = bodyBubble.getMeasuredWidth() - bodyBubble.getPaddingLeft() - bodyBubble.getPaddingRight();
|
|
|
|
|
}
|
|
|
|
@ -507,7 +508,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
bodyBubble.setOutliners(outliners);
|
|
|
|
|
|
|
|
|
|
if (mediaThumbnailStub.resolved()) {
|
|
|
|
|
mediaThumbnailStub.get().setPulseOutliner(pulseOutliner);
|
|
|
|
|
mediaThumbnailStub.require().setPulseOutliner(pulseOutliner);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (audioViewStub.resolved()) {
|
|
|
|
@ -550,9 +551,9 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mediaThumbnailStub.resolved()) {
|
|
|
|
|
mediaThumbnailStub.get().setFocusable(!shouldInterceptClicks(conversationMessage.getMessageRecord()) && batchSelected.isEmpty());
|
|
|
|
|
mediaThumbnailStub.get().setClickable(!shouldInterceptClicks(conversationMessage.getMessageRecord()) && batchSelected.isEmpty());
|
|
|
|
|
mediaThumbnailStub.get().setLongClickable(batchSelected.isEmpty());
|
|
|
|
|
mediaThumbnailStub.require().setFocusable(!shouldInterceptClicks(conversationMessage.getMessageRecord()) && batchSelected.isEmpty());
|
|
|
|
|
mediaThumbnailStub.require().setClickable(!shouldInterceptClicks(conversationMessage.getMessageRecord()) && batchSelected.isEmpty());
|
|
|
|
|
mediaThumbnailStub.require().setLongClickable(batchSelected.isEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (audioViewStub.resolved()) {
|
|
|
|
@ -574,7 +575,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
bodyBubble.invalidate();
|
|
|
|
|
|
|
|
|
|
if (mediaThumbnailStub.resolved()) {
|
|
|
|
|
mediaThumbnailStub.get().invalidate();
|
|
|
|
|
mediaThumbnailStub.require().invalidate();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
pulseOutlinerAlphaAnimator.start();
|
|
|
|
@ -752,7 +753,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
|
|
|
|
|
if (isViewOnceMessage(messageRecord) && !messageRecord.isRemoteDelete()) {
|
|
|
|
|
revealableStub.get().setVisibility(VISIBLE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().setVisibility(View.GONE);
|
|
|
|
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().setVisibility(GONE);
|
|
|
|
@ -767,7 +768,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
} else if (hasSharedContact(messageRecord)) {
|
|
|
|
|
sharedContactStub.get().setVisibility(VISIBLE);
|
|
|
|
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().setVisibility(View.GONE);
|
|
|
|
|
if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (linkPreviewStub.resolved()) linkPreviewStub.get().setVisibility(GONE);
|
|
|
|
|
if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE);
|
|
|
|
@ -786,7 +787,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
} else if (hasLinkPreview(messageRecord) && messageRequestAccepted) {
|
|
|
|
|
linkPreviewStub.get().setVisibility(View.VISIBLE);
|
|
|
|
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().setVisibility(View.GONE);
|
|
|
|
|
if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().setVisibility(GONE);
|
|
|
|
|
if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE);
|
|
|
|
@ -796,12 +797,12 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
LinkPreview linkPreview = ((MmsMessageRecord) messageRecord).getLinkPreviews().get(0);
|
|
|
|
|
|
|
|
|
|
if (hasBigImageLinkPreview(messageRecord)) {
|
|
|
|
|
mediaThumbnailStub.get().setVisibility(VISIBLE);
|
|
|
|
|
mediaThumbnailStub.get().setMinimumThumbnailWidth(readDimen(R.dimen.media_bubble_min_width_with_content));
|
|
|
|
|
mediaThumbnailStub.get().setImageResource(glideRequests, Collections.singletonList(new ImageSlide(context, linkPreview.getThumbnail().get())), showControls, false);
|
|
|
|
|
mediaThumbnailStub.get().setThumbnailClickListener(new LinkPreviewThumbnailClickListener());
|
|
|
|
|
mediaThumbnailStub.get().setDownloadClickListener(downloadClickListener);
|
|
|
|
|
mediaThumbnailStub.get().setOnLongClickListener(passthroughClickListener);
|
|
|
|
|
mediaThumbnailStub.require().setVisibility(VISIBLE);
|
|
|
|
|
mediaThumbnailStub.require().setMinimumThumbnailWidth(readDimen(R.dimen.media_bubble_min_width_with_content));
|
|
|
|
|
mediaThumbnailStub.require().setImageResource(glideRequests, Collections.singletonList(new ImageSlide(context, linkPreview.getThumbnail().get())), showControls, false);
|
|
|
|
|
mediaThumbnailStub.require().setThumbnailClickListener(new LinkPreviewThumbnailClickListener());
|
|
|
|
|
mediaThumbnailStub.require().setDownloadClickListener(downloadClickListener);
|
|
|
|
|
mediaThumbnailStub.require().setOnLongClickListener(passthroughClickListener);
|
|
|
|
|
|
|
|
|
|
linkPreviewStub.get().setLinkPreview(glideRequests, linkPreview, false);
|
|
|
|
|
|
|
|
|
@ -825,7 +826,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
footer.setVisibility(VISIBLE);
|
|
|
|
|
} else if (hasAudio(messageRecord)) {
|
|
|
|
|
audioViewStub.get().setVisibility(View.VISIBLE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().setVisibility(View.GONE);
|
|
|
|
|
if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().setVisibility(GONE);
|
|
|
|
|
if (linkPreviewStub.resolved()) linkPreviewStub.get().setVisibility(GONE);
|
|
|
|
@ -850,7 +851,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
footer.setVisibility(VISIBLE);
|
|
|
|
|
} else if (hasDocument(messageRecord)) {
|
|
|
|
|
documentViewStub.get().setVisibility(View.VISIBLE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().setVisibility(View.GONE);
|
|
|
|
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().setVisibility(GONE);
|
|
|
|
|
if (linkPreviewStub.resolved()) linkPreviewStub.get().setVisibility(GONE);
|
|
|
|
@ -871,7 +872,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
bodyBubble.setBackgroundColor(Color.TRANSPARENT);
|
|
|
|
|
|
|
|
|
|
stickerStub.get().setVisibility(View.VISIBLE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().setVisibility(View.GONE);
|
|
|
|
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().setVisibility(GONE);
|
|
|
|
@ -897,7 +898,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
|
|
|
|
|
footer.setVisibility(VISIBLE);
|
|
|
|
|
} else if (hasThumbnail(messageRecord)) {
|
|
|
|
|
mediaThumbnailStub.get().setVisibility(View.VISIBLE);
|
|
|
|
|
mediaThumbnailStub.require().setVisibility(View.VISIBLE);
|
|
|
|
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().setVisibility(GONE);
|
|
|
|
@ -906,25 +907,25 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
if (revealableStub.resolved()) revealableStub.get().setVisibility(View.GONE);
|
|
|
|
|
|
|
|
|
|
List<Slide> thumbnailSlides = ((MmsMessageRecord) messageRecord).getSlideDeck().getThumbnailSlides();
|
|
|
|
|
mediaThumbnailStub.get().setMinimumThumbnailWidth(readDimen(isCaptionlessMms(messageRecord) ? R.dimen.media_bubble_min_width_solo
|
|
|
|
|
mediaThumbnailStub.require().setMinimumThumbnailWidth(readDimen(isCaptionlessMms(messageRecord) ? R.dimen.media_bubble_min_width_solo
|
|
|
|
|
: R.dimen.media_bubble_min_width_with_content));
|
|
|
|
|
mediaThumbnailStub.get().setImageResource(glideRequests,
|
|
|
|
|
mediaThumbnailStub.require().setImageResource(glideRequests,
|
|
|
|
|
thumbnailSlides,
|
|
|
|
|
showControls,
|
|
|
|
|
false);
|
|
|
|
|
mediaThumbnailStub.get().setThumbnailClickListener(new ThumbnailClickListener());
|
|
|
|
|
mediaThumbnailStub.get().setDownloadClickListener(downloadClickListener);
|
|
|
|
|
mediaThumbnailStub.get().setOnLongClickListener(passthroughClickListener);
|
|
|
|
|
mediaThumbnailStub.get().setOnClickListener(passthroughClickListener);
|
|
|
|
|
mediaThumbnailStub.get().showShade(TextUtils.isEmpty(messageRecord.getDisplayBody(getContext())) && !hasExtraText(messageRecord));
|
|
|
|
|
mediaThumbnailStub.require().setThumbnailClickListener(new ThumbnailClickListener());
|
|
|
|
|
mediaThumbnailStub.require().setDownloadClickListener(downloadClickListener);
|
|
|
|
|
mediaThumbnailStub.require().setOnLongClickListener(passthroughClickListener);
|
|
|
|
|
mediaThumbnailStub.require().setOnClickListener(passthroughClickListener);
|
|
|
|
|
mediaThumbnailStub.require().showShade(TextUtils.isEmpty(messageRecord.getDisplayBody(getContext())) && !hasExtraText(messageRecord));
|
|
|
|
|
|
|
|
|
|
if (!messageRecord.isOutgoing()) {
|
|
|
|
|
mediaThumbnailStub.get().setConversationColor(getDefaultBubbleColor(hasWallpaper));
|
|
|
|
|
mediaThumbnailStub.require().setConversationColor(getDefaultBubbleColor(hasWallpaper));
|
|
|
|
|
} else {
|
|
|
|
|
mediaThumbnailStub.get().setConversationColor(Color.TRANSPARENT);
|
|
|
|
|
mediaThumbnailStub.require().setConversationColor(Color.TRANSPARENT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mediaThumbnailStub.get().setBorderless(false);
|
|
|
|
|
mediaThumbnailStub.require().setBorderless(false);
|
|
|
|
|
|
|
|
|
|
setThumbnailCorners(messageRecord, previousRecord, nextRecord, isGroupThread);
|
|
|
|
|
|
|
|
|
@ -949,7 +950,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.require().setVisibility(View.GONE);
|
|
|
|
|
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().setVisibility(GONE);
|
|
|
|
@ -1025,9 +1026,9 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ViewUtil.isRtl(this)) {
|
|
|
|
|
mediaThumbnailStub.get().setCorners(topEnd, topStart, bottomStart, bottomEnd);
|
|
|
|
|
mediaThumbnailStub.require().setCorners(topEnd, topStart, bottomStart, bottomEnd);
|
|
|
|
|
} else {
|
|
|
|
|
mediaThumbnailStub.get().setCorners(topStart, topEnd, bottomEnd, bottomStart);
|
|
|
|
|
mediaThumbnailStub.require().setCorners(topStart, topEnd, bottomEnd, bottomStart);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1161,7 +1162,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mediaThumbnailStub.resolved()) {
|
|
|
|
|
ViewUtil.setTopMargin(mediaThumbnailStub.get(), readDimen(R.dimen.message_bubble_top_padding));
|
|
|
|
|
ViewUtil.setTopMargin(mediaThumbnailStub.require(), readDimen(R.dimen.message_bubble_top_padding));
|
|
|
|
|
} else if (startOfCluster && !current.isOutgoing() && groupThread) {
|
|
|
|
|
ViewUtil.setTopMargin(quoteView, readDimen(R.dimen.message_bubble_quote_negative_margin));
|
|
|
|
|
} else {
|
|
|
|
@ -1177,7 +1178,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mediaThumbnailStub.resolved()) {
|
|
|
|
|
ViewUtil.setTopMargin(mediaThumbnailStub.get(), 0);
|
|
|
|
|
ViewUtil.setTopMargin(mediaThumbnailStub.require(), 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1219,7 +1220,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
footer.setVisibility(GONE);
|
|
|
|
|
stickerFooter.setVisibility(GONE);
|
|
|
|
|
if (sharedContactStub.resolved()) sharedContactStub.get().getFooter().setVisibility(GONE);
|
|
|
|
|
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.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());
|
|
|
|
|
|
|
|
|
@ -1260,7 +1261,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
} else if (hasSharedContact(messageRecord) && TextUtils.isEmpty(messageRecord.getDisplayBody(getContext()))) {
|
|
|
|
|
return sharedContactStub.get().getFooter();
|
|
|
|
|
} else if (hasOnlyThumbnail(messageRecord) && TextUtils.isEmpty(messageRecord.getDisplayBody(getContext()))) {
|
|
|
|
|
return mediaThumbnailStub.get().getFooter();
|
|
|
|
|
return mediaThumbnailStub.require().getFooter();
|
|
|
|
|
} else {
|
|
|
|
|
return footer;
|
|
|
|
|
}
|
|
|
|
@ -1494,7 +1495,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
@Override
|
|
|
|
|
public void showProjectionArea() {
|
|
|
|
|
if (mediaThumbnailStub != null && mediaThumbnailStub.resolved()) {
|
|
|
|
|
mediaThumbnailStub.get().showThumbnailView();
|
|
|
|
|
mediaThumbnailStub.require().showThumbnailView();
|
|
|
|
|
bodyBubble.setVideoPlayerProjection(null);
|
|
|
|
|
updateSelectedBackgroundDrawableProjections();
|
|
|
|
|
}
|
|
|
|
@ -1503,9 +1504,9 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
@Override
|
|
|
|
|
public void hideProjectionArea() {
|
|
|
|
|
if (mediaThumbnailStub != null && mediaThumbnailStub.resolved()) {
|
|
|
|
|
mediaThumbnailStub.get().hideThumbnailView();
|
|
|
|
|
mediaThumbnailStub.get().getDrawingRect(thumbnailMaskingRect);
|
|
|
|
|
bodyBubble.setVideoPlayerProjection(Projection.relativeToViewWithCommonRoot(mediaThumbnailStub.get(), bodyBubble, null));
|
|
|
|
|
mediaThumbnailStub.require().hideThumbnailView();
|
|
|
|
|
mediaThumbnailStub.require().getDrawingRect(thumbnailMaskingRect);
|
|
|
|
|
bodyBubble.setVideoPlayerProjection(Projection.relativeToViewWithCommonRoot(mediaThumbnailStub.require(), bodyBubble, null));
|
|
|
|
|
updateSelectedBackgroundDrawableProjections();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1532,27 +1533,19 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public @NonNull Projection getProjection(@NonNull ViewGroup recyclerView) {
|
|
|
|
|
return Projection.relativeToParent(recyclerView, mediaThumbnailStub.get(), mediaThumbnailStub.get().getCorners())
|
|
|
|
|
.translateX(bodyBubble.getTranslationX());
|
|
|
|
|
public @NonNull Projection getGiphyMp4PlayableProjection(@NonNull ViewGroup recyclerView) {
|
|
|
|
|
if (mediaThumbnailStub != null && mediaThumbnailStub.isResolvable()) {
|
|
|
|
|
return Projection.relativeToParent(recyclerView, mediaThumbnailStub.require(), mediaThumbnailStub.require().getCorners())
|
|
|
|
|
.translateX(bodyBubble.getTranslationX());
|
|
|
|
|
} else {
|
|
|
|
|
return Projection.relativeToParent(recyclerView, bodyBubble, bodyBubbleCorners)
|
|
|
|
|
.translateX(bodyBubble.getTranslationX());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean canPlayContent() {
|
|
|
|
|
return mediaThumbnailStub != null && canPlayContent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public @NonNull Rect getThumbnailMaskingRect(@NonNull ViewGroup parent) {
|
|
|
|
|
Rect rect = new Rect();
|
|
|
|
|
rect.set(thumbnailMaskingRect);
|
|
|
|
|
|
|
|
|
|
parent.offsetDescendantRectToMyCoords(mediaThumbnailStub.get(), rect);
|
|
|
|
|
|
|
|
|
|
return rect;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public @NonNull Projection.Corners getThumbnailCorners() {
|
|
|
|
|
return mediaThumbnailStub.get().getCorners();
|
|
|
|
|
return mediaThumbnailStub != null && mediaThumbnailStub.isResolvable() && canPlayContent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|