From b66ed6f2e1e05d55311827f453473a914f01f054 Mon Sep 17 00:00:00 2001 From: gabriel20xx Date: Sat, 22 Nov 2025 16:10:15 +0100 Subject: [PATCH] feat: add notification prompting logic; implement methods to track and set notification prompts in PreferencesManager --- .../collabtable/app/data/preferences/PreferencesManager.kt | 7 +++++++ .../java/com/collabtable/app/ui/screens/ListsScreen.kt | 3 ++- .../com/collabtable/app/ui/screens/ServerSetupScreen.kt | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CollabTableAndroid/app/src/main/java/com/collabtable/app/data/preferences/PreferencesManager.kt b/CollabTableAndroid/app/src/main/java/com/collabtable/app/data/preferences/PreferencesManager.kt index 184a9bf..9da4139 100644 --- a/CollabTableAndroid/app/src/main/java/com/collabtable/app/data/preferences/PreferencesManager.kt +++ b/CollabTableAndroid/app/src/main/java/com/collabtable/app/data/preferences/PreferencesManager.kt @@ -179,6 +179,12 @@ class PreferencesManager( _notifyListContentUpdated.value = enabled } + fun hasPromptedNotifications(): Boolean = prefs.getBoolean(KEY_HAS_PROMPTED_NOTIFICATIONS, false) + + fun setHasPromptedNotifications(prompted: Boolean) { + prefs.edit().putBoolean(KEY_HAS_PROMPTED_NOTIFICATIONS, prompted).apply() + } + // Persist per-list column widths (fieldId -> widthDp) // Stored as a JSON object string in SharedPreferences under key: COLUMN_WIDTHS_PREFIX + listId fun getColumnWidths(listId: String): Map { @@ -283,6 +289,7 @@ class PreferencesManager( private const val KEY_NOTIFY_LIST_REMOVED = "notify_list_removed" private const val KEY_NOTIFY_LIST_CONTENT_UPDATED = "notify_list_content_updated" private const val KEY_LAST_LIST_NOTIFY_CHECK_TS = "last_list_notify_check_ts" + private const val KEY_HAS_PROMPTED_NOTIFICATIONS = "has_prompted_notifications" private const val COLUMN_WIDTHS_PREFIX = "column_widths_" // + listId private const val COLUMN_ALIGN_PREFIX = "column_align_" // + listId private const val DEFAULT_SERVER_URL = "http://10.0.2.2:3000/api/" diff --git a/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ListsScreen.kt b/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ListsScreen.kt index c50d58f..06c799a 100644 --- a/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ListsScreen.kt +++ b/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ListsScreen.kt @@ -119,6 +119,7 @@ fun ListsScreen( var notifPrompted by remember { mutableStateOf(false) } val permissionLauncher = rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> + prefsLocal.setHasPromptedNotifications(true) // Mirror setup behavior: toggle all list notifications to granted state prefsLocal.setNotifyListAddedEnabled(granted) prefsLocal.setNotifyListEditedEnabled(granted) @@ -132,7 +133,7 @@ fun ListsScreen( ConnectionStatusAction( prefs = prefsLocal, onBecameConnected = { - if (Build.VERSION.SDK_INT >= 33 && !notifPrompted) { + if (Build.VERSION.SDK_INT >= 33 && !notifPrompted && !prefsLocal.hasPromptedNotifications()) { val granted = ContextCompat.checkSelfPermission( context, diff --git a/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ServerSetupScreen.kt b/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ServerSetupScreen.kt index a9d7fc3..04cf759 100644 --- a/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ServerSetupScreen.kt +++ b/CollabTableAndroid/app/src/main/java/com/collabtable/app/ui/screens/ServerSetupScreen.kt @@ -68,6 +68,7 @@ fun ServerSetupScreen(onSetupComplete: () -> Unit) { fun finishOnce() { if (!completed) { completed = true + preferencesManager.setHasPromptedNotifications(true) onSetupComplete() } }