Sync when app comes to the foreground

If it hasn't syncd in 5+ minutes
pull/2146/head
Alex Baker 3 years ago
parent c5587d9fea
commit 68d80a5d2a

@ -7,7 +7,12 @@ import android.content.Intent
import android.util.Log import android.util.Log
import androidx.core.app.JobIntentService import androidx.core.app.JobIntentService
import androidx.hilt.work.HiltWorkerFactory import androidx.hilt.work.HiltWorkerFactory
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.coroutineScope
import androidx.work.Configuration import androidx.work.Configuration
import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.service.Upgrader import com.todoroo.astrid.service.Upgrader
import dagger.Lazy import dagger.Lazy
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
@ -30,6 +35,7 @@ import org.tasks.scheduling.RefreshScheduler
import org.tasks.themes.ThemeBase import org.tasks.themes.ThemeBase
import org.tasks.widget.AppWidgetManager import org.tasks.widget.AppWidgetManager
import timber.log.Timber import timber.log.Timber
import java.util.concurrent.TimeUnit
import javax.inject.Inject import javax.inject.Inject
@HiltAndroidApp @HiltAndroidApp
@ -56,6 +62,17 @@ class Tasks : Application(), Configuration.Provider {
ThemeBase.getThemeBase(preferences, inventory, null).setDefaultNightMode() ThemeBase.getThemeBase(preferences, inventory, null).setDefaultNightMode()
localBroadcastManager.registerRefreshReceiver(RefreshBroadcastReceiver()) localBroadcastManager.registerRefreshReceiver(RefreshBroadcastReceiver())
backgroundWork() backgroundWork()
ProcessLifecycleOwner.get().lifecycle.addObserver(
object : DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
if (now() - preferences.lastSync > TimeUnit.MINUTES.toMillis(5)) {
owner.lifecycle.coroutineScope.launch {
workManager.get().sync(true)
}
}
}
}
)
} }
private fun upgrade() { private fun upgrade() {
@ -105,7 +122,9 @@ class Tasks : Application(), Configuration.Provider {
} }
companion object { companion object {
@Suppress("KotlinConstantConditions")
const val IS_GOOGLE_PLAY = BuildConfig.FLAVOR == "googleplay" const val IS_GOOGLE_PLAY = BuildConfig.FLAVOR == "googleplay"
@Suppress("KotlinConstantConditions")
const val IS_GENERIC = BuildConfig.FLAVOR == "generic" const val IS_GENERIC = BuildConfig.FLAVOR == "generic"
} }
} }

@ -12,7 +12,11 @@ import androidx.work.WorkerParameters
import dagger.Lazy import dagger.Lazy
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import kotlinx.coroutines.* import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
@ -65,6 +69,7 @@ class SyncWork @AssistedInject constructor(
localBroadcastManager.broadcastRefresh() localBroadcastManager.broadcastRefresh()
try { try {
doSync() doSync()
preferences.lastSync = System.currentTimeMillis()
} catch (e: Exception) { } catch (e: Exception) {
firebase.reportException(e) firebase.reportException(e)
} finally { } finally {

@ -471,6 +471,12 @@ class Preferences @JvmOverloads constructor(
syncFlags.forEach { setBoolean(it, value) } syncFlags.forEach { setBoolean(it, value) }
} }
var lastSync: Long
get() = getLong(R.string.p_last_sync, 0L)
set(value) {
setLong(R.string.p_last_sync, value)
}
fun <T> getPrefs(c: Class<T>): Map<String, T> = fun <T> getPrefs(c: Class<T>): Map<String, T> =
prefs.all.filter { (_, value) -> c.isInstance(value) } as Map<String, T> prefs.all.filter { (_, value) -> c.isInstance(value) } as Map<String, T>

@ -447,4 +447,5 @@
<string name="p_completed_tasks_at_bottom">completed_tasks_at_bottom</string> <string name="p_completed_tasks_at_bottom">completed_tasks_at_bottom</string>
<string name="p_completed_tasks_sort">completed_tasks_sort</string> <string name="p_completed_tasks_sort">completed_tasks_sort</string>
<string name="p_shown_beast_mode_hint">shown_beast_mode_hint</string> <string name="p_shown_beast_mode_hint">shown_beast_mode_hint</string>
<string name="p_last_sync">last_sync_time</string>
</resources> </resources>

Loading…
Cancel
Save