diff --git a/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt b/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt index c0c55d6a8..3df39f3f2 100644 --- a/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt +++ b/app/src/main/java/io/legado/app/base/BaseDialogFragment.kt @@ -1,5 +1,7 @@ package io.legado.app.base +import android.content.DialogInterface +import android.content.DialogInterface.OnDismissListener import android.os.Bundle import android.view.View import androidx.annotation.LayoutRes @@ -18,9 +20,13 @@ import kotlin.coroutines.CoroutineContext abstract class BaseDialogFragment( @LayoutRes layoutID: Int, private val adaptationSoftKeyboard: Boolean = false -) : DialogFragment(layoutID), +) : DialogFragment(layoutID), CoroutineScope by MainScope() { - CoroutineScope by MainScope() { + private var onDismissListener: OnDismissListener? = null + + fun setOnDismissListener(onDismissListener: OnDismissListener?) { + this.onDismissListener = onDismissListener + } override fun onStart() { super.onStart() @@ -51,6 +57,11 @@ abstract class BaseDialogFragment( } } + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + onDismissListener?.onDismiss(dialog) + } + override fun onDestroy() { super.onDestroy() cancel() diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index b55a240b7..3b5270e19 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -47,6 +47,8 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine /** * 主界面 @@ -92,21 +94,25 @@ class MainActivity : VMBaseActivity(), override fun onPostCreate(savedInstanceState: Bundle?) { super.onPostCreate(savedInstanceState) - upVersion() - privacyPolicy() - //请求设置书籍保存位置 - setBookStorage() - //自动更新书籍 - val isAutoRefreshedBook = savedInstanceState?.getBoolean("isAutoRefreshedBook") ?: false - if (AppConfig.autoRefreshBook && !isAutoRefreshedBook) { - binding.viewPagerMain.postDelayed(1000) { - viewModel.upAllBookToc() + launch { + //隐私协议 + if (!privacyPolicy()) return@launch + //版本更新 + upVersion() + //请求设置书籍保存位置 + setBookStorage() + //自动更新书籍 + val isAutoRefreshedBook = savedInstanceState?.getBoolean("isAutoRefreshedBook") ?: false + if (AppConfig.autoRefreshBook && !isAutoRefreshedBook) { + binding.viewPagerMain.postDelayed(1000) { + viewModel.upAllBookToc() + } } + binding.viewPagerMain.postDelayed(3000) { + viewModel.postLoad() + } + syncAlert() } - binding.viewPagerMain.postDelayed(3000) { - viewModel.postLoad() - } - syncAlert() } override fun onNavigationItemSelected(item: MenuItem): Boolean = binding.run { @@ -142,17 +148,57 @@ class MainActivity : VMBaseActivity(), } } - private fun upVersion() { - if (LocalConfig.versionCode != appInfo.versionCode) { - LocalConfig.versionCode = appInfo.versionCode - if (LocalConfig.isFirstOpenApp) { - val help = String(assets.open("help/appHelp.md").readBytes()) - showDialogFragment(TextDialog(help, TextDialog.Mode.MD)) - } else if (!BuildConfig.DEBUG) { - val log = String(assets.open("updateLog.md").readBytes()) - showDialogFragment(TextDialog(log, TextDialog.Mode.MD)) + /** + * 用户隐私与协议 + */ + private suspend fun privacyPolicy(): Boolean = suspendCoroutine { block -> + if (LocalConfig.privacyPolicyOk) { + block.resume(true) + return@suspendCoroutine + } + val privacyPolicy = String(assets.open("privacyPolicy.md").readBytes()) + alert("用户隐私与协议", privacyPolicy) { + noButton { + finish() + block.resume(false) } - viewModel.upVersion() + yesButton { + LocalConfig.privacyPolicyOk = true + block.resume(true) + } + onCancelled { + finish() + block.resume(false) + } + } + } + + /** + * 版本更新日志 + */ + private suspend fun upVersion() = suspendCoroutine { block -> + if (LocalConfig.versionCode == appInfo.versionCode) { + block.resume(Unit) + return@suspendCoroutine + } + LocalConfig.versionCode = appInfo.versionCode + viewModel.upVersion() + if (LocalConfig.isFirstOpenApp) { + val help = String(assets.open("help/appHelp.md").readBytes()) + val dialog = TextDialog(help, TextDialog.Mode.MD) + dialog.setOnDismissListener { + block.resume(Unit) + } + showDialogFragment(dialog) + } else if (!BuildConfig.DEBUG) { + val log = String(assets.open("updateLog.md").readBytes()) + val dialog = TextDialog(log, TextDialog.Mode.MD) + dialog.setOnDismissListener { + block.resume(Unit) + } + showDialogFragment(dialog) + } else { + block.resume(Unit) } } @@ -173,23 +219,6 @@ class MainActivity : VMBaseActivity(), } } - /** - * 用户隐私与协议 - */ - private fun privacyPolicy() { - if (LocalConfig.privacyPolicyOk) return - val privacyPolicy = String(assets.open("privacyPolicy.md").readBytes()) - alert("用户隐私与协议", privacyPolicy) { - noButton() - yesButton { - LocalConfig.privacyPolicyOk = true - } - onCancelled { - finish() - } - } - } - /** * 设置书籍保存位置 */ @@ -200,10 +229,10 @@ class MainActivity : VMBaseActivity(), val storageHelp = String(assets.open("storageHelp.md").readBytes()) alert("设置书籍保存位置", storageHelp) { yesButton { - localBookTreeSelect.launch { - title = getString(R.string.select_book_folder) - mode = HandleFileContract.DIR_SYS - } + localBookTreeSelect.launch { + title = getString(R.string.select_book_folder) + mode = HandleFileContract.DIR_SYS + } } noButton() }