Debounce opentask sync status changes

And ignore sync status unless using opentask provider
pull/1188/head
Alex Baker 5 years ago
parent 930be1f249
commit bf71efde55

@ -9,9 +9,7 @@ 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
@ -19,8 +17,6 @@ import javax.inject.Inject
class OpenTaskContentObserver @Inject constructor(
@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)
@ -39,11 +35,9 @@ class OpenTaskContentObserver @Inject constructor(
}
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()
}
syncAdapters.setOpenTaskSyncActive(
ContentResolver.getCurrentSyncs().any { it.authority == authority }
)
}
companion object {

@ -3,6 +3,8 @@ package org.tasks.sync
import com.todoroo.astrid.data.SyncFlags
import com.todoroo.astrid.data.Task
import kotlinx.coroutines.*
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.data.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
@ -15,6 +17,7 @@ import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_CALDAV
import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_ETESYNC
import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_GOOGLE_TASKS
import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_OPENTASK
import org.tasks.preferences.Preferences
import java.util.concurrent.Executors.newSingleThreadExecutor
import javax.inject.Inject
import javax.inject.Singleton
@ -25,12 +28,22 @@ class SyncAdapters @Inject constructor(
private val caldavDao: CaldavDao,
private val googleTaskDao: GoogleTaskDao,
private val googleTaskListDao: GoogleTaskListDao,
private val openTaskDao: OpenTaskDao) {
private val openTaskDao: OpenTaskDao,
private val preferences: Preferences,
private val localBroadcastManager: LocalBroadcastManager
) {
private val scope = CoroutineScope(newSingleThreadExecutor().asCoroutineDispatcher() + SupervisorJob())
private val googleTasks = Debouncer(TAG_SYNC_GOOGLE_TASKS) { workManager.googleTaskSync(it) }
private val caldav = Debouncer(TAG_SYNC_CALDAV) { workManager.caldavSync(it) }
private val eteSync = Debouncer(TAG_SYNC_ETESYNC) { workManager.eteSync(it) }
private val opentasks = Debouncer(TAG_SYNC_OPENTASK) { workManager.openTaskSync(it) }
private val syncStatus = Debouncer("sync_status") {
if (preferences.getBoolean(R.string.p_sync_ongoing_android, false) != it
&& isOpenTaskSyncEnabled()) {
preferences.setBoolean(R.string.p_sync_ongoing_android, it)
localBroadcastManager.broadcastRefresh()
}
}
fun sync(task: Task, original: Task?) = scope.launch {
if (task.checkTransitory(SyncFlags.SUPPRESS_SYNC)) {
@ -53,6 +66,10 @@ class SyncAdapters @Inject constructor(
}
}
fun setOpenTaskSyncActive(active: Boolean) = scope.launch {
syncStatus.sync(active)
}
fun syncOpenTasks() = scope.launch {
opentasks.sync(true)
}

Loading…
Cancel
Save