package org.thoughtcrime.securesms; import android.net.Uri; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.Observer; import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState; import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.conversation.ConversationMessage; import org.thoughtcrime.securesms.conversation.colors.Colorizable; import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart; import org.thoughtcrime.securesms.conversation.mutiselect.Multiselectable; import org.thoughtcrime.securesms.database.model.InMemoryMessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange; import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.stickers.StickerLocator; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.Set; public interface BindableConversationItem extends Unbindable, GiphyMp4Playable, Colorizable, Multiselectable { void bind(@NonNull LifecycleOwner lifecycleOwner, @NonNull ConversationMessage messageRecord, @NonNull Optional previousMessageRecord, @NonNull Optional nextMessageRecord, @NonNull GlideRequests glideRequests, @NonNull Locale locale, @NonNull Set batchSelected, @NonNull Recipient recipients, @Nullable String searchQuery, boolean pulseMention, boolean hasWallpaper, boolean isMessageRequestAccepted, boolean canPlayInline, @NonNull Colorizer colorizer, boolean isCondensedMode); @NonNull ConversationMessage getConversationMessage(); void setEventListener(@Nullable EventListener listener); default void updateTimestamps() { // Intentionally Blank. } default void updateContactNameColor() { // Intentionally Blank. } default void updateSelectedState() { // Intentionally Blank. } interface EventListener { void onQuoteClicked(MmsMessageRecord messageRecord); void onLinkPreviewClicked(@NonNull LinkPreview linkPreview); void onQuotedIndicatorClicked(@NonNull MessageRecord messageRecord); void onMoreTextClicked(@NonNull RecipientId conversationRecipientId, long messageId, boolean isMms); void onStickerClicked(@NonNull StickerLocator stickerLocator); void onViewOnceMessageClicked(@NonNull MmsMessageRecord messageRecord); void onSharedContactDetailsClicked(@NonNull Contact contact, @NonNull View avatarTransitionView); void onAddToContactsClicked(@NonNull Contact contact); void onMessageSharedContactClicked(@NonNull List choices); void onInviteSharedContactClicked(@NonNull List choices); void onReactionClicked(@NonNull MultiselectPart multiselectPart, long messageId, boolean isMms); void onGroupMemberClicked(@NonNull RecipientId recipientId, @NonNull GroupId groupId); void onMessageWithErrorClicked(@NonNull MessageRecord messageRecord); void onMessageWithRecaptchaNeededClicked(@NonNull MessageRecord messageRecord); void onIncomingIdentityMismatchClicked(@NonNull RecipientId recipientId); void onRegisterVoiceNoteCallbacks(@NonNull Observer onPlaybackStartObserver); void onUnregisterVoiceNoteCallbacks(@NonNull Observer onPlaybackStartObserver); void onVoiceNotePause(@NonNull Uri uri); void onVoiceNotePlay(@NonNull Uri uri, long messageId, double position); void onVoiceNoteSeekTo(@NonNull Uri uri, double position); void onVoiceNotePlaybackSpeedChanged(@NonNull Uri uri, float speed); void onGroupMigrationLearnMoreClicked(@NonNull GroupMigrationMembershipChange membershipChange); void onChatSessionRefreshLearnMoreClicked(); void onBadDecryptLearnMoreClicked(@NonNull RecipientId author); void onSafetyNumberLearnMoreClicked(@NonNull Recipient recipient); void onJoinGroupCallClicked(); void onInviteFriendsToGroupClicked(@NonNull GroupId.V2 groupId); void onEnableCallNotificationsClicked(); void onPlayInlineContent(ConversationMessage conversationMessage); void onInMemoryMessageClicked(@NonNull InMemoryMessageRecord messageRecord); void onViewGroupDescriptionChange(@Nullable GroupId groupId, @NonNull String description, boolean isMessageRequestAccepted); void onChangeNumberUpdateContact(@NonNull Recipient recipient); void onCallToAction(@NonNull String action); void onDonateClicked(); void onBlockJoinRequest(@NonNull Recipient recipient); void onRecipientNameClicked(@NonNull RecipientId target); /** @return true if handled, false if you want to let the normal url handling continue */ boolean onUrlClicked(@NonNull String url); void onViewGiftBadgeClicked(@NonNull MessageRecord messageRecord); void onGiftBadgeRevealed(@NonNull MessageRecord messageRecord); } }