diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 354cae6fa..d1fcf0a18 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -44,6 +44,7 @@ import io.legado.app.ui.book.toc.TocActivityResult import io.legado.app.ui.document.HandleFileContract import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.widget.dialog.PhotoDialog +import io.legado.app.ui.widget.dialog.VariableDialog import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding @@ -419,22 +420,8 @@ class BookInfoActivity : toastOnUi("书源不存在") return@launch } - val variable = withContext(IO) { source.getVariable() } - alert(R.string.set_source_variable) { - setMessage(source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")) - val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { - editView.hint = "source variable" - editView.setText(variable) - } - customView { alertBinding.root } - okButton { - viewModel.bookSource?.setVariable(alertBinding.editView.text?.toString()) - } - cancelButton() - neutralButton(R.string.delete) { - viewModel.bookSource?.setVariable(null) - } - } + val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取") + showDialogFragment(VariableDialog(source.getKey(), comment)) } } diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt index 8db749c58..bcb432e05 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt @@ -17,7 +17,6 @@ import io.legado.app.data.appDb import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.rule.* import io.legado.app.databinding.ActivityBookSourceEditBinding -import io.legado.app.databinding.DialogEditTextBinding import io.legado.app.help.config.LocalConfig import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.alert @@ -31,6 +30,7 @@ import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.qrcode.QrCodeResult import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.dialog.UrlOptionDialog +import io.legado.app.ui.widget.dialog.VariableDialog import io.legado.app.ui.widget.keyboard.KeyboardToolPop import io.legado.app.ui.widget.text.EditEntity import io.legado.app.utils.* @@ -593,29 +593,13 @@ class BookSourceEditActivity : } private fun setSourceVariable() { - launch { - val source = viewModel.bookSource - if (source == null) { - toastOnUi("先保存书源") - return@launch - } - val variable = withContext(IO) { source.getVariable() } - alert(R.string.set_source_variable) { - setMessage(source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取")) - val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { - editView.hint = "source variable" - editView.setText(variable) - } - customView { alertBinding.root } - okButton { - viewModel.bookSource?.setVariable(alertBinding.editView.text?.toString()) - } - cancelButton() - neutralButton(R.string.delete) { - viewModel.bookSource?.setVariable(null) - } - } + val source = viewModel.bookSource + if (source == null) { + toastOnUi("先保存书源") + return } + val comment = source.getDisplayVariableComment("源变量可在js中通过source.getVariable()获取") + showDialogFragment(VariableDialog(source.getKey(), comment)) } } diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt index 69c015e0c..f57a97ce0 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt @@ -12,17 +12,14 @@ import androidx.fragment.app.FragmentStatePagerAdapter import io.legado.app.R import io.legado.app.base.VMBaseActivity import io.legado.app.databinding.ActivityRssArtivlesBinding -import io.legado.app.databinding.DialogEditTextBinding import io.legado.app.help.source.sortUrls -import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.accentColor import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.rss.source.edit.RssSourceEditActivity +import io.legado.app.ui.widget.dialog.VariableDialog import io.legado.app.utils.* import io.legado.app.utils.viewbindingdelegate.viewBinding -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext class RssSortActivity : VMBaseActivity() { @@ -106,29 +103,13 @@ class RssSortActivity : VMBaseActivity() + + constructor(key: String, comment: String) : this() { + arguments = Bundle().apply { + putString("key", key) + putString("comment", comment) + } + } + + override fun onStart() { + super.onStart() + setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + } + + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + binding.toolBar.setBackgroundColor(primaryColor) + arguments?.let { + viewModel.init(it) { + binding.tvComment.text = viewModel.comment + binding.tvVariable.setText(viewModel.mVariable) + } + } + binding.toolBar.inflateMenu(R.menu.save) + binding.toolBar.menu.applyTint(requireContext()) + binding.toolBar.setOnMenuItemClickListener(this) + } + + override fun onMenuItemClick(item: MenuItem?): Boolean { + when (item?.itemId) { + R.id.menu_save -> viewModel.save(binding.tvVariable.text?.toString()) { + dismiss() + } + } + return true + } + + class ViewModel(application: Application) : BaseViewModel(application) { + + var key: String? = null + var comment: String? = null + var mVariable: String? = null + + fun init(arguments: Bundle, onFinally: () -> Unit) { + if (key != null) return + execute { + key = arguments.getString("key") + comment = arguments.getString("comment") + mVariable = CacheManager.get("sourceVariable_${key}") + }.onFinally { + onFinally.invoke() + } + } + + fun save(variable: String?, onFinally: () -> Unit) { + execute { + if (variable == null) { + CacheManager.delete("sourceVariable_${key}") + } else { + CacheManager.put("sourceVariable_${key}", variable) + } + }.onFinally { + onFinally.invoke() + } + } + + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_variable.xml b/app/src/main/res/layout/dialog_variable.xml new file mode 100644 index 000000000..a05488317 --- /dev/null +++ b/app/src/main/res/layout/dialog_variable.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/save.xml b/app/src/main/res/menu/save.xml new file mode 100644 index 000000000..681d92fc8 --- /dev/null +++ b/app/src/main/res/menu/save.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file