替换顺序 #222

This commit is contained in:
HapeLee
2025-11-05 20:15:20 +08:00
parent 4e4f566fb5
commit 660fce4bb7
4 changed files with 48 additions and 9 deletions
@@ -210,4 +210,5 @@ object PreferKey {
const val bookshelfRefreshingLimit = "bookshelfRefreshingLimit" const val bookshelfRefreshingLimit = "bookshelfRefreshingLimit"
const val systemMediaControlCompatibilityChange = "systemMediaControlCompatibilityChange" const val systemMediaControlCompatibilityChange = "systemMediaControlCompatibilityChange"
const val isPredictiveBackEnabled = "isPredictiveBackEnabled" const val isPredictiveBackEnabled = "isPredictiveBackEnabled"
const val replaceSortMode = "desc"
} }
@@ -145,9 +145,18 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
override fun onPrepareOptionsMenu(menu: Menu): Boolean { override fun onPrepareOptionsMenu(menu: Menu): Boolean {
groupMenu = menu.findItem(R.id.menu_group)?.subMenu groupMenu = menu.findItem(R.id.menu_group)?.subMenu
upGroupMenu() upGroupMenu()
// 标记当前选中的排序方式
when (viewModel.sortMode.value) {
"asc" -> menu.findItem(R.id.sort_order_asc)?.isChecked = true
"desc" -> menu.findItem(R.id.sort_order_desc)?.isChecked = true
"name_asc" -> menu.findItem(R.id.sort_name_asc)?.isChecked = true
"name_desc" -> menu.findItem(R.id.sort_name_desc)?.isChecked = true
}
return super.onPrepareOptionsMenu(menu) return super.onPrepareOptionsMenu(menu)
} }
private fun initRecyclerView() { private fun initRecyclerView() {
//binding.recyclerView.setEdgeEffectColor(primaryColor) //binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.recyclerView.layoutManager = LinearLayoutManager(this) binding.recyclerView.layoutManager = LinearLayoutManager(this)
@@ -231,10 +240,22 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
R.id.menu_group_null -> { R.id.menu_group_null -> {
searchView.setQuery(getString(R.string.no_group), true) searchView.setQuery(getString(R.string.no_group), true)
} }
R.id.sort_order_asc -> viewModel.setSortMode("asc") R.id.sort_order_asc -> {
R.id.sort_order_desc -> viewModel.setSortMode("desc") viewModel.setSortMode("asc")
R.id.sort_name_asc -> viewModel.setSortMode("name_asc") item.isChecked = true
R.id.sort_name_desc -> viewModel.setSortMode("name_desc") }
R.id.sort_order_desc -> {
viewModel.setSortMode("desc")
item.isChecked = true
}
R.id.sort_name_asc -> {
viewModel.setSortMode("name_asc")
item.isChecked = true
}
R.id.sort_name_desc -> {
viewModel.setSortMode("name_desc")
item.isChecked = true
}
else -> if (item.groupId == R.id.replace_group) { else -> if (item.groupId == R.id.replace_group) {
searchView.setQuery("group:${item.title}", true) searchView.setQuery("group:${item.title}", true)
viewModel.setSearchKey("group:${item.title}") viewModel.setSearchKey("group:${item.title}")
@@ -5,8 +5,11 @@ import android.text.TextUtils
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.constant.PreferKey
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.ReplaceRule import io.legado.app.data.entities.ReplaceRule
import io.legado.app.utils.getPrefString
import io.legado.app.utils.putPrefString
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -26,7 +29,7 @@ import splitties.init.appCtx
*/ */
class ReplaceRuleViewModel(application: Application) : BaseViewModel(application) { class ReplaceRuleViewModel(application: Application) : BaseViewModel(application) {
private val _sortMode = MutableStateFlow("desc") private val _sortMode = MutableStateFlow(context.getPrefString(PreferKey.replaceSortMode, "desc") ?: "desc")
private val _searchKey = MutableStateFlow<String?>(null) private val _searchKey = MutableStateFlow<String?>(null)
val sortMode: StateFlow<String> = _sortMode val sortMode: StateFlow<String> = _sortMode
@@ -34,6 +37,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application
fun setSortMode(mode: String) { fun setSortMode(mode: String) {
_sortMode.value = mode _sortMode.value = mode
context.putPrefString(PreferKey.replaceSortMode, mode)
} }
fun setSearchKey(key: String?) { fun setSearchKey(key: String?) {
+17 -4
View File
@@ -34,14 +34,27 @@
android:icon="@drawable/ic_sort" android:icon="@drawable/ic_sort"
app:showAsAction="always"> app:showAsAction="always">
<menu> <menu>
<item android:id="@+id/sort_order_asc" android:title="@string/sort_old_to_new" /> <group
android:id="@+id/group_sort"
android:checkableBehavior="single">
<item android:id="@+id/sort_order_desc" android:title="@string/sort_new_to_old" /> <item
android:id="@+id/sort_order_asc"
android:title="@string/sort_old_to_new" />
<item android:id="@+id/sort_name_asc" android:title="@string/sort_name_asc" /> <item
android:id="@+id/sort_order_desc"
android:title="@string/sort_new_to_old" />
<item android:id="@+id/sort_name_desc" android:title="@string/sort_name_desc" /> <item
android:id="@+id/sort_name_asc"
android:title="@string/sort_name_asc" />
<item
android:id="@+id/sort_name_desc"
android:title="@string/sort_name_desc" />
</group>
</menu> </menu>
</item> </item>