diff --git a/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java b/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java
index c3341b380..af0740195 100644
--- a/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java
+++ b/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java
@@ -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);
diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationFragment.java b/src/main/java/org/thoughtcrime/securesms/ConversationFragment.java
index edbf0fd57..a97b5d692 100644
--- a/src/main/java/org/thoughtcrime/securesms/ConversationFragment.java
+++ b/src/main/java/org/thoughtcrime/securesms/ConversationFragment.java
@@ -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);
diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java
index 7df490bde..6d9dcee25 100644
--- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java
+++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java
@@ -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);
diff --git a/src/main/res/drawable-night/jumpto_btn_bg.xml b/src/main/res/drawable-night/jumpto_btn_bg.xml
new file mode 100644
index 000000000..be9119122
--- /dev/null
+++ b/src/main/res/drawable-night/jumpto_btn_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/src/main/res/drawable/jumpto_btn_bg.xml b/src/main/res/drawable/jumpto_btn_bg.xml
new file mode 100644
index 000000000..82142dd34
--- /dev/null
+++ b/src/main/res/drawable/jumpto_btn_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
diff --git a/src/main/res/drawable/rounded_arrow_forward_24.xml b/src/main/res/drawable/rounded_arrow_forward_24.xml
new file mode 100644
index 000000000..29b2576d4
--- /dev/null
+++ b/src/main/res/drawable/rounded_arrow_forward_24.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/main/res/layout/conversation_item_received.xml b/src/main/res/layout/conversation_item_received.xml
index 781d80eec..19cb8a2bc 100644
--- a/src/main/res/layout/conversation_item_received.xml
+++ b/src/main/res/layout/conversation_item_received.xml
@@ -3,7 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/conversation_item_background"
@@ -13,9 +13,13 @@
android:clipToPadding="false"
android:clipChildren="false">
+
+
+ android:clipChildren="false"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/jumpto_icon"
+ >
+
+
+
diff --git a/src/main/res/layout/conversation_item_sent.xml b/src/main/res/layout/conversation_item_sent.xml
index f4a48916f..567b4d690 100644
--- a/src/main/res/layout/conversation_item_sent.xml
+++ b/src/main/res/layout/conversation_item_sent.xml
@@ -13,6 +13,19 @@
android:clipToPadding="false"
android:clipChildren="false">
+
+