Align sync message tracking with iOS.

This commit is contained in:
Alex Hart
2026-05-06 12:14:39 -03:00
committed by Greyson Parrelli
parent ce294dbc0b
commit d05338cee0
6 changed files with 5 additions and 18 deletions
@@ -50,6 +50,7 @@ class MiscellaneousValues internal constructor(store: KeyValueStore) : SignalSto
private const val COMPLETED_COLLAPSED_EVENTS_MIGRATION = "misc.completed_collapsed_events_migration"
private const val CAPTCHA_LAST_VIEWED_AT = "misc.captcha_last_viewed_at"
private const val CALLING_ASSETS_VERSION = "misc.calling_assets_version"
private const val LAST_SYNC_MESSAGE_SEEN_TIME_MS = "misc.last_sync_message_seen_time"
}
public override fun onFirstEverAppLaunch() {
@@ -105,6 +106,8 @@ class MiscellaneousValues internal constructor(store: KeyValueStore) : SignalSto
var preferredMainActivityAnchorIndex: Int by integerValue(PREFERRED_MAIN_ACTIVITY_ANCHOR_INDEX, -1)
var lastSyncMessageSeenTimeMs: Long by longValue(LAST_SYNC_MESSAGE_SEEN_TIME_MS, 0L)
fun lockChangeNumber() {
putBoolean(CHANGE_NUMBER_LOCK, true)
ChangeNumberConstraintObserver.onChange()
@@ -470,6 +470,7 @@ open class MessageContentProcessor(private val context: Context) {
content.syncMessage != null -> {
SignalStore.account.isMultiDevice = true
SignalStore.misc.lastSyncMessageSeenTimeMs = System.currentTimeMillis()
SyncMessageProcessor.process(
context,
@@ -285,8 +285,6 @@ object SyncMessageProcessor {
log(envelope.clientTimestamp!!, "Got a sent transcript while in reCAPTCHA mode. Assuming we're good to message again.")
RateLimitUtil.retryAllRateLimitedMessages(context)
}
AppDependencies.messageNotifier.setLastDesktopActivityTimestamp(sent.timestamp!!)
} catch (e: MmsException) {
throw StorageFailedException(e, metadata.sourceServiceId.toString(), metadata.sourceDeviceId)
}
@@ -1013,7 +1011,6 @@ object SyncMessageProcessor {
AppDependencies
.messageNotifier
.apply {
setLastDesktopActivityTimestamp(envelopeTimestamp)
cancelDelayedNotifications()
updateNotification(context)
}
@@ -1047,7 +1044,6 @@ object SyncMessageProcessor {
SignalDatabase.messages.setOutgoingGiftsRevealed(toMarkViewed)
AppDependencies.messageNotifier.apply {
setLastDesktopActivityTimestamp(envelopeTimestamp)
cancelDelayedNotifications()
updateNotification(context)
}
@@ -1076,7 +1072,6 @@ object SyncMessageProcessor {
}
AppDependencies.messageNotifier.apply {
setLastDesktopActivityTimestamp(envelopeTimestamp)
cancelDelayedNotifications()
updateNotification(context)
}
@@ -22,7 +22,6 @@ public interface MessageNotifier {
void clearVisibleThread(@NonNull ConversationId conversationId);
void setVisibleBubbleThread(@Nullable ConversationId conversationId);
void clearVisibleBubbleThread();
void setLastDesktopActivityTimestamp(long timestamp);
void notifyMessageDeliveryFailed(@NonNull Context context, @NonNull Recipient recipient, @NonNull ConversationId conversationId);
void notifyStoryDeliveryFailed(@NonNull Context context, @NonNull Recipient recipient, @NonNull ConversationId conversationId);
void notifyProofRequired(@NonNull Context context, @NonNull Recipient recipient, @NonNull ConversationId conversationId);
@@ -67,11 +67,6 @@ public class OptimizedMessageNotifier implements MessageNotifier {
getNotifier().clearVisibleBubbleThread();
}
@Override
public void setLastDesktopActivityTimestamp(long timestamp) {
getNotifier().setLastDesktopActivityTimestamp(timestamp);
}
@Override
public void notifyMessageDeliveryFailed(@NonNull Context context, @NonNull Recipient recipient, @NonNull ConversationId conversationId) {
SignalDatabase.runPostSuccessfulTransaction(() -> {
@@ -49,8 +49,6 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier {
@Volatile private var visibleBubbleThread: ConversationId? = null
@Volatile private var lastDesktopActivityTimestamp: Long = -1
@Volatile private var lastAudibleNotification: Long = -1
@Volatile private var lastScheduledReminder: Long = 0
@@ -95,10 +93,6 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier {
setVisibleBubbleThread(null)
}
override fun setLastDesktopActivityTimestamp(timestamp: Long) {
lastDesktopActivityTimestamp = timestamp
}
override fun notifyMessageDeliveryFailed(context: Context, recipient: Recipient, conversationId: ConversationId) {
NotificationFactory.notifyMessageDeliveryFailed(context, recipient, conversationId, visibleThread.get(), visibleBubbleThread)
}
@@ -122,7 +116,7 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier {
@WorkerThread
override fun updateNotification(context: Context, conversationId: ConversationId) {
if (System.currentTimeMillis() - lastDesktopActivityTimestamp < DESKTOP_ACTIVITY_PERIOD) {
if (System.currentTimeMillis() - SignalStore.misc.lastSyncMessageSeenTimeMs < DESKTOP_ACTIVITY_PERIOD) {
Log.i(TAG, "Scheduling delayed notification...")
executor.enqueue(context, conversationId)
} else {