From b5cca49b54d651a3e5f2606ac598832057bfa2ab Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Wed, 22 Jan 2020 11:57:16 +1100 Subject: [PATCH] Background poll for group messages --- AndroidManifest.xml | 11 +++++- .../securesms/ApplicationContext.java | 4 +- .../conversation/ConversationActivity.java | 3 -- .../securesms/jobs/PushDecryptJob.java | 3 +- .../loki/BackgroundPublicChatPollWorker.kt | 38 +++++++++++++++++++ .../securesms/loki/LokiPublicChatPoller.kt | 5 ++- .../notifications/MessageNotifier.java | 5 +-- .../securesms/util/TextSecurePreferences.java | 8 ++++ 8 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 src/org/thoughtcrime/securesms/loki/BackgroundPublicChatPollWorker.kt diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 168e2f742e..2b6a417e7b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -806,12 +806,19 @@ - + + - + + + + + + + messageIds = DatabaseFactory.getThreadDatabase(context).setRead(params[0], false); - // Only send notifications for private chats - if (!getRecipient().isGroupRecipient()) { MessageNotifier.updateNotification(context); } - MarkReadReceiver.process(context, messageIds); return null; diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index fa8f7be2d8..29bef63756 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -1045,8 +1045,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { if (smsMessageId.isPresent()) database.deleteMessage(smsMessageId.get()); - boolean isGroupMessage = message.getGroupInfo().isPresent(); - if (threadId != null && !isGroupMessage) { + if (threadId != null) { MessageNotifier.updateNotification(context, threadId); } diff --git a/src/org/thoughtcrime/securesms/loki/BackgroundPublicChatPollWorker.kt b/src/org/thoughtcrime/securesms/loki/BackgroundPublicChatPollWorker.kt new file mode 100644 index 0000000000..aa2788f923 --- /dev/null +++ b/src/org/thoughtcrime/securesms/loki/BackgroundPublicChatPollWorker.kt @@ -0,0 +1,38 @@ +package org.thoughtcrime.securesms.loki + +import android.content.Context +import android.content.Intent +import org.thoughtcrime.securesms.database.DatabaseFactory +import org.thoughtcrime.securesms.service.PersistentAlarmManagerListener +import org.thoughtcrime.securesms.util.TextSecurePreferences +import java.util.concurrent.TimeUnit + +class BackgroundPublicChatPollWorker : PersistentAlarmManagerListener() { + + companion object { + private val pollInterval = TimeUnit.MINUTES.toMillis(4) + + @JvmStatic + fun schedule(context: Context) { + BackgroundPublicChatPollWorker().onReceive(context, Intent()) + } + } + + override fun getNextScheduledExecutionTime(context: Context): Long { + return TextSecurePreferences.getPublicChatBackgroundPollTime(context) + } + + override fun onAlarm(context: Context, scheduledTime: Long): Long { + if (scheduledTime != 0L) { + val publicChats = DatabaseFactory.getLokiThreadDatabase(context).getAllPublicChats().map { it.value } + for (publicChat in publicChats) { + val poller = LokiPublicChatPoller(context, publicChat) + poller.stop() + poller.pollForNewMessages() + } + } + val nextTime = System.currentTimeMillis() + pollInterval + TextSecurePreferences.setPublicChatBackgroundPollTime(context, nextTime) + return nextTime + } +} diff --git a/src/org/thoughtcrime/securesms/loki/LokiPublicChatPoller.kt b/src/org/thoughtcrime/securesms/loki/LokiPublicChatPoller.kt index 9c21983fbe..d423bcac56 100644 --- a/src/org/thoughtcrime/securesms/loki/LokiPublicChatPoller.kt +++ b/src/org/thoughtcrime/securesms/loki/LokiPublicChatPoller.kt @@ -153,7 +153,7 @@ class LokiPublicChatPoller(private val context: Context, private val group: Loki return SignalServiceDataMessage(message.timestamp, serviceGroup, attachments, body, false, 0, false, null, false, quote, null, signalLinkPreviews, null) } - private fun pollForNewMessages() { + fun pollForNewMessages() { fun processIncomingMessage(message: LokiPublicChatMessage) { // If the sender of the current message is not a secondary device, we need to set the display name in the database val primaryDevice = LokiStorageAPI.shared.getPrimaryDevicePublicKey(message.hexEncodedPublicKey).get() @@ -220,6 +220,9 @@ class LokiPublicChatPoller(private val context: Context, private val group: Loki } var userDevices = setOf() var uniqueDevices = setOf() + val userPrivateKey = IdentityKeyUtil.getIdentityKeyPair(context).privateKey.serialize() + val database = DatabaseFactory.getLokiAPIDatabase(context) + LokiStorageAPI.configure(false, userHexEncodedPublicKey, userPrivateKey, database) LokiStorageAPI.shared.getAllDevicePublicKeys(userHexEncodedPublicKey).bind { devices -> userDevices = devices api.getMessages(group.channel, group.server) diff --git a/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java b/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java index e7e6cc73ba..96dfe547c3 100644 --- a/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java +++ b/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java @@ -388,9 +388,6 @@ public class MessageNotifier { } private static void sendInThreadNotification(Context context, Recipient recipient) { - // Mute group chats - if (recipient.isGroupRecipient()) { return; } - if (!TextSecurePreferences.isInThreadNotifications(context) || ServiceUtil.getAudioManager(context).getRingerMode() != AudioManager.RINGER_MODE_NORMAL) { @@ -471,7 +468,7 @@ public class MessageNotifier { slideDeck = ((MediaMmsMessageRecord)record).getSlideDeck(); } - if ((threadRecipients == null || !threadRecipients.isMuted()) && (threadRecipients == null || !threadRecipients.isGroupRecipient())) { + if (threadRecipients == null || !threadRecipients.isMuted()) { notificationState.addNotification(new NotificationItem(id, mms, recipient, conversationRecipient, threadRecipients, threadId, body, timestamp, slideDeck)); } } diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java index d72dd23ee1..aef385c197 100644 --- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -1179,6 +1179,14 @@ public class TextSecurePreferences { setLongPreference(context, "background_poll_time", backgroundPollTime); } + public static long getPublicChatBackgroundPollTime(Context context) { + return getLongPreference(context, "public_chat_background_poll_time", 0L); + } + + public static void setPublicChatBackgroundPollTime(Context context, long backgroundPollTime) { + setLongPreference(context, "public_chat_background_poll_time", backgroundPollTime); + } + public static boolean isChatSetUp(Context context, String id) { return getBooleanPreference(context, "is_chat_set_up" + "?chat=" + id, false); }