Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/schaal/ocreader.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schaal <daniel@schaal.email>2021-07-24 09:14:02 +0300
committerDaniel Schaal <daniel@schaal.email>2021-07-25 10:11:16 +0300
commitc73b706ffe1d58f332fd77e62af8890d538a06ad (patch)
treecde95fd30f6d5ae11d4b6da66d1205ae761cb49c
parente57ab04efa7358c019bf4ea3c11ce9243278590f (diff)
Directly observer SyncWorker LiveData to determine sync status
-rw-r--r--app/src/main/java/email/schaal/ocreader/ListActivity.kt28
-rw-r--r--app/src/main/java/email/schaal/ocreader/OCReaderApplication.kt3
-rw-r--r--app/src/main/java/email/schaal/ocreader/Preferences.kt1
-rw-r--r--app/src/main/java/email/schaal/ocreader/service/SyncWorker.kt10
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