From f2a0eac367cdbdf7ef96fcc8553c11c41e164450 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 23 Sep 2020 15:57:40 -0500 Subject: [PATCH] Show sync indicator when davx5/etesync are syncing --- app/src/main/AndroidManifest.xml | 5 +++ .../opentasks/OpenTaskContentObserver.kt | 35 +++++++++++++++---- .../java/org/tasks/preferences/Preferences.kt | 3 +- app/src/main/res/values/keys.xml | 1 + 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7441f9e0a..dfb1e5e6c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -77,6 +77,11 @@ + + + + + diff --git a/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt b/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt index d3cb42abd..59a3799c6 100644 --- a/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt +++ b/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt @@ -1,19 +1,29 @@ package org.tasks.opentasks +import android.content.ContentResolver import android.content.Context +import android.content.SyncStatusObserver import android.database.ContentObserver import android.net.Uri import android.os.Handler import android.os.HandlerThread +import dagger.hilt.android.qualifiers.ApplicationContext import org.dmfs.tasks.contract.TaskContract.* +import org.tasks.LocalBroadcastManager import org.tasks.R +import org.tasks.preferences.Preferences import org.tasks.sync.SyncAdapters import timber.log.Timber import javax.inject.Inject class OpenTaskContentObserver @Inject constructor( - private val syncAdapters: SyncAdapters -) : ContentObserver(getHandler()) { + @ApplicationContext context: Context, + private val syncAdapters: SyncAdapters, + private val preferences: Preferences, + private val localBroadcastManager: LocalBroadcastManager +) : ContentObserver(getHandler()), SyncStatusObserver { + + val authority = context.getString(R.string.opentasks_authority) override fun onChange(selfChange: Boolean) = onChange(selfChange, null) @@ -28,17 +38,28 @@ class OpenTaskContentObserver @Inject constructor( syncAdapters.syncOpenTasks() } + override fun onStatusChanged(which: Int) { + val active = ContentResolver.getCurrentSyncs().any { it.authority == authority } + if (preferences.getBoolean(R.string.p_sync_ongoing_android, false) != active) { + preferences.setBoolean(R.string.p_sync_ongoing_android, active) + localBroadcastManager.broadcastRefresh() + } + } + companion object { fun getHandler() = HandlerThread("OT-handler)").let { it.start() Handler(it.looper) } - fun registerObserver(context: Context, observer: ContentObserver) { - getUris(context.getString(R.string.opentasks_authority)) - .forEach { - context.contentResolver.registerContentObserver(it, false, observer) - } + fun registerObserver(context: Context, observer: OpenTaskContentObserver) { + getUris(observer.authority).forEach { + context.contentResolver.registerContentObserver(it, false, observer) + } + ContentResolver.addStatusChangeListener( + ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE, + observer + ) } private fun getUris(authority: String): List = diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index bcb4c7427..9cfd8b789 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -502,6 +502,7 @@ class Preferences @JvmOverloads constructor(private val context: Context, name: private val syncFlags = listOf( R.string.p_sync_ongoing_google_tasks, R.string.p_sync_ongoing_caldav, - R.string.p_sync_ongoing_etesync) + R.string.p_sync_ongoing_etesync, + R.string.p_sync_ongoing_android) } } \ No newline at end of file diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 0d27e7843..1242b5574 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -337,6 +337,7 @@ sync_ongoing_caldav sync_ongoing_etesync sync_ongoing_opentasks + sync_ongoing_android last_backup show_description show_full_description