This commit is contained in:
kunfei
2023-02-20 17:44:41 +08:00
parent e1966b573a
commit 14ed8928be
3 changed files with 87 additions and 7 deletions
@@ -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")
@@ -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<DictRuleEditViewModel>()
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) {
}
}
}
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="AlwaysShowAction">
<item
android:id="@+id/menu_save"
android:icon="@drawable/ic_save"
android:title="@string/action_save"
app:showAsAction="always" />
<item
android:id="@+id/menu_copy_rule"
android:title="@string/copy_rule"
app:showAsAction="never" />
<item
android:id="@+id/menu_paste_rule"
android:title="@string/paste_rule"
app:showAsAction="never" />
<item
android:id="@+id/menu_help"
android:title="@string/help"
app:showAsAction="never" />
</menu>