diff options
author | Daniel Schaal <daniel@schaal.email> | 2021-07-24 09:14:02 +0300 |
---|---|---|
committer | Daniel Schaal <daniel@schaal.email> | 2021-07-25 10:11:16 +0300 |
commit | c73b706ffe1d58f332fd77e62af8890d538a06ad (patch) | |
tree | cde95fd30f6d5ae11d4b6da66d1205ae761cb49c | |
parent | e57ab04efa7358c019bf4ea3c11ce9243278590f (diff) |
Directly observer SyncWorker LiveData to determine sync status
4 files changed, 20 insertions, 22 deletions
diff --git a/app/src/main/java/email/schaal/ocreader/ListActivity.kt b/app/src/main/java/email/schaal/ocreader/ListActivity.kt index f92386cd..eb27d787 100644 --- a/app/src/main/java/email/schaal/ocreader/ListActivity.kt +++ b/app/src/main/java/email/schaal/ocreader/ListActivity.kt @@ -25,6 +25,7 @@ import android.content.Intent import android.content.SharedPreferences import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.os.Bundle +import android.util.Log import android.view.ActionMode import android.view.Menu import android.view.MenuItem @@ -41,6 +42,7 @@ import androidx.preference.PreferenceManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener import androidx.work.WorkInfo +import androidx.work.WorkManager import com.google.android.material.snackbar.Snackbar import com.mikepenz.aboutlibraries.LibsBuilder import email.schaal.ocreader.R.string @@ -123,7 +125,7 @@ class ListActivity : AppCompatActivity(), ItemViewHolder.OnClickListener, OnRefr true } R.id.menu_sync -> { - observeWork(SyncWorker.sync(this, SyncType.FULL_SYNC)) + SyncWorker.sync(this, SyncType.FULL_SYNC) true } R.id.menu_about -> { @@ -156,9 +158,6 @@ class ListActivity : AppCompatActivity(), ItemViewHolder.OnClickListener, OnRefr Preferences.SHOW_ONLY_UNREAD.key -> { feedViewModel.updateFolders(Preferences.SHOW_ONLY_UNREAD.getBoolean(preferences)) } - Preferences.SYS_SYNC_RUNNING.key -> { - updateSyncStatus(Preferences.SYS_SYNC_RUNNING.getBoolean(preferences)) - } } } @@ -183,15 +182,16 @@ class ListActivity : AppCompatActivity(), ItemViewHolder.OnClickListener, OnRefr layoutManager.onRestoreInstanceState(savedInstanceState.getParcelable(LAYOUT_MANAGER_STATE)) adapter.onRestoreInstanceState(savedInstanceState) } - } - private fun observeWork(workLiveData: LiveData<WorkInfo>) { - workLiveData.observe(this, { info -> - if(info != null && info.state.isFinished) { - info.outputData.getString(SyncWorker.KEY_EXCEPTION)?.let { - Snackbar.make(binding.listviewSwitcher, - it, Snackbar.LENGTH_LONG).show() + SyncWorker.getLiveData(applicationContext).observe(this, { infos -> + infos.firstOrNull()?.apply { + if(state.isFinished) { + outputData.getString(SyncWorker.KEY_EXCEPTION)?.let { + Snackbar.make(binding.listviewSwitcher, + it, Snackbar.LENGTH_LONG).show() + } } + updateSyncStatus(!state.isFinished) } }) } @@ -239,7 +239,7 @@ class ListActivity : AppCompatActivity(), ItemViewHolder.OnClickListener, OnRefr } if(result.first == Activity.RESULT_OK) { Queries.resetDatabase() - observeWork(SyncWorker.sync(this, SyncType.FULL_SYNC)) + SyncWorker.sync(this, SyncType.FULL_SYNC) } } @@ -305,13 +305,13 @@ class ListActivity : AppCompatActivity(), ItemViewHolder.OnClickListener, OnRefr } override fun onItemLongClick(item: Item, position: Int) { - if (actionMode != null || Preferences.SYS_SYNC_RUNNING.getBoolean(PreferenceManager.getDefaultSharedPreferences(this))) return + if (actionMode != null || binding.swipeRefreshLayout.isRefreshing) return adapter.toggleSelection(position) actionMode = startActionMode(this) } override fun onRefresh() { - observeWork(SyncWorker.sync(this, SyncType.FULL_SYNC)) + SyncWorker.sync(this, SyncType.FULL_SYNC) } override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { diff --git a/app/src/main/java/email/schaal/ocreader/OCReaderApplication.kt b/app/src/main/java/email/schaal/ocreader/OCReaderApplication.kt index 262c12bc..534a1290 100644 --- a/app/src/main/java/email/schaal/ocreader/OCReaderApplication.kt +++ b/app/src/main/java/email/schaal/ocreader/OCReaderApplication.kt @@ -45,7 +45,8 @@ class OCReaderApplication : Application() { if (Preferences.SORT_FIELD.getString(preferences) == "updatedAt") putString(Preferences.SORT_FIELD.key, Item::lastModified.name) - putBoolean(Preferences.SYS_SYNC_RUNNING.key, false) + // Directly observer WorkManager + remove("sync_running") }.apply() AppCompatDelegate.setDefaultNightMode(Preferences.getNightMode(preferences)) diff --git a/app/src/main/java/email/schaal/ocreader/Preferences.kt b/app/src/main/java/email/schaal/ocreader/Preferences.kt index 03551ffb..505fa226 100644 --- a/app/src/main/java/email/schaal/ocreader/Preferences.kt +++ b/app/src/main/java/email/schaal/ocreader/Preferences.kt @@ -42,7 +42,6 @@ enum class Preferences constructor(val key: String, private val defaultValue: An ARTICLE_FONT("article_font", "system"), BREADCRUMBS("breadcrumbs"), /** System preferences */ - SYS_SYNC_RUNNING("sync_running", false), SYS_NEEDS_UPDATE_AFTER_SYNC("needs_update_after_sync", false), SYS_DETECTED_API_LEVEL("detected_api_level"); diff --git a/app/src/main/java/email/schaal/ocreader/service/SyncWorker.kt b/app/src/main/java/email/schaal/ocreader/service/SyncWorker.kt index 90d989b8..11d6d190 100644 --- a/app/src/main/java/email/schaal/ocreader/service/SyncWorker.kt +++ b/app/src/main/java/email/schaal/ocreader/service/SyncWorker.kt @@ -22,14 +22,14 @@ class SyncWorker(context: Context, workerParams: WorkerParameters) : CoroutineWo workManager.enqueueUniqueWork(WORK_ID, ExistingWorkPolicy.KEEP, syncWork) return workManager.getWorkInfoByIdLiveData(syncWork.id) } + + fun getLiveData(context: Context): LiveData<List<WorkInfo>> { + return WorkManager.getInstance(context).getWorkInfosForUniqueWorkLiveData(WORK_ID) + } } override suspend fun doWork(): Result { val syncType: SyncType = SyncType[inputData.getString(KEY_SYNC_TYPE)] ?: SyncType.FULL_SYNC - val preferences = PreferenceManager.getDefaultSharedPreferences(applicationContext) - - if(syncType != SyncType.SYNC_CHANGES_ONLY) - preferences.edit().putBoolean(Preferences.SYS_SYNC_RUNNING.key, true).apply() return try { API(applicationContext).sync(syncType) @@ -42,8 +42,6 @@ class SyncWorker(context: Context, workerParams: WorkerParameters) : CoroutineWo applicationContext, e).message ) ) - } finally { - preferences.edit().putBoolean(Preferences.SYS_SYNC_RUNNING.key, false).apply() } } }
\ No newline at end of file |