diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c index 2d83f9f4f..a358e8ddd 100644 --- a/jni/dc_wrapper.c +++ b/jni/dc_wrapper.c @@ -1688,6 +1688,15 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getParentCPtr(JNIEnv *env, jobject return (jlong)dc_msg_get_parent(get_dc_msg(env, obj)); } +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getOriginalMsgId(JNIEnv *env, jobject obj) +{ + return (jint)dc_msg_get_original_msg_id(get_dc_msg(env, obj)); +} + +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getSavedMsgId(JNIEnv *env, jobject obj) +{ + return (jint)dc_msg_get_saved_msg_id(get_dc_msg(env, obj)); +} JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getError(JNIEnv *env, jobject obj) { diff --git a/src/main/java/com/b44t/messenger/DcMsg.java b/src/main/java/com/b44t/messenger/DcMsg.java index 12c3e06b3..46a7f8641 100644 --- a/src/main/java/com/b44t/messenger/DcMsg.java +++ b/src/main/java/com/b44t/messenger/DcMsg.java @@ -185,6 +185,17 @@ public class DcMsg { return cPtr != 0 ? new DcMsg(cPtr) : null; } + public native int getOriginalMsgId (); + public native int getSavedMsgId (); + + public boolean canSave() { + return !isInfo(); + } + + public boolean isSaved() { + return getOriginalMsgId() != 0 || getSavedMsgId() != 0; + } + public File getFileAsFile() { if(getFile()==null) throw new AssertionError("expected a file to be present."); diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java index 2a7bfd62a..7df490bde 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -175,7 +175,7 @@ public class ConversationItem extends BaseConversationItem { bind(messageRecord, dcChat, batchSelected, pulseHighlight, recipients); this.glideRequests = glideRequests; - this.showSender = (dcChat.isMultiUser() && !messageRecord.isOutgoing()) || messageRecord.getOverrideSenderName() != null; + this.showSender = ((dcChat.isMultiUser() || dcChat.isSelfTalk()) && !messageRecord.isOutgoing()) || messageRecord.getOverrideSenderName() != null; if (showSender) { this.dcContact = dcContext.getContact(messageRecord.getFromId()); diff --git a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index 624ddbd6f..46a73f5ed 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -72,7 +72,11 @@ public class ConversationItemFooter extends LinearLayout { private void presentDate(@NonNull DcMsg messageRecord) { dateView.forceLayout(); - dateView.setText(DateUtils.getExtendedRelativeTimeSpanString(getContext(), messageRecord.getTimestamp())); + String text = DateUtils.getExtendedRelativeTimeSpanString(getContext(), messageRecord.getTimestamp()); + if (messageRecord.isSaved()) { + text += " ★"; + } + dateView.setText(text); } private void presentDeliveryStatus(@NonNull DcMsg messageRecord) {