Sync when app comes to the foreground

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

@ -7,7 +7,12 @@ import android.content.Intent
import android.util.Log
import androidx.core.app.JobIntentService
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 com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.service.Upgrader
import dagger.Lazy
import dagger.hilt.android.HiltAndroidApp
@ -30,6 +35,7 @@ import org.tasks.scheduling.RefreshScheduler
import org.tasks.themes.ThemeBase
import org.tasks.widget.AppWidgetManager
import timber.log.Timber
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@HiltAndroidApp
@ -56,6 +62,17 @@ class Tasks : Application(), Configuration.Provider {
ThemeBase.getThemeBase(preferences, inventory, null).setDefaultNightMode()
localBroadcastManager.registerRefreshReceiver(RefreshBroadcastReceiver())
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() {
@ -105,7 +122,9 @@ class Tasks : Application(), Configuration.Provider {
}
companion object {
@Suppress("KotlinConstantConditions")
const val IS_GOOGLE_PLAY = BuildConfig.FLAVOR == "googleplay"
@Suppress("KotlinConstantConditions")
const val IS_GENERIC = BuildConfig.FLAVOR == "generic"
}
}

@ -12,7 +12,11 @@ import androidx.work.WorkerParameters
import dagger.Lazy
import dagger.assisted.Assisted
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.R
import org.tasks.analytics.Firebase
@ -65,6 +69,7 @@ class SyncWork @AssistedInject constructor(
localBroadcastManager.broadcastRefresh()
try {
doSync()
preferences.lastSync = System.currentTimeMillis()
} catch (e: Exception) {
firebase.reportException(e)
} finally {

@ -471,6 +471,12 @@ class Preferences @JvmOverloads constructor(
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> =
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_sort">completed_tasks_sort</string>
<string name="p_shown_beast_mode_hint">shown_beast_mode_hint</string>
<string name="p_last_sync">last_sync_time</string>
</resources>

Loading…
Cancel
Save