diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index 33efca514..9545cf7cb 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -28,9 +28,11 @@ object LocalBook { } } - fun importFile(path: String): Book { - val fileName = if (path.isContentPath()) { - val doc = DocumentFile.fromSingleUri(App.INSTANCE, Uri.parse(path)) + fun importFile(uri: Uri): Book { + val path: String + val fileName = if (uri.isContentPath()) { + path = uri.toString() + val doc = DocumentFile.fromSingleUri(App.INSTANCE, uri) doc?.let { val bookFile = FileUtils.getFile(AnalyzeTxtFile.cacheFolder, it.name!!) if (!bookFile.exists()) { @@ -42,6 +44,7 @@ object LocalBook { } doc?.name!! } else { + path = uri.path!! File(path).name } val str = fileName.substringBeforeLast(".") diff --git a/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt index 86c0e52e4..a230b4450 100644 --- a/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt @@ -46,9 +46,9 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica } if (scheme.isEmpty()) { val book = if (uri.scheme == "content") { - LocalBook.importFile(uri.toString()) + LocalBook.importFile(uri) } else { - LocalBook.importFile(uri.path.toString()) + LocalBook.importFile(uri) } val intent = Intent(context, ReadBookActivity::class.java) intent.putExtra("bookUrl", book.bookUrl) diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt index 6adb6e26f..1bda5c1f7 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt @@ -39,6 +39,7 @@ import java.util.* class ImportBookActivity : VMBaseActivity(R.layout.activity_import_book), FilePickerDialog.CallBack, PopupMenu.OnMenuItemClickListener, + SelectActionBar.CallBack, ImportBookAdapter.CallBack { private val requestCodeSelectFolder = 342 private var rootDoc: DocumentFile? = null @@ -75,12 +76,26 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity when (item?.itemId) { R.id.menu_del_selection -> viewModel.deleteDoc(adapter.selectedUris) { - upPath() + adapter.removeSelection() } } return false } + override fun selectAll(selectAll: Boolean) { + adapter.selectAll(selectAll) + } + + override fun revertSelection() { + adapter.revertSelection() + } + + override fun onClickMainAction() { + viewModel.addToBookshelf(adapter.selectedUris) { + adapter.notifyDataSetChanged() + } + } + private fun initView() { lay_top.setBackgroundColor(backgroundColor) recycler_view.layoutManager = LinearLayoutManager(this) @@ -89,22 +104,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity select_action_bar.setMainActionText(R.string.add_to_shelf) select_action_bar.inflateMenu(R.menu.import_book_sel) select_action_bar.setOnMenuItemClickListener(this) - select_action_bar.setCallBack(object : SelectActionBar.CallBack { - override fun selectAll(selectAll: Boolean) { - adapter.selectAll(selectAll) - } - - override fun revertSelection() { - adapter.revertSelection() - } - - override fun onClickMainAction() { - viewModel.addToBookshelf(adapter.selectedUris) { - upPath() - } - } - }) - + select_action_bar.setCallBack(this) } private fun initEvent() { @@ -210,7 +210,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity DocumentsContract.Document.MIME_TYPE_DIR, it.length(), Date(it.lastModified()), - Uri.parse(it.absolutePath) + Uri.fromFile(it) ) ) } else if (it.name.endsWith(".txt", true) @@ -222,7 +222,7 @@ class ImportBookActivity : VMBaseActivity(R.layout.activity it.extension, it.length(), Date(it.lastModified()), - Uri.parse(it.absolutePath) + Uri.fromFile(it) ) ) } diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt index 3e7ab7097..6f61c6a5e 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookAdapter.kt @@ -66,6 +66,14 @@ class ImportBookAdapter(context: Context, val callBack: CallBack) : callBack.upCountView() } + fun removeSelection() { + for (i in getItems().lastIndex downTo 0) { + if (getItem(i)?.uri.toString() in selectedUris) { + removeItem(i) + } + } + } + override fun convert(holder: ItemViewHolder, item: DocItem, payloads: MutableList) { holder.itemView.apply { if (payloads.isEmpty()) { diff --git a/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt index 4665b15ca..6b0b44dd2 100644 --- a/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt @@ -16,7 +16,7 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application) fun addToBookshelf(uriList: HashSet, finally: () -> Unit) { execute { uriList.forEach { - LocalBook.importFile(it) + LocalBook.importFile(Uri.parse(it)) } }.onFinally { finally.invoke() diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index 024b8a811..0b4bc9c1c 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -53,6 +53,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity PopupMenu.OnMenuItemClickListener, BookSourceAdapter.CallBack, FilePickerDialog.CallBack, + SelectActionBar.CallBack, SearchView.OnQueryTextListener { override val viewModel: BookSourceViewModel get() = getViewModel(BookSourceViewModel::class.java) @@ -244,33 +245,30 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity }) } + override fun selectAll(selectAll: Boolean) { + if (selectAll) { + adapter.selectAll() + } else { + adapter.revertSelection() + } + } + + override fun revertSelection() { + adapter.revertSelection() + } + + override fun onClickMainAction() { + alert(titleResource = R.string.draw, messageResource = R.string.sure_del) { + okButton { viewModel.delSelection(adapter.getSelection()) } + noButton { } + }.show().applyTint() + } + private fun initSelectActionBar() { select_action_bar.setMainActionText(R.string.delete) select_action_bar.inflateMenu(R.menu.book_source_sel) select_action_bar.setOnMenuItemClickListener(this) - select_action_bar.setCallBack(object : SelectActionBar.CallBack { - override fun selectAll(selectAll: Boolean) { - if (selectAll) { - adapter.selectAll() - } else { - adapter.revertSelection() - } - } - - override fun revertSelection() { - adapter.revertSelection() - } - - override fun onClickMainAction() { - this@BookSourceActivity - .alert(titleResource = R.string.draw, messageResource = R.string.sure_del) { - okButton { viewModel.delSelection(adapter.getSelection()) } - noButton { } - } - .show().applyTint() - } - }) - + select_action_bar.setCallBack(this) } override fun onMenuItemClick(item: MenuItem?): Boolean { diff --git a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt index c73c4fce8..6d86a80de 100644 --- a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt +++ b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt @@ -50,6 +50,7 @@ class ReplaceRuleActivity : SearchView.OnQueryTextListener, PopupMenu.OnMenuItemClickListener, FilePickerDialog.CallBack, + SelectActionBar.CallBack, ReplaceRuleAdapter.CallBack { override val viewModel: ReplaceRuleViewModel get() = getViewModel(ReplaceRuleViewModel::class.java) @@ -107,27 +108,27 @@ class ReplaceRuleActivity : search_view.setOnQueryTextListener(this) } + override fun selectAll(selectAll: Boolean) { + if (selectAll) { + adapter.selectAll() + } else { + adapter.revertSelection() + } + } + + override fun revertSelection() { + adapter.revertSelection() + } + + override fun onClickMainAction() { + delSourceDialog() + } + private fun initSelectActionView() { select_action_bar.setMainActionText(R.string.delete) select_action_bar.inflateMenu(R.menu.replace_rule_sel) select_action_bar.setOnMenuItemClickListener(this) - select_action_bar.setCallBack(object : SelectActionBar.CallBack { - override fun selectAll(selectAll: Boolean) { - if (selectAll) { - adapter.selectAll() - } else { - adapter.revertSelection() - } - } - - override fun revertSelection() { - adapter.revertSelection() - } - - override fun onClickMainAction() { - delSourceDialog() - } - }) + select_action_bar.setCallBack(this) } private fun delSourceDialog() { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt index 56e5aa63b..332c79b0e 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt @@ -48,6 +48,7 @@ import java.util.* class RssSourceActivity : VMBaseActivity(R.layout.activity_rss_source), PopupMenu.OnMenuItemClickListener, FilePickerDialog.CallBack, + SelectActionBar.CallBack, RssSourceAdapter.CallBack { override val viewModel: RssSourceViewModel @@ -153,27 +154,27 @@ class RssSourceActivity : VMBaseActivity(R.layout.activity_r }) } + override fun selectAll(selectAll: Boolean) { + if (selectAll) { + adapter.selectAll() + } else { + adapter.revertSelection() + } + } + + override fun revertSelection() { + adapter.revertSelection() + } + + override fun onClickMainAction() { + delSourceDialog() + } + private fun initViewEvent() { select_action_bar.setMainActionText(R.string.delete) select_action_bar.inflateMenu(R.menu.rss_source_sel) select_action_bar.setOnMenuItemClickListener(this) - select_action_bar.setCallBack(object : SelectActionBar.CallBack { - override fun selectAll(selectAll: Boolean) { - if (selectAll) { - adapter.selectAll() - } else { - adapter.revertSelection() - } - } - - override fun revertSelection() { - adapter.revertSelection() - } - - override fun onClickMainAction() { - delSourceDialog() - } - }) + select_action_bar.setCallBack(this) } private fun delSourceDialog() {