diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index a9153db..766a75d 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "com.devlab.app" minSdk = 26 targetSdk = 37 - versionCode = 16 - versionName = "1.8.4" + versionCode = 17 + versionName = "1.8.5" } buildTypes { diff --git a/android/app/src/main/java/com/devlab/app/MainActivity.kt b/android/app/src/main/java/com/devlab/app/MainActivity.kt index ea9d5a7..c67adb7 100644 --- a/android/app/src/main/java/com/devlab/app/MainActivity.kt +++ b/android/app/src/main/java/com/devlab/app/MainActivity.kt @@ -62,19 +62,6 @@ class MainActivity : ComponentActivity() { requestNotificationPermission() checkForUpdates() - lifecycle.addObserver(LifecycleEventObserver { _, event -> - when (event) { - Lifecycle.Event.ON_RESUME -> { - ServerManagerApp.instance.notificationPoller?.start() - ServerManagerApp.instance.notificationPoller?.checkNow() - } - Lifecycle.Event.ON_PAUSE -> { - ServerManagerApp.instance.notificationPoller?.stop() - } - else -> {} - } - }) - setContent { ServerManagerTheme { AppRoot() @@ -158,15 +145,6 @@ fun AppRoot() { } } - DisposableEffect(Unit) { - ServerManagerApp.instance.notificationPoller?.onCountChanged = { count -> - unreadCount = count - } - onDispose { - ServerManagerApp.instance.notificationPoller?.onCountChanged = null - } - } - Scaffold( bottomBar = { if (inLoggedInArea) { diff --git a/android/app/src/main/java/com/devlab/app/ServerManagerApp.kt b/android/app/src/main/java/com/devlab/app/ServerManagerApp.kt index 79511f5..385f315 100644 --- a/android/app/src/main/java/com/devlab/app/ServerManagerApp.kt +++ b/android/app/src/main/java/com/devlab/app/ServerManagerApp.kt @@ -3,20 +3,15 @@ package com.devlab.app import android.app.Application import com.devlab.app.service.NotificationForegroundService import com.devlab.app.util.NotificationHelper -import com.devlab.app.util.NotificationPoller import com.devlab.app.worker.NotificationWorker class ServerManagerApp : Application() { - var notificationPoller: NotificationPoller? = null - private set - override fun onCreate() { super.onCreate() instance = this NotificationHelper.createChannels(this) NotificationWorker.schedule(this) NotificationForegroundService.start(this) - notificationPoller = NotificationPoller(this) } companion object { diff --git a/public/sysadmin.apk b/public/sysadmin.apk index b3ac183..ebe6cfb 100644 Binary files a/public/sysadmin.apk and b/public/sysadmin.apk differ diff --git a/src/Controllers/AdminController.php b/src/Controllers/AdminController.php index dc6dcaa..aac764f 100755 --- a/src/Controllers/AdminController.php +++ b/src/Controllers/AdminController.php @@ -299,6 +299,18 @@ class AdminController return; } + if ($userId) { + $userModel = new User(); + $targetUser = $userModel->findById($userId); + if (!$targetUser || empty($targetUser['notifications_enabled'])) { + $this->view->json([ + 'success' => true, + 'message' => 'Notification saved to database. User has notifications disabled.', + ]); + return; + } + } + $notificationModel = new Notification(); $noteId = $notificationModel->create([ 'user_id' => $userId, diff --git a/src/Services/FCMService.php b/src/Services/FCMService.php index dd9190e..aeaa0e5 100644 --- a/src/Services/FCMService.php +++ b/src/Services/FCMService.php @@ -54,6 +54,12 @@ class FCMService { if (!$this->isConfigured()) return false; + $enabled = $this->db->fetch( + 'SELECT notifications_enabled FROM users WHERE id = ? AND notifications_enabled = 1', + [$userId] + ); + if (!$enabled) return false; + $tokens = $this->db->fetchAll( 'SELECT id, token FROM user_fcm_tokens WHERE user_id = ?', [$userId] @@ -78,7 +84,11 @@ class FCMService { if (!$this->isConfigured()) return 0; - $tokens = $this->db->fetchAll('SELECT id, token FROM user_fcm_tokens'); + $tokens = $this->db->fetchAll( + 'SELECT f.id, f.token FROM user_fcm_tokens f + JOIN users u ON u.id = f.user_id + WHERE u.notifications_enabled = 1' + ); if (empty($tokens)) return 0; $sent = 0;