diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c
index a71c0ada4..6d489179e 100644
--- a/jni/dc_wrapper.c
+++ b/jni/dc_wrapper.c
@@ -656,6 +656,12 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendTextMsg(JNIEnv *env, jobjec
}
+JNIEXPORT jint Java_com_b44t_messenger_DcContext_addDeviceMsg(JNIEnv *env, jobject obj, jobject msg)
+{
+ return dc_add_device_msg(get_dc_context(env, obj), get_dc_msg(env, msg));
+}
+
+
/* DcContext - handle config */
JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfig(JNIEnv *env, jobject obj, jstring key, jstring value /*may be NULL*/)
@@ -1058,6 +1064,18 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isSelfTalk(JNIEnv *env, jobjec
}
+JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isDeviceTalk(JNIEnv *env, jobject obj)
+{
+ return dc_chat_is_device_talk(get_dc_chat(env, obj))!=0;
+}
+
+
+JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_canSend(JNIEnv *env, jobject obj)
+{
+ return dc_chat_can_send(get_dc_chat(env, obj))!=0;
+}
+
+
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isVerified(JNIEnv *env, jobject obj)
{
return dc_chat_is_verified(get_dc_chat(env, obj))!=0;
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3e6d1b7c1..a38e53cc6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -169,6 +169,8 @@
Zoom out
Save log
Share location with all group members
+ Device Messages
+ Locally generated messages
Mute for 1 hour
Mute for 2 hours
diff --git a/src/com/b44t/messenger/DcChat.java b/src/com/b44t/messenger/DcChat.java
index cf2d74012..87c717006 100644
--- a/src/com/b44t/messenger/DcChat.java
+++ b/src/com/b44t/messenger/DcChat.java
@@ -27,6 +27,8 @@ public class DcChat {
public native int getColor ();
public native boolean isUnpromoted ();
public native boolean isSelfTalk ();
+ public native boolean isDeviceTalk ();
+ public native boolean canSend ();
public native boolean isVerified ();
public native boolean isSendingLocations();
diff --git a/src/com/b44t/messenger/DcContext.java b/src/com/b44t/messenger/DcContext.java
index 78fe9480e..58cc9de3f 100644
--- a/src/com/b44t/messenger/DcContext.java
+++ b/src/com/b44t/messenger/DcContext.java
@@ -156,6 +156,7 @@ public class DcContext {
public native int prepareMsg (int chat_id, DcMsg msg);
public native int sendMsg (int chat_id, DcMsg msg);
public native int sendTextMsg (int chat_id, String text);
+ public native int addDeviceMsg (DcMsg msg);
public native int checkQrCPtr (String qr);
public @NonNull DcLot checkQr (String qr) { return new DcLot(checkQrCPtr(qr)); }
public native String getSecurejoinQr (int chat_id);
diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java
index 26c87b962..83d945343 100644
--- a/src/org/thoughtcrime/securesms/ConversationActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationActivity.java
@@ -840,8 +840,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
conversationContainer.setClipToPadding(true);
}
- if(chatId == DcChat.DC_CHAT_ID_DEADDROP) {
+ if (!dcChat.canSend()) {
composePanel.setVisibility(View.GONE);
+ }
+
+ if (chatId == DcChat.DC_CHAT_ID_DEADDROP) {
titleView.hideAvatar();
}
}
diff --git a/src/org/thoughtcrime/securesms/ConversationTitleView.java b/src/org/thoughtcrime/securesms/ConversationTitleView.java
index 2a3e81d27..660789aa3 100644
--- a/src/org/thoughtcrime/securesms/ConversationTitleView.java
+++ b/src/org/thoughtcrime/securesms/ConversationTitleView.java
@@ -136,6 +136,9 @@ public class ConversationTitleView extends RelativeLayout {
if( dcChat.isSelfTalk() ) {
subtitle = context.getString(R.string.chat_self_talk_subtitle);
}
+ else if( dcChat.isDeviceTalk() ) {
+ subtitle = context.getString(R.string.device_talk_subtitle);
+ }
else {
subtitle = dcContext.getContact(chatContacts[0]).getAddr();
}
diff --git a/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java b/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java
index 432e12b83..ebc1693c4 100644
--- a/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java
+++ b/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java
@@ -148,6 +148,7 @@ public class ApplicationDcContext extends DcContext {
setStockTranslation(61, context.getString(R.string.login_error_server_response));
setStockTranslation(62, context.getString(R.string.systemmsg_action_by_user));
setStockTranslation(63, context.getString(R.string.systemmsg_action_by_me));
+ setStockTranslation(68, context.getString(R.string.device_talk));
}
public File getImexDir() {