Move workers initialization to background
This commit is contained in:
@@ -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) }
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user