This commit is contained in:
kunfei
2023-02-20 11:44:18 +08:00
parent 723da1f1d0
commit f6727a9c8b
4 changed files with 71 additions and 43 deletions
@@ -5,9 +5,13 @@ import android.text.method.LinkMovementMethod
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.google.android.material.tabs.TabLayout
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.data.entities.DictRule
import io.legado.app.databinding.DialogDictBinding import io.legado.app.databinding.DialogDictBinding
import io.legado.app.lib.theme.accentColor
import io.legado.app.lib.theme.backgroundColor
import io.legado.app.utils.invisible import io.legado.app.utils.invisible
import io.legado.app.utils.setHtml import io.legado.app.utils.setHtml
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
@@ -28,6 +32,8 @@ class DictDialog() : BaseDialogFragment(R.layout.dialog_dict) {
private val viewModel by viewModels<DictViewModel>() private val viewModel by viewModels<DictViewModel>()
private val binding by viewBinding(DialogDictBinding::bind) private val binding by viewBinding(DialogDictBinding::bind)
private var word: String? = null
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
@@ -35,19 +41,41 @@ class DictDialog() : BaseDialogFragment(R.layout.dialog_dict) {
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
binding.tvDict.movementMethod = LinkMovementMethod() binding.tvDict.movementMethod = LinkMovementMethod()
val word = arguments?.getString("word") word = arguments?.getString("word")
if (word.isNullOrEmpty()) { if (word.isNullOrEmpty()) {
toastOnUi(R.string.cannot_empty) toastOnUi(R.string.cannot_empty)
dismiss() dismiss()
return return
} }
binding.tabLayout.setBackgroundColor(backgroundColor)
binding.tabLayout.setSelectedTabIndicatorColor(accentColor)
binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(tab: TabLayout.Tab) {
}
override fun onTabUnselected(tab: TabLayout.Tab) {
}
override fun onTabSelected(tab: TabLayout.Tab) {
val dictRule = tab.tag as DictRule
viewModel.dict(dictRule, word!!)
}
})
viewModel.dictHtmlData.observe(viewLifecycleOwner) { viewModel.dictHtmlData.observe(viewLifecycleOwner) {
binding.rotateLoading.invisible() binding.rotateLoading.invisible()
binding.tvDict.setHtml(it) binding.tvDict.setHtml(it)
} }
viewModel.dict(word) viewModel.initData {
viewModel.dictRules?.forEach {
binding.tabLayout.addTab(binding.tabLayout.newTab().apply {
text = it.name
tag = it
})
}
}
} }
} }
@@ -3,46 +3,27 @@ package io.legado.app.ui.dict
import android.app.Application import android.app.Application
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.data.entities.DictRule
import io.legado.app.help.DefaultData import io.legado.app.help.DefaultData
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import java.util.regex.Pattern import java.util.regex.Pattern
class DictViewModel(application: Application) : BaseViewModel(application) { class DictViewModel(application: Application) : BaseViewModel(application) {
var dictRules: List<DictRule>? = null
var dictHtmlData: MutableLiveData<String> = MutableLiveData() var dictHtmlData: MutableLiveData<String> = MutableLiveData()
fun dict(word: String) { fun initData(onSuccess: () -> Unit) {
if (isChinese(word)) {
baiduDict(word)
} else {
haiciDict(word)
}
}
/**
* 海词英文词典
*
* @param word
*/
private fun haiciDict(word: String) {
execute { execute {
DefaultData.dictRules[1].search(word) DefaultData.dictRules
}.onSuccess { }.onSuccess {
dictHtmlData.postValue(it) dictRules = it
}.onError { onSuccess.invoke()
context.toastOnUi(it.localizedMessage)
} }
} }
/** fun dict(dictRule: DictRule, word: String) {
* 百度汉语词典
*
* @param word
*/
private fun baiduDict(word: String) {
execute { execute {
DefaultData.dictRules[0].search(word) dictRule.search(word)
}.onSuccess { }.onSuccess {
dictHtmlData.postValue(it) dictHtmlData.postValue(it)
}.onError { }.onError {
@@ -69,23 +69,26 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
} }
override fun selectAll(selectAll: Boolean) { override fun selectAll(selectAll: Boolean) {
TODO("Not yet implemented") adapter.selectAll()
} }
override fun revertSelection() { override fun revertSelection() {
TODO("Not yet implemented") adapter.revertSelection()
} }
override fun onMenuItemClick(item: MenuItem?): Boolean { override fun onMenuItemClick(item: MenuItem): Boolean {
TODO("Not yet implemented") when (item.itemId) {
}
return true
} }
override fun update(vararg rule: DictRule) { override fun update(vararg rule: DictRule) {
TODO("Not yet implemented") viewModel.upsert(*rule)
} }
override fun delete(rule: DictRule) { override fun delete(rule: DictRule) {
TODO("Not yet implemented") viewModel.delete(rule)
} }
override fun edit(rule: DictRule) { override fun edit(rule: DictRule) {
@@ -105,7 +108,10 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
} }
override fun upCountView() { override fun upCountView() {
TODO("Not yet implemented") binding.selectActionBar.upCountView(
adapter.selection.size,
adapter.itemCount
)
} }
+18 -5
View File
@@ -1,18 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="16dp"> app:layout_constraintTop_toTopOf="parent"
tools:ignore="SpeakableTextPresentCheck" />
<TextView <TextView
android:id="@+id/tv_dict" android:id="@+id/tv_dict"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:padding="16dp"
app:layout_constraintTop_toBottomOf="@id/tab_layout" />
<io.legado.app.ui.widget.anima.RotateLoading <io.legado.app.ui.widget.anima.RotateLoading
android:id="@+id/rotate_loading" android:id="@+id/rotate_loading"
android:layout_width="60dp" android:layout_width="60dp"
android:layout_height="60dp" android:layout_height="60dp"
android:layout_gravity="center" /> android:layout_gravity="center"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tab_layout" />
</FrameLayout> </androidx.constraintlayout.widget.ConstraintLayout>