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);
}