diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 522dd2c43..4960d2873 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -335,11 +335,6 @@
-
-
()
val successLiveData = MutableLiveData()
val errorLiveData = MutableLiveData()
@@ -34,15 +34,7 @@ class FileAssociationViewModel(application: Application) : BaseViewModel(applica
//暂时根据文件内容判断属于什么
when {
content.contains("bookSourceUrl") -> {
- successLiveData.postValue(
- Intent(
- context,
- ImportBookSourceActivity::class.java
- ).apply {
- val dataKey = IntentDataHelp.putData(content)
- putExtra("dataKey", dataKey)
- }
- )
+ importBookSourceLive.postValue(IntentDataHelp.putData(content))
return@execute
}
content.contains("sourceUrl") -> {
diff --git a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceActivity.kt
deleted file mode 100644
index f2c09bd88..000000000
--- a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceActivity.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-package io.legado.app.ui.association
-
-import android.os.Bundle
-import androidx.activity.viewModels
-import io.legado.app.R
-import io.legado.app.base.VMBaseActivity
-import io.legado.app.constant.Theme
-import io.legado.app.databinding.ActivityTranslucenceBinding
-import io.legado.app.help.IntentDataHelp
-import io.legado.app.lib.dialogs.alert
-import io.legado.app.utils.viewbindingdelegate.viewBinding
-
-
-class ImportBookSourceActivity :
- VMBaseActivity(
- theme = Theme.Transparent
- ) {
-
- override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
- override val viewModel by viewModels()
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- binding.rotateLoading.show()
- viewModel.errorLiveData.observe(this, {
- binding.rotateLoading.hide()
- errorDialog(it)
- })
- viewModel.successLiveData.observe(this, {
- binding.rotateLoading.hide()
- if (it > 0) {
- ImportBookSourceDialog().show(supportFragmentManager, "SourceDialog")
- } else {
- errorDialog(getString(R.string.wrong_format))
- }
- })
- initData()
- }
-
- private fun initData() {
- intent.getStringExtra("dataKey")?.let {
- IntentDataHelp.getData(it)?.let { source ->
- viewModel.importSource(source)
- return
- }
- }
- intent.getStringExtra("source")?.let {
- viewModel.importSource(it)
- return
- }
- finish()
- }
-
- private fun errorDialog(msg: String) {
- alert(getString(R.string.error), msg) {
- okButton { }
- onDismiss {
- finish()
- }
- }.show()
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt
index 038df02d5..0db0970dc 100644
--- a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt
+++ b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt
@@ -2,14 +2,14 @@ package io.legado.app.ui.association
import android.annotation.SuppressLint
import android.content.Context
-import android.content.DialogInterface
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
-import androidx.fragment.app.activityViewModels
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R
import io.legado.app.base.BaseDialogFragment
@@ -23,13 +23,11 @@ import io.legado.app.databinding.DialogEditTextBinding
import io.legado.app.databinding.DialogRecyclerViewBinding
import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.help.AppConfig
+import io.legado.app.help.IntentDataHelp
import io.legado.app.lib.dialogs.alert
import io.legado.app.ui.widget.dialog.WaitDialog
-import io.legado.app.utils.dp
-import io.legado.app.utils.putPrefBoolean
-import io.legado.app.utils.splitNotBlank
+import io.legado.app.utils.*
import io.legado.app.utils.viewbindingdelegate.viewBinding
-import io.legado.app.utils.visible
/**
@@ -37,10 +35,21 @@ import io.legado.app.utils.visible
*/
class ImportBookSourceDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickListener {
- private val binding by viewBinding(DialogRecyclerViewBinding::bind)
+ companion object {
+
+ fun start(fragmentManager: FragmentManager, source: String) {
+ ImportBookSourceDialog().apply {
+ arguments = Bundle().apply {
+ putString("source", source)
+ }
+ }.show(fragmentManager, "importBookSource")
+ }
- val viewModel: ImportBookSourceViewModel by activityViewModels()
- lateinit var adapter: SourcesAdapter
+ }
+
+ private val binding by viewBinding(DialogRecyclerViewBinding::bind)
+ private val viewModel by viewModels()
+ private lateinit var adapter: SourcesAdapter
override fun onStart() {
super.onStart()
@@ -60,11 +69,11 @@ class ImportBookSourceDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickList
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setTitle(R.string.import_book_source)
+ binding.rotateLoading.show()
initMenu()
adapter = SourcesAdapter(requireContext())
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter
- adapter.setItems(viewModel.allSources)
binding.tvCancel.visible()
binding.tvCancel.setOnClickListener {
dismissAllowingStateLoss()
@@ -90,6 +99,31 @@ class ImportBookSourceDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickList
adapter.notifyDataSetChanged()
upSelectText()
}
+ viewModel.errorLiveData.observe(this, {
+ binding.rotateLoading.hide()
+ errorDialog(it)
+ })
+ viewModel.successLiveData.observe(this, {
+ binding.rotateLoading.hide()
+ if (it > 0) {
+ adapter.setItems(viewModel.allSources)
+ } else {
+ errorDialog(getString(R.string.wrong_format))
+ }
+ })
+ val source = arguments?.getString("source")
+ if (source.isNullOrEmpty()) {
+ dismiss()
+ return
+ }
+ if (source.isAbsUrl()) {
+ viewModel.importSource(source)
+ } else {
+ IntentDataHelp.getData(source)?.let {
+ viewModel.importSource(it)
+ return
+ }
+ }
}
private fun upSelectText() {
@@ -148,9 +182,13 @@ class ImportBookSourceDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickList
return false
}
- override fun onDismiss(dialog: DialogInterface) {
- super.onDismiss(dialog)
- activity?.finish()
+ private fun errorDialog(msg: String) {
+ alert(getString(R.string.error), msg) {
+ okButton { }
+ onDismiss {
+
+ }
+ }.show()
}
inner class SourcesAdapter(context: Context) :
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 1b36fed1c..f59a8ded5 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
@@ -27,7 +27,7 @@ import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.service.help.CheckSource
-import io.legado.app.ui.association.ImportBookSourceActivity
+import io.legado.app.ui.association.ImportBookSourceDialog
import io.legado.app.ui.book.source.debug.BookSourceDebugActivity
import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.document.FilePicker
@@ -63,18 +63,14 @@ class BookSourceActivity : VMBaseActivity {
- putExtra("source", it)
- }
+ ImportBookSourceDialog.start(supportFragmentManager, it)
}
private val importDoc = registerForActivityResult(FilePicker()) { uri ->
uri ?: return@registerForActivityResult
try {
uri.readText(this)?.let {
val dataKey = IntentDataHelp.putData(it)
- startActivity {
- putExtra("dataKey", dataKey)
- }
+ ImportBookSourceDialog.start(supportFragmentManager, dataKey)
}
} catch (e: Exception) {
toastOnUi("readTextError:${e.localizedMessage}")
@@ -421,9 +417,7 @@ class BookSourceActivity : VMBaseActivity {
- putExtra("source", it)
- }
+ ImportBookSourceDialog.start(supportFragmentManager, it)
}
}
cancelButton()
diff --git a/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubActivity.kt b/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubActivity.kt
index a54fef5ed..f7c2ed3b3 100644
--- a/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubActivity.kt
@@ -13,7 +13,7 @@ import io.legado.app.data.entities.RuleSub
import io.legado.app.databinding.ActivityRuleSubBinding
import io.legado.app.databinding.DialogRuleSubEditBinding
import io.legado.app.lib.dialogs.alert
-import io.legado.app.ui.association.ImportBookSourceActivity
+import io.legado.app.ui.association.ImportBookSourceDialog
import io.legado.app.ui.association.ImportReplaceRuleActivity
import io.legado.app.ui.association.ImportRssSourceActivity
import io.legado.app.ui.widget.recycler.ItemTouchCallback
@@ -74,9 +74,7 @@ class RuleSubActivity : BaseActivity(),
override fun openSubscription(ruleSub: RuleSub) {
when (ruleSub.type) {
0 -> {
- startActivity {
- putExtra("source", ruleSub.url)
- }
+ ImportBookSourceDialog.start(supportFragmentManager, ruleSub.url)
}
1 -> {
startActivity {
diff --git a/app/src/main/res/layout/dialog_recycler_view.xml b/app/src/main/res/layout/dialog_recycler_view.xml
index f368f646d..2afcbca96 100644
--- a/app/src/main/res/layout/dialog_recycler_view.xml
+++ b/app/src/main/res/layout/dialog_recycler_view.xml
@@ -25,6 +25,15 @@
android:layout_height="match_parent"
android:scrollbars="none" />
+
+