From e4681f5e3967fae15af22ea571daf014a1df2a76 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Wed, 4 Jun 2025 15:28:43 -0300 Subject: [PATCH] Update notification only when necessary --- .../greenart7c3/nostrsigner/relays/AmberRelayStat.kt | 11 +++++++++-- .../nostrsigner/service/ConnectivityService.kt | 10 ++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/relays/AmberRelayStat.kt b/app/src/main/java/com/greenart7c3/nostrsigner/relays/AmberRelayStat.kt index 038df7e5..663353dc 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/relays/AmberRelayStat.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/relays/AmberRelayStat.kt @@ -6,6 +6,7 @@ import android.app.NotificationManager import android.app.PendingIntent import android.content.Intent import android.content.pm.PackageManager +import android.util.Log import androidx.core.app.ActivityCompat import androidx.core.app.NotificationChannelCompat import androidx.core.app.NotificationChannelGroupCompat @@ -18,6 +19,7 @@ import com.vitorpamplona.ammolite.relays.RelayStats import kotlinx.coroutines.launch object AmberRelayStats { + var oldMessage = "" var connected = 0 var available = 0 init { @@ -30,7 +32,7 @@ object AmberRelayStats { } private val innerCache = mutableMapOf() - fun createNotification(): Notification { + fun createNotification(): Notification? { val channelId = "ServiceChannel" val group = NotificationChannelGroupCompat.Builder("ServiceGroup") .setName(Amber.instance.getString(R.string.service)) @@ -76,6 +78,8 @@ object AmberRelayStats { connected + ping + sent + received + failed + error } + if (message == oldMessage && oldMessage.isNotBlank()) return null + oldMessage = message val contentIntent = Intent(Amber.instance, MainActivity::class.java) contentIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP) @@ -105,7 +109,10 @@ object AmberRelayStats { fun updateNotification() { val notificationManager = NotificationManagerCompat.from(Amber.instance) if (ActivityCompat.checkSelfPermission(Amber.instance, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { - notificationManager.notify(1, createNotification()) + createNotification()?.let { + Log.d(Amber.TAG, "updateNotification") + notificationManager.notify(1, it) + } } } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/ConnectivityService.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/ConnectivityService.kt index 14a9b342..d10a30b3 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/ConnectivityService.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/ConnectivityService.kt @@ -52,7 +52,6 @@ class ConnectivityService : Service() { if (BuildConfig.FLAVOR == "offline") return scope.launch(Dispatchers.IO) { - AmberRelayStats.updateNotification() Log.d( "ServiceManager NetworkCallback", "onCapabilitiesChanged: ${network.networkHandle} hasMobileData ${Amber.instance.isOnMobileDataState.value} hasWifi ${Amber.instance.isOnWifiDataState.value}", @@ -87,7 +86,9 @@ class ConnectivityService : Service() { Log.d(Amber.TAG, "onCreate ConnectivityService isStarted: $isStarted") if (isStarted) return isStarted = true - startForeground(1, AmberRelayStats.createNotification()) + AmberRelayStats.createNotification()?.let { + startForeground(1, it) + } Amber.instance.applicationIOScope.launch { while (Amber.instance.isStartingAppState.value) { delay(1000) @@ -118,7 +119,6 @@ class ConnectivityService : Service() { return } - AmberRelayStats.updateNotification() val hasAnyRelayDisconnected = Amber.instance.client.getAll().any { !it.isConnected() } if (hasAnyRelayDisconnected) { scope.launch { @@ -153,7 +153,9 @@ class ConnectivityService : Service() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { Log.d(Amber.TAG, "onStartCommand") - startForeground(1, AmberRelayStats.createNotification()) + AmberRelayStats.createNotification()?.let { + startForeground(1, it) + } return START_STICKY } }