diff --git a/app/src/main/java/io/legado/app/data/entities/DictRule.kt b/app/src/main/java/io/legado/app/data/entities/DictRule.kt index acb03ebc2..61002f27c 100644 --- a/app/src/main/java/io/legado/app/data/entities/DictRule.kt +++ b/app/src/main/java/io/legado/app/data/entities/DictRule.kt @@ -12,9 +12,9 @@ import io.legado.app.model.analyzeRule.AnalyzeUrl @Entity(tableName = "dictRules") data class DictRule( @PrimaryKey - var name: String, - var urlRule: String, - var showRule: String, + var name: String = "", + var urlRule: String = "", + var showRule: String = "", @ColumnInfo(defaultValue = "1") var enabled: Boolean = true, @ColumnInfo(defaultValue = "0") diff --git a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditDialog.kt b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditDialog.kt index 6e278476b..e2a68e231 100644 --- a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditDialog.kt +++ b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditDialog.kt @@ -2,8 +2,11 @@ package io.legado.app.ui.dict.rule import android.app.Application import android.os.Bundle +import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.appcompat.widget.Toolbar + import androidx.fragment.app.viewModels import io.legado.app.R import io.legado.app.base.BaseDialogFragment @@ -12,10 +15,12 @@ import io.legado.app.data.appDb import io.legado.app.data.entities.DictRule import io.legado.app.databinding.DialogDictRuleEditBinding import io.legado.app.lib.theme.primaryColor +import io.legado.app.utils.applyTint import io.legado.app.utils.setLayout import io.legado.app.utils.viewbindingdelegate.viewBinding -class DictRuleEditDialog() : BaseDialogFragment(R.layout.dialog_dict_rule_edit, true) { +class DictRuleEditDialog() : BaseDialogFragment(R.layout.dialog_dict_rule_edit, true), + Toolbar.OnMenuItemClickListener { val viewModel by viewModels() val binding by viewBinding(DialogDictRuleEditBinding::bind) @@ -33,13 +38,40 @@ class DictRuleEditDialog() : BaseDialogFragment(R.layout.dialog_dict_rule_edit, override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { binding.toolBar.setBackgroundColor(primaryColor) + binding.toolBar.inflateMenu(R.menu.dict_rule_edit) + binding.toolBar.menu.applyTint(requireContext()) + binding.toolBar.setOnMenuItemClickListener(this) viewModel.initData(arguments?.getString("name")) { - binding.tvRuleName.setText(viewModel.dictRule?.name) - binding.tvUrlRule.setText(viewModel.dictRule?.urlRule) - binding.tvShowRule.setText(viewModel.dictRule?.showRule) + upRuleView(viewModel.dictRule) } } + override fun onMenuItemClick(item: MenuItem): Boolean { + when (item.itemId) { + R.id.menu_save -> viewModel.save(getDictRule()) { + dismissAllowingStateLoss() + } + R.id.menu_copy_rule -> viewModel.copyRule(getDictRule()) + R.id.menu_paste_rule -> viewModel.pasteRule { + upRuleView(it) + } + } + return true + } + + private fun upRuleView(dictRule: DictRule?) { + binding.tvRuleName.setText(dictRule?.name) + binding.tvUrlRule.setText(dictRule?.urlRule) + binding.tvShowRule.setText(dictRule?.showRule) + } + + private fun getDictRule(): DictRule { + val dictRule = viewModel.dictRule?.copy() ?: DictRule() + dictRule.name = binding.tvRuleName.text.toString() + dictRule.urlRule = binding.tvUrlRule.text.toString() + dictRule.showRule = binding.tvShowRule.text.toString() + return dictRule + } class DictRuleEditViewModel(application: Application) : BaseViewModel(application) { @@ -55,6 +87,26 @@ class DictRuleEditDialog() : BaseDialogFragment(R.layout.dialog_dict_rule_edit, } } + fun save(newDictRule: DictRule, onFinally: () -> Unit) { + execute { + dictRule?.let { + appDb.dictRuleDao.delete(it) + } + appDb.dictRuleDao.upsert(newDictRule) + dictRule = newDictRule + }.onFinally { + onFinally.invoke() + } + } + + fun copyRule(dictRule: DictRule) { + + } + + fun pasteRule(success: (DictRule) -> Unit) { + + } + } } \ No newline at end of file diff --git a/app/src/main/res/menu/dict_rule_edit.xml b/app/src/main/res/menu/dict_rule_edit.xml new file mode 100644 index 000000000..fe00fb6a6 --- /dev/null +++ b/app/src/main/res/menu/dict_rule_edit.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + +