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 android.os.HandlerThread
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.dmfs.tasks.contract.TaskContract.* import org.dmfs.tasks.contract.TaskContract.*
import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.preferences.Preferences
import org.tasks.sync.SyncAdapters import org.tasks.sync.SyncAdapters
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -19,8 +17,6 @@ import javax.inject.Inject
class OpenTaskContentObserver @Inject constructor( class OpenTaskContentObserver @Inject constructor(
@ApplicationContext context: Context, @ApplicationContext context: Context,
private val syncAdapters: SyncAdapters, private val syncAdapters: SyncAdapters,
private val preferences: Preferences,
private val localBroadcastManager: LocalBroadcastManager
) : ContentObserver(getHandler()), SyncStatusObserver { ) : ContentObserver(getHandler()), SyncStatusObserver {
val authority = context.getString(R.string.opentasks_authority) val authority = context.getString(R.string.opentasks_authority)
@ -39,11 +35,9 @@ class OpenTaskContentObserver @Inject constructor(
} }
override fun onStatusChanged(which: Int) { override fun onStatusChanged(which: Int) {
val active = ContentResolver.getCurrentSyncs().any { it.authority == authority } syncAdapters.setOpenTaskSyncActive(
if (preferences.getBoolean(R.string.p_sync_ongoing_android, false) != active) { ContentResolver.getCurrentSyncs().any { it.authority == authority }
preferences.setBoolean(R.string.p_sync_ongoing_android, active) )
localBroadcastManager.broadcastRefresh()
}
} }
companion object { companion object {

@ -3,6 +3,8 @@ package org.tasks.sync
import com.todoroo.astrid.data.SyncFlags import com.todoroo.astrid.data.SyncFlags
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import kotlinx.coroutines.* 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_CALDAV
import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC import org.tasks.data.CaldavAccount.Companion.TYPE_ETESYNC
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS 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_ETESYNC
import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_GOOGLE_TASKS import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_GOOGLE_TASKS
import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_OPENTASK import org.tasks.jobs.WorkManager.Companion.TAG_SYNC_OPENTASK
import org.tasks.preferences.Preferences
import java.util.concurrent.Executors.newSingleThreadExecutor import java.util.concurrent.Executors.newSingleThreadExecutor
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -25,12 +28,22 @@ class SyncAdapters @Inject constructor(
private val caldavDao: CaldavDao, private val caldavDao: CaldavDao,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDao,
private val googleTaskListDao: GoogleTaskListDao, 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 scope = CoroutineScope(newSingleThreadExecutor().asCoroutineDispatcher() + SupervisorJob())
private val googleTasks = Debouncer(TAG_SYNC_GOOGLE_TASKS) { workManager.googleTaskSync(it) } private val googleTasks = Debouncer(TAG_SYNC_GOOGLE_TASKS) { workManager.googleTaskSync(it) }
private val caldav = Debouncer(TAG_SYNC_CALDAV) { workManager.caldavSync(it) } private val caldav = Debouncer(TAG_SYNC_CALDAV) { workManager.caldavSync(it) }
private val eteSync = Debouncer(TAG_SYNC_ETESYNC) { workManager.eteSync(it) } private val eteSync = Debouncer(TAG_SYNC_ETESYNC) { workManager.eteSync(it) }
private val opentasks = Debouncer(TAG_SYNC_OPENTASK) { workManager.openTaskSync(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 { fun sync(task: Task, original: Task?) = scope.launch {
if (task.checkTransitory(SyncFlags.SUPPRESS_SYNC)) { 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 { fun syncOpenTasks() = scope.launch {
opentasks.sync(true) opentasks.sync(true)
} }

Loading…
Cancel
Save