Change summary
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 12
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java | 15
src/main/res/layout/item_message_content.xml | 26
3 files changed, 53 insertions(+)
Detailed changes
@@ -2752,6 +2752,18 @@ public class ConversationFragment extends XmppFragment
return null;
}
+ public void jumpTo(final Message message) {
+ if (message.getUuid() == null) return;
+ for (int i = 0; i < messageList.size(); i++) {
+ final var m = messageList.get(i);
+ if (m == null) continue;
+ if (message.getUuid().equals(m.getUuid())) {
+ binding.messagesView.setSelection(i);
+ return;
+ }
+ }
+ }
+
private void openWith(final Message message) {
if (message.isGeoUri()) {
GeoHelper.view(getActivity(), message);
@@ -1074,6 +1074,8 @@ public class MessageAdapter extends ArrayAdapter<Message> {
viewHolder.messageBody = view.findViewById(R.id.message_body);
viewHolder.time = view.findViewById(R.id.message_time);
viewHolder.subject = view.findViewById(R.id.message_subject);
+ viewHolder.inReplyTo = view.findViewById(R.id.in_reply_to);
+ viewHolder.inReplyToBox = view.findViewById(R.id.in_reply_to_box);
viewHolder.indicatorReceived = view.findViewById(R.id.indicator_received);
viewHolder.audioPlayer = view.findViewById(R.id.audio_player);
viewHolder.thread_identicon = view.findViewById(R.id.thread_identicon);
@@ -1091,6 +1093,8 @@ public class MessageAdapter extends ArrayAdapter<Message> {
viewHolder.messageBody = view.findViewById(R.id.message_body);
viewHolder.time = view.findViewById(R.id.message_time);
viewHolder.subject = view.findViewById(R.id.message_subject);
+ viewHolder.inReplyTo = view.findViewById(R.id.in_reply_to);
+ viewHolder.inReplyToBox = view.findViewById(R.id.in_reply_to_box);
viewHolder.indicatorReceived = view.findViewById(R.id.indicator_received);
viewHolder.encryption = view.findViewById(R.id.message_encryption);
viewHolder.audioPlayer = view.findViewById(R.id.audio_player);
@@ -1468,6 +1472,15 @@ public class MessageAdapter extends ArrayAdapter<Message> {
viewHolder.subject.setVisibility(View.VISIBLE);
viewHolder.subject.setText(subject);
}
+
+ if (message.getInReplyTo() == null) {
+ viewHolder.inReplyToBox.setVisibility(View.GONE);
+ } else {
+ viewHolder.inReplyToBox.setVisibility(View.VISIBLE);
+ viewHolder.inReplyTo.setText(UIHelper.getMessageDisplayName(message.getInReplyTo()));
+ viewHolder.inReplyTo.setOnClickListener((v) -> mConversationFragment.jumpTo(message.getInReplyTo()));
+ setTextColor(viewHolder.inReplyTo, bubbleColor);
+ }
}
displayStatus(viewHolder, message, type, bubbleColor);
@@ -1687,6 +1700,8 @@ public class MessageAdapter extends ArrayAdapter<Message> {
protected ImageView indicatorReceived;
protected TextView time;
protected TextView subject;
+ protected TextView inReplyTo;
+ protected LinearLayout inReplyToBox;
protected TextView messageBody;
protected ImageView contact_picture;
protected TextView status_message;
@@ -21,6 +21,32 @@
app:shapeAppearance="@style/ShapeAppearanceOverlay.MessageImage" />
</LinearLayout>
+ <LinearLayout
+ android:id="@+id/in_reply_to_box"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:visibility="gone">
+
+ <ImageView
+ android:src="@drawable/ic_reply_24dp"
+ android:layout_width="14sp"
+ android:layout_height="14sp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginStart="5dp"
+ android:layout_marginEnd="2dp"
+ android:contentDescription="in reply to" />
+
+ <TextView
+ android:id="@+id/in_reply_to"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="10dp"
+ android:textStyle="bold|italic"
+ android:longClickable="false"
+ android:textAppearance="?textAppearanceBodyMedium" />
+ </LinearLayout>
+
<TextView
android:id="@+id/message_body"
android:layout_width="wrap_content"