kunfei 4 лет назад
Родитель
Сommit
928d0615e7

+ 2 - 1
app/src/main/java/io/legado/app/ui/association/FileAssociationActivity.kt

@@ -33,7 +33,8 @@ class FileAssociationActivity :
                 AppConfig.defaultBookTreeUri = treeUri.toString()
                 importBook(treeUri, uri)
             } ?: let {
-                toastOnUi("不选择文件夹重启应用后可能没有权限访问")
+                val storageHelp = String(assets.open("storageHelp.md").readBytes())
+                toastOnUi(storageHelp)
                 viewModel.importBook(uri)
             }
         }

+ 18 - 6
app/src/main/java/io/legado/app/ui/book/import/BaseImportBookActivity.kt

@@ -7,21 +7,33 @@ import io.legado.app.base.VMBaseActivity
 import io.legado.app.help.config.AppConfig
 import io.legado.app.lib.dialogs.alert
 import io.legado.app.ui.document.HandleFileContract
+import kotlin.coroutines.resume
+import kotlin.coroutines.suspendCoroutine
 
-abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel>(): VMBaseActivity<VB, VM>() {
+abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel> : VMBaseActivity<VB, VM>() {
+
+    private var localBookTreeSelectListener: ((Boolean) -> Unit)? = null
 
     private val localBookTreeSelect = registerForActivityResult(HandleFileContract()) {
         it.uri?.let { treeUri ->
             AppConfig.defaultBookTreeUri = treeUri.toString()
-        }
+            localBookTreeSelectListener?.invoke(true)
+        } ?: localBookTreeSelectListener?.invoke(false)
     }
 
     /**
      * 设置书籍保存位置
      */
-    protected fun setBookStorage() {
+    protected suspend fun setBookStorage() = suspendCoroutine { block ->
+        AppConfig.defaultBookTreeUri = ""
+        localBookTreeSelectListener = {
+            block.resume(it)
+        }
         //测试书籍保存位置是否设置
-        if (!AppConfig.defaultBookTreeUri.isNullOrBlank()) return
+        if (!AppConfig.defaultBookTreeUri.isNullOrBlank()) {
+            block.resume(true)
+            return@suspendCoroutine
+        }
         //测试读写??
         val storageHelp = String(assets.open("storageHelp.md").readBytes())
         val hint = getString(R.string.select_book_folder)
@@ -33,10 +45,10 @@ abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel>(): VMBas
                 }
             }
             noButton {
-                finish()
+                block.resume(false)
             }
             onCancelled {
-                finish()
+                block.resume(false)
             }
         }
     }

+ 6 - 4
app/src/main/java/io/legado/app/ui/book/import/local/ImportBookActivity.kt

@@ -58,10 +58,12 @@ class ImportBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Imp
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         binding.titleBar.setTitle(R.string.book_local)
-        initView()
-        initEvent()
-        initData()
-        setBookStorage()
+        launch {
+            setBookStorage()
+            initView()
+            initEvent()
+            initData()
+        }
     }
 
     override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {

+ 9 - 4
app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt

@@ -38,10 +38,15 @@ class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, Rem
     private var groupMenu: SubMenu? = null
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         binding.titleBar.setTitle(R.string.remote_book)
-        initView()
-        initData()
-        initEvent()
-        setBookStorage()
+        launch {
+            if (!setBookStorage()) {
+                finish()
+                return@launch
+            }
+            initView()
+            initData()
+            initEvent()
+        }
     }
 
     private fun initView() {