diff --git a/changelog.d/4298.bugfix b/changelog.d/4298.bugfix new file mode 100644 index 0000000000..4da2ff899b --- /dev/null +++ b/changelog.d/4298.bugfix @@ -0,0 +1 @@ +Fixing missing F-Droid notifications when in background due to background syncs not triggering \ No newline at end of file diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt index d4bfd4ee8c..dfe43aed6f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt @@ -120,9 +120,11 @@ interface Session : fun requireBackgroundSync() /** - * Launches infinite periodic background syncs - * This does not work in doze mode :/ - * If battery optimization is on it can work in app standby but that's all :/ + * Launches infinite self rescheduling background syncs via the WorkManager + * + * While dozing, syncs will only occur during maintenance windows + * For reliability it's recommended to also start a long running foreground service + * along with disabling battery optimizations */ fun startAutomaticBackgroundSync(timeOutInSeconds: Long, repeatDelayInSeconds: Long) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt index 9480cc73f1..c17b31b910 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt @@ -105,9 +105,8 @@ abstract class SyncService : Service() { } } } - - // It's ok to be not sticky because we will explicitly start it again on the next alarm? - return START_NOT_STICKY + // Attempt to continue scheduling syncs after killed service is restarted + return START_REDELIVER_INTENT } override fun onDestroy() { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt index b81804feb5..41bb1a44a6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt @@ -121,9 +121,9 @@ internal class SyncWorker(context: Context, .setBackoffCriteria(BackoffPolicy.LINEAR, WorkManagerProvider.BACKOFF_DELAY_MILLIS, TimeUnit.MILLISECONDS) .setInitialDelay(delayInSeconds, TimeUnit.SECONDS) .build() - + // Avoid risking multiple chains of syncs by replacing the existing chain workManagerProvider.workManager - .enqueueUniqueWork(BG_SYNC_WORK_NAME, ExistingWorkPolicy.APPEND_OR_REPLACE, workRequest) + .enqueueUniqueWork(BG_SYNC_WORK_NAME, ExistingWorkPolicy.REPLACE, workRequest) } fun stopAnyBackgroundSync(workManagerProvider: WorkManagerProvider) { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt index 7cc00d023f..a12587ac56 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt @@ -29,7 +29,7 @@ import javax.inject.Inject @MatrixScope internal class BackgroundDetectionObserver @Inject constructor() : LifecycleObserver { - var isInBackground: Boolean = false + var isInBackground: Boolean = true private set private diff --git a/vector/src/fdroid/AndroidManifest.xml b/vector/src/fdroid/AndroidManifest.xml index 3a7c107138..022b08f16d 100644 --- a/vector/src/fdroid/AndroidManifest.xml +++ b/vector/src/fdroid/AndroidManifest.xml @@ -1,9 +1,11 @@ +