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") @Entity(tableName = "dictRules")
data class DictRule( data class DictRule(
@PrimaryKey @PrimaryKey
var name: String, var name: String = "",
var urlRule: String, var urlRule: String = "",
var showRule: String, var showRule: String = "",
@ColumnInfo(defaultValue = "1") @ColumnInfo(defaultValue = "1")
var enabled: Boolean = true, var enabled: Boolean = true,
@ColumnInfo(defaultValue = "0") @ColumnInfo(defaultValue = "0")
@@ -2,8 +2,11 @@ package io.legado.app.ui.dict.rule
import android.app.Application import android.app.Application
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment 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.data.entities.DictRule
import io.legado.app.databinding.DialogDictRuleEditBinding import io.legado.app.databinding.DialogDictRuleEditBinding
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.applyTint
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.viewbindingdelegate.viewBinding 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 viewModel by viewModels<DictRuleEditViewModel>()
val binding by viewBinding(DialogDictRuleEditBinding::bind) 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?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.toolBar.setBackgroundColor(primaryColor) 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")) { viewModel.initData(arguments?.getString("name")) {
binding.tvRuleName.setText(viewModel.dictRule?.name) upRuleView(viewModel.dictRule)
binding.tvUrlRule.setText(viewModel.dictRule?.urlRule)
binding.tvShowRule.setText(viewModel.dictRule?.showRule)
} }
} }
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) { 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>