add "jump to original" button to stared messages

This commit is contained in:
adbenitez
2025-02-06 23:43:43 +01:00
parent b692abc235
commit d47196d899
8 changed files with 84 additions and 11 deletions
@@ -25,6 +25,7 @@ public interface BindableConversationItem extends Unbindable {
interface EventListener {
void onQuoteClicked(DcMsg messageRecord);
void onJumpToOriginalClicked(DcMsg messageRecord);
void onShowFullClicked(DcMsg messageRecord);
void onDownloadClicked(DcMsg messageRecord);
void onReactionClicked(DcMsg messageRecord);
@@ -841,20 +841,18 @@ public class ConversationFragment extends MessageSelectorFragment
}
}
@Override
public void onQuoteClicked(DcMsg messageRecord) {
DcMsg quoted = messageRecord.getQuotedMsg();
if (quoted == null) {
Log.i(TAG, "Clicked on a quote whose original message we never had.");
private void jumpToOriginal(DcMsg original) {
if (original == null) {
Log.i(TAG, "Clicked on a quote or jump-to-original whose original message was deleted/non-existing.");
Toast.makeText(getContext(), R.string.ConversationFragment_quoted_message_not_found, Toast.LENGTH_SHORT).show();
return;
}
int foreignChatId = quoted.getChatId();
int foreignChatId = original.getChatId();
if (foreignChatId != 0 && foreignChatId != chatId) {
Intent intent = new Intent(getActivity(), ConversationActivity.class);
intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, foreignChatId);
int start = DcMsg.getMessagePosition(quoted, dcContext);
int start = DcMsg.getMessagePosition(original, dcContext);
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, start);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
((ConversationActivity) getActivity()).hideSoftKeyboard();
@@ -864,10 +862,20 @@ public class ConversationFragment extends MessageSelectorFragment
Log.e(TAG, "Activity was null");
}
} else {
scrollMaybeSmoothToMsgId(quoted.getId());
scrollMaybeSmoothToMsgId(original.getId());
}
}
@Override
public void onJumpToOriginalClicked(DcMsg messageRecord) {
jumpToOriginal(dcContext.getMsg(messageRecord.getOriginalMsgId()));
}
@Override
public void onQuoteClicked(DcMsg messageRecord) {
jumpToOriginal(messageRecord.getQuotedMsg());
}
@Override
public void onShowFullClicked(DcMsg messageRecord) {
Intent intent = new Intent(getActivity(), FullMsgActivity.class);
@@ -100,6 +100,7 @@ public class ConversationItem extends BaseConversationItem
protected ViewGroup bodyBubble;
protected ReactionsConversationView reactionsView;
protected View replyView;
protected View jumptoView;
@Nullable private QuoteView quoteView;
private ConversationItemFooter footer;
private TextView groupSender;
@@ -154,6 +155,7 @@ public class ConversationItem extends BaseConversationItem
this.quoteView = findViewById(R.id.quote_view);
this.container = findViewById(R.id.container);
this.replyView = findViewById(R.id.reply_icon);
this.jumptoView = findViewById(R.id.jumpto_icon);
this.msgActionButton = findViewById(R.id.msg_action_button);
this.showFullButton = findViewById(R.id.show_full_button);
@@ -181,6 +183,17 @@ public class ConversationItem extends BaseConversationItem
this.dcContact = dcContext.getContact(messageRecord.getFromId());
}
if (dcChat.isSelfTalk() && messageRecord.getOriginalMsgId() != 0) {
jumptoView.setVisibility(View.VISIBLE);
jumptoView.setOnClickListener(view -> {
if (eventListener != null) {
eventListener.onJumpToOriginalClicked(messageRecord);
}
});
} else {
jumptoView.setVisibility(View.GONE);
}
setGutterSizes(messageRecord, showSender);
setMessageShape(messageRecord);
setMediaAttributes(messageRecord, showSender);