kunfei пре 3 година
родитељ
комит
729297f56e

+ 3 - 3
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")

+ 56 - 4
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<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 - 0
app/src/main/res/menu/dict_rule_edit.xml

@@ -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>