diff --git a/app/src/main/java/com/rosetta/messenger/MainActivity.kt b/app/src/main/java/com/rosetta/messenger/MainActivity.kt index 07ff4cd..8e39a70 100644 --- a/app/src/main/java/com/rosetta/messenger/MainActivity.kt +++ b/app/src/main/java/com/rosetta/messenger/MainActivity.kt @@ -423,6 +423,8 @@ class MainActivity : FragmentActivity() { super.onResume() // πŸ”₯ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ стало Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ - ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ увСдомлСния com.rosetta.messenger.push.RosettaFirebaseMessagingService.isAppInForeground = true + // πŸ”” БбрасываСм всС увСдомлСния ΠΈΠ· ΡˆΡ‚ΠΎΡ€ΠΊΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ прилоТСния + (getSystemService(NOTIFICATION_SERVICE) as android.app.NotificationManager).cancelAll() // ⚑ На Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ reconnect Π±Π΅Π· оТидания backoff. ProtocolManager.reconnectNowIfNeeded("activity_onResume") } diff --git a/app/src/main/java/com/rosetta/messenger/push/RosettaFirebaseMessagingService.kt b/app/src/main/java/com/rosetta/messenger/push/RosettaFirebaseMessagingService.kt index ae24d72..18bd950 100644 --- a/app/src/main/java/com/rosetta/messenger/push/RosettaFirebaseMessagingService.kt +++ b/app/src/main/java/com/rosetta/messenger/push/RosettaFirebaseMessagingService.kt @@ -142,7 +142,7 @@ class RosettaFirebaseMessagingService : FirebaseMessagingService() { lower.contains("body") } if (!handledMessageData && !isReadEvent && looksLikeMessagePayload) { - showSimpleNotification(senderName, messagePreview) + showSimpleNotification(senderName, messagePreview, senderPublicKey) handledMessageData = true } } @@ -218,13 +218,13 @@ class RosettaFirebaseMessagingService : FirebaseMessagingService() { } /** ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ простоС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ */ - private fun showSimpleNotification(title: String, body: String) { + private fun showSimpleNotification(title: String, body: String, senderPublicKey: String? = null) { // πŸ”₯ НС ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ if (isAppInForeground || !areNotificationsEnabled()) { return } // Dedup: suppress duplicate pushes within DEDUP_WINDOW_MS - val dedupKey = "__simple__" + val dedupKey = senderPublicKey?.trim()?.ifEmpty { null } ?: "__simple__" val now = System.currentTimeMillis() val lastTs = lastNotifTimestamps[dedupKey] if (lastTs != null && now - lastTs < DEDUP_WINDOW_MS) { @@ -234,8 +234,12 @@ class RosettaFirebaseMessagingService : FirebaseMessagingService() { createNotificationChannel() - // Deterministic ID β€” duplicates replace each other instead of stacking - val notifId = (title + body).hashCode() and 0x7FFFFFFF + // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ sender-based ID Ссли извСстСн ΠΊΠ»ΡŽΡ‡ β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ cancelNotificationForChat ΠΌΠΎΠ³ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ + val notifId = if (!senderPublicKey.isNullOrBlank()) { + getNotificationIdForChat(senderPublicKey.trim()) + } else { + (title + body).hashCode() and 0x7FFFFFFF + } val intent = Intent(this, MainActivity::class.java).apply {