diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b0da79..f0b3b76 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "ru.kalinamall.seaca" minSdk = 26 targetSdk = 35 - versionCode = 25 - versionName = "0.5.11" + versionCode = 26 + versionName = "0.5.12" } buildTypes { @@ -54,6 +54,7 @@ dependencies { implementation("androidx.activity:activity-compose:1.9.3") implementation("androidx.navigation:navigation-compose:2.8.3") implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.7") + implementation("androidx.lifecycle:lifecycle-process:2.8.7") implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7") implementation("androidx.datastore:datastore-preferences:1.1.1") implementation("androidx.security:security-crypto:1.1.0-alpha06") diff --git a/app/src/main/java/ru/kalinamall/seaca/SeacaApplication.kt b/app/src/main/java/ru/kalinamall/seaca/SeacaApplication.kt index 8f57ddd..8231940 100644 --- a/app/src/main/java/ru/kalinamall/seaca/SeacaApplication.kt +++ b/app/src/main/java/ru/kalinamall/seaca/SeacaApplication.kt @@ -3,12 +3,14 @@ package ru.kalinamall.seaca import android.app.Application import kotlinx.coroutines.runBlocking import ru.kalinamall.seaca.data.SessionStore +import ru.kalinamall.seaca.push.AppForegroundState import ru.kalinamall.seaca.push.NotificationHelper import ru.kalinamall.seaca.push.NotificationSoundResolver class SeacaApplication : Application() { override fun onCreate() { super.onCreate() + AppForegroundState.bind() val store = SessionStore(this) val settings = runBlocking { NotificationSoundResolver.normalizeStoredSettings(this@SeacaApplication, store) diff --git a/app/src/main/java/ru/kalinamall/seaca/push/AppForegroundState.kt b/app/src/main/java/ru/kalinamall/seaca/push/AppForegroundState.kt new file mode 100644 index 0000000..2bbdf41 --- /dev/null +++ b/app/src/main/java/ru/kalinamall/seaca/push/AppForegroundState.kt @@ -0,0 +1,27 @@ +package ru.kalinamall.seaca.push + +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ProcessLifecycleOwner + +/** True, пока хотя бы одна activity приложения видима (ProcessLifecycleOwner.onStart). */ +object AppForegroundState { + @Volatile + private var inForeground = false + + fun bind() { + ProcessLifecycleOwner.get().lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onStart(owner: LifecycleOwner) { + inForeground = true + } + + override fun onStop(owner: LifecycleOwner) { + inForeground = false + } + }, + ) + } + + fun isInForeground(): Boolean = inForeground +} diff --git a/app/src/main/java/ru/kalinamall/seaca/push/SeacaMessagingService.kt b/app/src/main/java/ru/kalinamall/seaca/push/SeacaMessagingService.kt index 9db72a1..5b046d1 100644 --- a/app/src/main/java/ru/kalinamall/seaca/push/SeacaMessagingService.kt +++ b/app/src/main/java/ru/kalinamall/seaca/push/SeacaMessagingService.kt @@ -15,6 +15,7 @@ class SeacaMessagingService : FirebaseMessagingService() { private val repo by lazy { SacRepository(applicationContext) } override fun onMessageReceived(message: RemoteMessage) { + if (AppForegroundState.isInForeground()) return val mode = runBlocking { repo.session.getNotificationMode() } when (mode) { NotificationMode.OFF -> return