From 6b684bf030a286b50d2a623e4d6c19e4320e3146 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Sat, 23 Nov 2024 21:43:33 +0100 Subject: [PATCH 1/5] notify DC_EVENT_INCOMING_WEBXDC_NOTIFY --- .../java/com/b44t/messenger/DcContext.java | 1 + .../securesms/connect/DcEventCenter.java | 4 +++ .../notifications/NotificationCenter.java | 25 ++++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/b44t/messenger/DcContext.java b/src/main/java/com/b44t/messenger/DcContext.java index c69e4c58c..a13356ad6 100644 --- a/src/main/java/com/b44t/messenger/DcContext.java +++ b/src/main/java/com/b44t/messenger/DcContext.java @@ -13,6 +13,7 @@ public class DcContext { public final static int DC_EVENT_MSGS_CHANGED = 2000; public final static int DC_EVENT_REACTIONS_CHANGED = 2001; public final static int DC_EVENT_INCOMING_REACTION = 2002; + public final static int DC_EVENT_INCOMING_WEBXDC_NOTIFY = 2003; public final static int DC_EVENT_INCOMING_MSG = 2005; public final static int DC_EVENT_MSGS_NOTICED = 2008; public final static int DC_EVENT_MSG_DELIVERED = 2010; diff --git a/src/main/java/org/thoughtcrime/securesms/connect/DcEventCenter.java b/src/main/java/org/thoughtcrime/securesms/connect/DcEventCenter.java index d10b854a4..3fb331d97 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/DcEventCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcEventCenter.java @@ -178,6 +178,10 @@ public class DcEventCenter { DcHelper.getNotificationCenter(context).notifyReaction(accountId, event.getData1Int(), event.getData2Int(), event.getData2Str()); break; + case DcContext.DC_EVENT_INCOMING_WEBXDC_NOTIFY: + DcHelper.getNotificationCenter(context).notifyWebxdc(accountId, event.getData1Int(), event.getData2Int(), event.getData2Str()); + break; + case DcContext.DC_EVENT_MSGS_NOTICED: DcHelper.getNotificationCenter(context).removeNotifications(accountId, event.getData1Int()); break; diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java index c07889f6a..d7563dc66 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java @@ -32,6 +32,7 @@ import com.b44t.messenger.DcContext; import com.b44t.messenger.DcMsg; import com.bumptech.glide.load.engine.DiskCacheStrategy; +import org.json.JSONObject; import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.ConversationActivity; import org.thoughtcrime.securesms.ConversationListActivity; @@ -42,6 +43,7 @@ import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPrefere import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.IntentUtils; +import org.thoughtcrime.securesms.util.JsonUtils; import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.Util; @@ -366,7 +368,28 @@ public class NotificationCenter { DcContact sender = dcContext.getContact(contactId); String shortLine = context.getString(R.string.reaction_by_other, sender.getDisplayName(), reaction, dcMsg.getSummarytext(2000)); - maybeAddNotification(accountId, dcContext.getChat(dcMsg.getChatId()), msgId, shortLine, shortLine, false); + maybeAddNotification(accountId, dcContext.getChat(dcMsg.getChatId()), msgId, shortLine, shortLine, true); + }); + } + + public void notifyWebxdc(int accountId, int contactId, int msgId, String text) { + Util.runOnAnyBackgroundThread(() -> { + NotificationPrivacyPreference privacy = Prefs.getNotificationPrivacy(context); + if (!privacy.isDisplayContact() || !privacy.isDisplayMessage()) { + return; // showing "New Message" is wrong, just do nothing. + } + + DcContext dcContext = context.dcAccounts.getAccount(accountId); + DcMsg dcMsg = dcContext.getMsg(msgId); + JSONObject info; + if(dcMsg.getType() == DcMsg.DC_MSG_WEBXDC) { + info = dcMsg.getWebxdcInfo(); + } else { // info message, get from parent xdc + info = dcMsg.getParent().getWebxdcInfo(); + } + final String name = JsonUtils.optString(info, "name"); + String shortLine = name.isEmpty()? text : (name + ": " + text); + maybeAddNotification(accountId, dcContext.getChat(dcMsg.getChatId()), msgId, shortLine, shortLine, true); }); } From b47e75eed617c39f95699a024f2f42b63d8d5ee6 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Sat, 23 Nov 2024 21:56:38 +0100 Subject: [PATCH 2/5] use new selfAddr --- src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java index da25f9011..aa6e70001 100644 --- a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java @@ -70,6 +70,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE private DcMsg dcAppMsg; private String baseURL; private String sourceCodeUrl = ""; + private String selfAddr = ""; private boolean internetAccess = false; private boolean hideActionBar = false; @@ -189,6 +190,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE final JSONObject info = this.dcAppMsg.getWebxdcInfo(); internetAccess = JsonUtils.optBoolean(info, "internet_access"); + selfAddr = JsonUtils.optString(info, "self_addr"); toggleFakeProxy(!internetAccess); @@ -454,7 +456,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE class InternalJSApi { @JavascriptInterface public String selfAddr() { - return WebxdcActivity.this.dcContext.getConfig("addr"); + return WebxdcActivity.this.selfAddr; } /** @noinspection unused*/ From e234cc864b31c1064d27774babce94c643e52dde Mon Sep 17 00:00:00 2001 From: adbenitez Date: Sat, 23 Nov 2024 23:10:56 +0100 Subject: [PATCH 3/5] don't play in-chat sound --- .../securesms/notifications/NotificationCenter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java index d7563dc66..beba76961 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java @@ -368,7 +368,7 @@ public class NotificationCenter { DcContact sender = dcContext.getContact(contactId); String shortLine = context.getString(R.string.reaction_by_other, sender.getDisplayName(), reaction, dcMsg.getSummarytext(2000)); - maybeAddNotification(accountId, dcContext.getChat(dcMsg.getChatId()), msgId, shortLine, shortLine, true); + maybeAddNotification(accountId, dcContext.getChat(dcMsg.getChatId()), msgId, shortLine, shortLine, false); }); } @@ -389,7 +389,7 @@ public class NotificationCenter { } final String name = JsonUtils.optString(info, "name"); String shortLine = name.isEmpty()? text : (name + ": " + text); - maybeAddNotification(accountId, dcContext.getChat(dcMsg.getChatId()), msgId, shortLine, shortLine, true); + maybeAddNotification(accountId, dcContext.getChat(dcMsg.getChatId()), msgId, shortLine, shortLine, false); }); } From b968ba67b32758f538460bb438fa6cd263bb44df Mon Sep 17 00:00:00 2001 From: adbenitez Date: Sun, 24 Nov 2024 00:33:22 +0100 Subject: [PATCH 4/5] avoid NullPointerException --- .../securesms/notifications/NotificationCenter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java index beba76961..28305dda3 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java @@ -385,7 +385,7 @@ public class NotificationCenter { if(dcMsg.getType() == DcMsg.DC_MSG_WEBXDC) { info = dcMsg.getWebxdcInfo(); } else { // info message, get from parent xdc - info = dcMsg.getParent().getWebxdcInfo(); + info = dcMsg.getParent() != null? dcMsg.getParent().getWebxdcInfo() : ""; } final String name = JsonUtils.optString(info, "name"); String shortLine = name.isEmpty()? text : (name + ": " + text); From f70c79ba4a1a5a29dbc1b934ed6037d028556bca Mon Sep 17 00:00:00 2001 From: adbenitez Date: Sun, 24 Nov 2024 03:46:50 +0100 Subject: [PATCH 5/5] fix notifyWebxdc --- .../securesms/notifications/NotificationCenter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java index 28305dda3..4d5b15656 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java @@ -385,7 +385,7 @@ public class NotificationCenter { if(dcMsg.getType() == DcMsg.DC_MSG_WEBXDC) { info = dcMsg.getWebxdcInfo(); } else { // info message, get from parent xdc - info = dcMsg.getParent() != null? dcMsg.getParent().getWebxdcInfo() : ""; + info = dcMsg.getParent() != null? dcMsg.getParent().getWebxdcInfo() : new JSONObject(); } final String name = JsonUtils.optString(info, "name"); String shortLine = name.isEmpty()? text : (name + ": " + text);