From 583860053be8b8f12a5f53b830ba711acb556836 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 15 Feb 2023 17:06:27 -0500 Subject: [PATCH] Cancel scheduled message alarm if no messages are scheduled. --- .../securesms/service/ScheduledMessageManager.kt | 10 ++++++---- .../securesms/service/TimedEventManager.java | 8 ++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/ScheduledMessageManager.kt b/app/src/main/java/org/thoughtcrime/securesms/service/ScheduledMessageManager.kt index c783ce8d1b..197a9c27b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/ScheduledMessageManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/ScheduledMessageManager.kt @@ -15,7 +15,6 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobs.IndividualSendJob import org.thoughtcrime.securesms.jobs.PushGroupSendJob import org.thoughtcrime.securesms.recipients.RecipientId -import org.thoughtcrime.securesms.util.ServiceUtil import kotlin.time.Duration.Companion.seconds /** @@ -38,7 +37,12 @@ class ScheduledMessageManager( @Suppress("UsePropertyAccessSyntax") @WorkerThread override fun getNextClosestEvent(): Event? { - val oldestMessage = messagesTable.getOldestScheduledSendTimestamp() as? MediaMmsMessageRecord ?: return null + val oldestMessage: MediaMmsMessageRecord? = messagesTable.getOldestScheduledSendTimestamp() as? MediaMmsMessageRecord + + if (oldestMessage == null) { + cancelAlarm(application, ScheduledMessagesAlarm::class.java) + return null + } val delay = (oldestMessage.scheduledDate - System.currentTimeMillis()).coerceAtLeast(0) Log.i(TAG, "The next scheduled message needs to be sent in $delay ms.") @@ -69,8 +73,6 @@ class ScheduledMessageManager( override fun scheduleAlarm(application: Application, event: Event, delay: Long) { val conversationIntent = ConversationIntents.createBuilder(application, event.recipientId, event.threadId).build() - ServiceUtil.getAlarmManager(application) - trySetExactAlarm( application, System.currentTimeMillis() + delay, diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/TimedEventManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/TimedEventManager.java index bdeebd7b3e..9b32fb1dea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/TimedEventManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/TimedEventManager.java @@ -117,4 +117,12 @@ public abstract class TimedEventManager { Log.w(TAG, "Unable to schedule exact alarm, falling back to inexact alarm, scheduling alarm for: " + timestamp); alarmManager.set(AlarmManager.RTC_WAKEUP, timestamp, pendingIntent); } + + protected static void cancelAlarm(@NonNull Context context, @NonNull Class alarmClass) { + Intent intent = new Intent(context, alarmClass); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntentFlags.mutable()); + + pendingIntent.cancel(); + ServiceUtil.getAlarmManager(context).cancel(pendingIntent); + } }