diff --git a/app/src/main/java/com/github/libretube/MyApp.kt b/app/src/main/java/com/github/libretube/MyApp.kt index 52d9919b9..98fe2f6ec 100644 --- a/app/src/main/java/com/github/libretube/MyApp.kt +++ b/app/src/main/java/com/github/libretube/MyApp.kt @@ -6,6 +6,7 @@ import android.app.NotificationManager import android.os.Build import android.os.StrictMode import android.os.StrictMode.VmPolicy +import androidx.work.ExistingPeriodicWorkPolicy import com.github.libretube.preferences.PreferenceHelper import com.github.libretube.preferences.PreferenceKeys import com.github.libretube.util.NotificationHelper @@ -39,7 +40,7 @@ class MyApp : Application() { /** * initialize the notification listener in the background */ - NotificationHelper.enqueueWork(this) + NotificationHelper.enqueueWork(this, ExistingPeriodicWorkPolicy.KEEP) } /** diff --git a/app/src/main/java/com/github/libretube/preferences/NotificationSettings.kt b/app/src/main/java/com/github/libretube/preferences/NotificationSettings.kt index d90e4f71e..cd50f3335 100644 --- a/app/src/main/java/com/github/libretube/preferences/NotificationSettings.kt +++ b/app/src/main/java/com/github/libretube/preferences/NotificationSettings.kt @@ -4,6 +4,7 @@ import android.os.Bundle import androidx.preference.ListPreference import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreferenceCompat +import androidx.work.ExistingPeriodicWorkPolicy import com.github.libretube.R import com.github.libretube.activities.SettingsActivity import com.github.libretube.util.NotificationHelper @@ -19,14 +20,22 @@ class NotificationSettings : PreferenceFragmentCompat() { val notificationsEnabled = findPreference(PreferenceKeys.NOTIFICATION_ENABLED) notificationsEnabled?.setOnPreferenceChangeListener { _, _ -> - NotificationHelper.enqueueWork(requireContext()) + updateNotificationPrefs() true } val checkingFrequency = findPreference(PreferenceKeys.CHECKING_FREQUENCY) checkingFrequency?.setOnPreferenceChangeListener { _, _ -> - NotificationHelper.enqueueWork(requireContext()) + updateNotificationPrefs() true } } + + private fun updateNotificationPrefs() { + // replace the previous queued work request + NotificationHelper.enqueueWork( + requireContext(), + ExistingPeriodicWorkPolicy.REPLACE + ) + } } diff --git a/app/src/main/java/com/github/libretube/util/NotificationHelper.kt b/app/src/main/java/com/github/libretube/util/NotificationHelper.kt index fbeada8a3..98a93c5cb 100644 --- a/app/src/main/java/com/github/libretube/util/NotificationHelper.kt +++ b/app/src/main/java/com/github/libretube/util/NotificationHelper.kt @@ -20,7 +20,8 @@ import java.util.concurrent.TimeUnit object NotificationHelper { fun enqueueWork( - context: Context + context: Context, + existingPeriodicWorkPolicy: ExistingPeriodicWorkPolicy ) { // get the notification preferences PreferenceHelper.setContext(context) @@ -57,7 +58,7 @@ object NotificationHelper { WorkManager.getInstance(context) .enqueueUniquePeriodicWork( uniqueWorkName, - ExistingPeriodicWorkPolicy.REPLACE, + existingPeriodicWorkPolicy, notificationWorker ) } else {