diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt index 17b8adeeb..64a407dbc 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -56,10 +56,10 @@ class AppSettings(context: Context) { get() = prefs.getBoolean(KEY_TRAFFIC_WARNING, true) set(value) = prefs.edit { putBoolean(KEY_TRAFFIC_WARNING, value) } - val appUpdateAuto: Boolean + val isUpdateCheckingEnabled: Boolean get() = prefs.getBoolean(KEY_APP_UPDATE_AUTO, true) - var appUpdate: Long + var lastUpdateCheckTimestamp: Long get() = prefs.getLong(KEY_APP_UPDATE, 0L) set(value) = prefs.edit { putLong(KEY_APP_UPDATE, value) } diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt index f59e0210b..380b4942b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -15,12 +15,16 @@ import androidx.drawerlayout.widget.DrawerLayout import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.commit +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.CircularProgressDrawable import com.google.android.material.appbar.AppBarLayout import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.navigation.NavigationView 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.androidx.viewmodel.ext.android.viewModel 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.MangaSource 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.NavigationHeaderBinding 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.tracker.ui.FeedFragment 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(), NavigationView.OnNavigationItemSelectedListener, AppBarOwner, @@ -334,9 +342,15 @@ class MainActivity : BaseActivity(), } private fun onFirstStart() { - TrackWorker.setup(applicationContext) - AppUpdateChecker(this@MainActivity).launchIfNeeded() - OnboardDialogFragment.showWelcome(get(), supportFragmentManager) + lifecycleScope.launch(Dispatchers.Default) { + TrackWorker.setup(applicationContext) + AppUpdateChecker(this@MainActivity).checkIfNeeded() + if (!get().isSourcesSelected) { + withContext(Dispatchers.Main) { + OnboardDialogFragment.showWelcome(supportFragmentManager) + } + } + } } private companion object { diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/AppUpdateChecker.kt b/app/src/main/java/org/koitharu/kotatsu/settings/AppUpdateChecker.kt index 61f0e05c0..7a991d675 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/AppUpdateChecker.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/AppUpdateChecker.kt @@ -7,11 +7,8 @@ import android.content.pm.PackageManager import android.net.Uri import androidx.activity.ComponentActivity import androidx.annotation.MainThread -import androidx.lifecycle.lifecycleScope import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.koin.android.ext.android.get import org.koitharu.kotatsu.BuildConfig @@ -37,44 +34,31 @@ class AppUpdateChecker(private val activity: ComponentActivity) { private val settings = activity.get() private val repo = activity.get() - fun launchIfNeeded(): Job? { - return if (settings.appUpdateAuto && settings.appUpdate + PERIOD < System.currentTimeMillis()) { - launch() - } else { - null - } - } - - fun launch(): Job? { - return if (isUpdateSupported(activity)) { - launchInternal() - } else { - null - } + suspend fun checkIfNeeded(): Boolean? = if ( + settings.isUpdateCheckingEnabled && + settings.lastUpdateCheckTimestamp + PERIOD < System.currentTimeMillis() + ) { + checkNow() + } else { + null } suspend fun checkNow() = runCatching { - withContext(Dispatchers.Default) { - val version = repo.getLatestVersion() - val newVersionId = VersionId.parse(version.name) - val currentVersionId = VersionId.parse(BuildConfig.VERSION_NAME) - val result = newVersionId > currentVersionId - if (result) { - withContext(Dispatchers.Main) { - showUpdateDialog(version) - } + val version = repo.getLatestVersion() + val newVersionId = VersionId.parse(version.name) + val currentVersionId = VersionId.parse(BuildConfig.VERSION_NAME) + val result = newVersionId > currentVersionId + if (result) { + withContext(Dispatchers.Main) { + showUpdateDialog(version) } - settings.appUpdate = System.currentTimeMillis() - result } + settings.lastUpdateCheckTimestamp = System.currentTimeMillis() + result }.onFailure { it.printStackTrace() }.getOrNull() - private fun launchInternal() = activity.lifecycleScope.launch { - checkNow() - } - @MainThread private fun showUpdateDialog(version: AppVersion) { MaterialAlertDialogBuilder(activity) diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt index 5c0b94478..74dc3ffbe 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/OnboardDialogFragment.kt @@ -11,7 +11,6 @@ import org.koin.androidx.viewmodel.ext.android.viewModel import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.AlertDialogFragment 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.settings.onboard.adapter.SourceLocalesAdapter import org.koitharu.kotatsu.settings.onboard.model.SourceLocale @@ -75,12 +74,10 @@ class OnboardDialogFragment : AlertDialogFragment(), fun show(fm: FragmentManager) = OnboardDialogFragment().show(fm, TAG) - fun showWelcome(settings: AppSettings, fm: FragmentManager) { - if (!settings.isSourcesSelected) { - OnboardDialogFragment().withArgs(1) { - putBoolean(ARG_WELCOME, true) - }.show(fm, TAG) - } + fun showWelcome(fm: FragmentManager) { + OnboardDialogFragment().withArgs(1) { + putBoolean(ARG_WELCOME, true) + }.show(fm, TAG) } } } \ No newline at end of file