Move workers initialization to background

This commit is contained in:
Koitharu
2022-02-27 18:47:47 +02:00
parent 894900e955
commit 29df122369
4 changed files with 40 additions and 45 deletions

View File

@@ -56,10 +56,10 @@ class AppSettings(context: Context) {
get() = prefs.getBoolean(KEY_TRAFFIC_WARNING, true) get() = prefs.getBoolean(KEY_TRAFFIC_WARNING, true)
set(value) = prefs.edit { putBoolean(KEY_TRAFFIC_WARNING, value) } set(value) = prefs.edit { putBoolean(KEY_TRAFFIC_WARNING, value) }
val appUpdateAuto: Boolean val isUpdateCheckingEnabled: Boolean
get() = prefs.getBoolean(KEY_APP_UPDATE_AUTO, true) get() = prefs.getBoolean(KEY_APP_UPDATE_AUTO, true)
var appUpdate: Long var lastUpdateCheckTimestamp: Long
get() = prefs.getLong(KEY_APP_UPDATE, 0L) get() = prefs.getLong(KEY_APP_UPDATE, 0L)
set(value) = prefs.edit { putLong(KEY_APP_UPDATE, value) } set(value) = prefs.edit { putLong(KEY_APP_UPDATE, value) }

View File

@@ -15,12 +15,16 @@ import androidx.drawerlayout.widget.DrawerLayout
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.fragment.app.commit import androidx.fragment.app.commit
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.CircularProgressDrawable import androidx.swiperefreshlayout.widget.CircularProgressDrawable
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.navigation.NavigationView import com.google.android.material.navigation.NavigationView
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
@@ -28,6 +32,7 @@ import org.koitharu.kotatsu.base.ui.BaseActivity
import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.Manga
import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.core.model.MangaSource
import org.koitharu.kotatsu.core.prefs.AppSection import org.koitharu.kotatsu.core.prefs.AppSection
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.databinding.ActivityMainBinding import org.koitharu.kotatsu.databinding.ActivityMainBinding
import org.koitharu.kotatsu.databinding.NavigationHeaderBinding import org.koitharu.kotatsu.databinding.NavigationHeaderBinding
import org.koitharu.kotatsu.details.ui.DetailsActivity import org.koitharu.kotatsu.details.ui.DetailsActivity
@@ -46,7 +51,10 @@ import org.koitharu.kotatsu.settings.SettingsActivity
import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment
import org.koitharu.kotatsu.tracker.ui.FeedFragment import org.koitharu.kotatsu.tracker.ui.FeedFragment
import org.koitharu.kotatsu.tracker.work.TrackWorker import org.koitharu.kotatsu.tracker.work.TrackWorker
import org.koitharu.kotatsu.utils.ext.* import org.koitharu.kotatsu.utils.ext.getDisplayMessage
import org.koitharu.kotatsu.utils.ext.hideKeyboard
import org.koitharu.kotatsu.utils.ext.measureHeight
import org.koitharu.kotatsu.utils.ext.resolveDp
class MainActivity : BaseActivity<ActivityMainBinding>(), class MainActivity : BaseActivity<ActivityMainBinding>(),
NavigationView.OnNavigationItemSelectedListener, AppBarOwner, NavigationView.OnNavigationItemSelectedListener, AppBarOwner,
@@ -334,9 +342,15 @@ class MainActivity : BaseActivity<ActivityMainBinding>(),
} }
private fun onFirstStart() { private fun onFirstStart() {
TrackWorker.setup(applicationContext) lifecycleScope.launch(Dispatchers.Default) {
AppUpdateChecker(this@MainActivity).launchIfNeeded() TrackWorker.setup(applicationContext)
OnboardDialogFragment.showWelcome(get(), supportFragmentManager) AppUpdateChecker(this@MainActivity).checkIfNeeded()
if (!get<AppSettings>().isSourcesSelected) {
withContext(Dispatchers.Main) {
OnboardDialogFragment.showWelcome(supportFragmentManager)
}
}
}
} }
private companion object { private companion object {

View File

@@ -7,11 +7,8 @@ import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.annotation.MainThread import androidx.annotation.MainThread
import androidx.lifecycle.lifecycleScope
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
import org.koitharu.kotatsu.BuildConfig import org.koitharu.kotatsu.BuildConfig
@@ -37,44 +34,31 @@ class AppUpdateChecker(private val activity: ComponentActivity) {
private val settings = activity.get<AppSettings>() private val settings = activity.get<AppSettings>()
private val repo = activity.get<GithubRepository>() private val repo = activity.get<GithubRepository>()
fun launchIfNeeded(): Job? { suspend fun checkIfNeeded(): Boolean? = if (
return if (settings.appUpdateAuto && settings.appUpdate + PERIOD < System.currentTimeMillis()) { settings.isUpdateCheckingEnabled &&
launch() settings.lastUpdateCheckTimestamp + PERIOD < System.currentTimeMillis()
} else { ) {
null checkNow()
} } else {
} null
fun launch(): Job? {
return if (isUpdateSupported(activity)) {
launchInternal()
} else {
null
}
} }
suspend fun checkNow() = runCatching { suspend fun checkNow() = runCatching {
withContext(Dispatchers.Default) { val version = repo.getLatestVersion()
val version = repo.getLatestVersion() val newVersionId = VersionId.parse(version.name)
val newVersionId = VersionId.parse(version.name) val currentVersionId = VersionId.parse(BuildConfig.VERSION_NAME)
val currentVersionId = VersionId.parse(BuildConfig.VERSION_NAME) val result = newVersionId > currentVersionId
val result = newVersionId > currentVersionId if (result) {
if (result) { withContext(Dispatchers.Main) {
withContext(Dispatchers.Main) { showUpdateDialog(version)
showUpdateDialog(version)
}
} }
settings.appUpdate = System.currentTimeMillis()
result
} }
settings.lastUpdateCheckTimestamp = System.currentTimeMillis()
result
}.onFailure { }.onFailure {
it.printStackTrace() it.printStackTrace()
}.getOrNull() }.getOrNull()
private fun launchInternal() = activity.lifecycleScope.launch {
checkNow()
}
@MainThread @MainThread
private fun showUpdateDialog(version: AppVersion) { private fun showUpdateDialog(version: AppVersion) {
MaterialAlertDialogBuilder(activity) MaterialAlertDialogBuilder(activity)

View File

@@ -11,7 +11,6 @@ import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.base.ui.AlertDialogFragment import org.koitharu.kotatsu.base.ui.AlertDialogFragment
import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.databinding.DialogOnboardBinding import org.koitharu.kotatsu.databinding.DialogOnboardBinding
import org.koitharu.kotatsu.settings.onboard.adapter.SourceLocalesAdapter import org.koitharu.kotatsu.settings.onboard.adapter.SourceLocalesAdapter
import org.koitharu.kotatsu.settings.onboard.model.SourceLocale import org.koitharu.kotatsu.settings.onboard.model.SourceLocale
@@ -75,12 +74,10 @@ class OnboardDialogFragment : AlertDialogFragment<DialogOnboardBinding>(),
fun show(fm: FragmentManager) = OnboardDialogFragment().show(fm, TAG) fun show(fm: FragmentManager) = OnboardDialogFragment().show(fm, TAG)
fun showWelcome(settings: AppSettings, fm: FragmentManager) { fun showWelcome(fm: FragmentManager) {
if (!settings.isSourcesSelected) { OnboardDialogFragment().withArgs(1) {
OnboardDialogFragment().withArgs(1) { putBoolean(ARG_WELCOME, true)
putBoolean(ARG_WELCOME, true) }.show(fm, TAG)
}.show(fm, TAG)
}
} }
} }
} }