From 1fdb3ffb03dc0afad332257a921fd4c2fe5c4adb Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 15 Aug 2024 13:59:06 -0400 Subject: [PATCH] Fix doze mode sleeping for message retrieval thread. Fixes #13650 --- .../dependencies/ApplicationDependencyProvider.java | 2 +- .../securesms/messages/IncomingMessageObserver.kt | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index 1e5b151c09..2a4aa0bb60 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -296,7 +296,7 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider { @Override public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier signalServiceConfigurationSupplier, @NonNull Supplier libSignalNetworkSupplier) { - SleepTimer sleepTimer = !SignalStore.account().isFcmEnabled() || SignalStore.internal().isWebsocketModeForced() ? new AlarmSleepTimer(context) : new UptimeSleepTimer() ; + SleepTimer sleepTimer = !SignalStore.account().isFcmEnabled() || SignalStore.internal().isWebsocketModeForced() ? new AlarmSleepTimer(context) : new UptimeSleepTimer(); SignalWebSocketHealthMonitor healthMonitor = new SignalWebSocketHealthMonitor(context, sleepTimer); WebSocketShadowingBridge bridge = new DefaultWebSocketShadowingBridge(context); SignalWebSocket signalWebSocket = new SignalWebSocket(provideWebSocketFactory(signalServiceConfigurationSupplier, healthMonitor, libSignalNetworkSupplier, bridge)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt index dbef01a279..b0cefe4d80 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt @@ -28,10 +28,13 @@ import org.thoughtcrime.securesms.messages.MessageDecryptor.FollowUpOperation import org.thoughtcrime.securesms.messages.protocol.BufferedProtocolStore import org.thoughtcrime.securesms.notifications.NotificationChannels import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.util.AlarmSleepTimer import org.thoughtcrime.securesms.util.AppForegroundObserver import org.thoughtcrime.securesms.util.SignalLocalMetrics import org.thoughtcrime.securesms.util.asChain import org.whispersystems.signalservice.api.push.ServiceId +import org.whispersystems.signalservice.api.util.SleepTimer +import org.whispersystems.signalservice.api.util.UptimeSleepTimer import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState import org.whispersystems.signalservice.api.websocket.WebSocketUnavailableException import org.whispersystems.signalservice.internal.push.Envelope @@ -353,9 +356,13 @@ class IncomingMessageObserver(private val context: Application) { private inner class MessageRetrievalThread : Thread("MessageRetrievalService"), Thread.UncaughtExceptionHandler { + private var sleepTimer: SleepTimer + init { Log.i(TAG, "Initializing! (${this.hashCode()})") uncaughtExceptionHandler = this + + sleepTimer = if (!SignalStore.account.fcmEnabled || SignalStore.internal.isWebsocketModeForced) AlarmSleepTimer(context) else UptimeSleepTimer() } override fun run() { @@ -366,7 +373,7 @@ class IncomingMessageObserver(private val context: Application) { if (attempts > 1) { val backoff = BackoffUtil.exponentialBackoff(attempts, TimeUnit.SECONDS.toMillis(30)) Log.w(TAG, "Too many failed connection attempts, attempts: $attempts backing off: $backoff") - ThreadUtil.sleep(backoff) + sleepTimer.sleep(backoff) } waitForConnectionNecessary()