Merge pull request #3089 from h11128/fold-group

折叠换源分组菜单; 修复自动换组UI不更新
This commit is contained in:
kunfei
2023-05-14 12:50:36 +08:00
committed by GitHub
4 changed files with 74 additions and 53 deletions
+2
View File
@@ -12,3 +12,5 @@ node_modules/
/app/google /app/google
/app/gradle.properties /app/gradle.properties
package-lock.json package-lock.json
.idea/*
@@ -32,7 +32,14 @@ import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.book.source.manage.BookSourceActivity
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.ui.widget.recycler.VerticalDivider
import io.legado.app.utils.* import io.legado.app.utils.StartActivityContract
import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare
import io.legado.app.utils.dpToPx
import io.legado.app.utils.observeEvent
import io.legado.app.utils.setLayout
import io.legado.app.utils.startActivity
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.conflate
@@ -72,6 +79,7 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
cancelButton() cancelButton()
okButton { okButton {
AppConfig.searchGroup = "" AppConfig.searchGroup = ""
upGroupMenu()
viewModel.startSearch() viewModel.startSearch()
} }
} }
@@ -233,17 +241,15 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
R.id.menu_start_stop -> viewModel.startOrStopSearch() R.id.menu_start_stop -> viewModel.startOrStopSearch()
R.id.menu_source_manage -> startActivity<BookSourceActivity>() R.id.menu_source_manage -> startActivity<BookSourceActivity>()
R.id.menu_refresh_list -> viewModel.startRefreshList() R.id.menu_refresh_list -> viewModel.startRefreshList()
else -> if (item?.groupId == R.id.source_group) { else -> if (item?.groupId == R.id.source_group && !item.isChecked) {
if (!item.isChecked) { item.isChecked = true
item.isChecked = true if (item.title.toString() == getString(R.string.all_source)) {
if (item.title.toString() == getString(R.string.all_source)) { AppConfig.searchGroup = ""
AppConfig.searchGroup = "" } else {
} else { AppConfig.searchGroup = item.title.toString()
AppConfig.searchGroup = item.title.toString()
}
viewModel.startOrStopSearch()
viewModel.refresh()
} }
viewModel.startOrStopSearch()
viewModel.refresh()
} }
} }
return false return false
@@ -339,24 +345,25 @@ class ChangeBookSourceDialog() : BaseDialogFragment(R.layout.dialog_book_change_
* 更新分组菜单 * 更新分组菜单
*/ */
private fun upGroupMenu() { private fun upGroupMenu() {
val menu: Menu = binding.toolBar.menu binding.toolBar.menu.findItem(R.id.menu_group)?.subMenu?.let { menu ->
val selectedGroup = AppConfig.searchGroup val selectedGroup = AppConfig.searchGroup
menu.removeGroup(R.id.source_group) menu.removeGroup(R.id.source_group)
val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source) val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source)
var hasSelectedGroup = false var hasSelectedGroup = false
groups.sortedWith { o1, o2 -> groups.sortedWith { o1, o2 ->
o1.cnCompare(o2) o1.cnCompare(o2)
}.forEach { group -> }.forEach { group ->
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let { menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let {
if (group == selectedGroup) { if (group == selectedGroup) {
it.isChecked = true it.isChecked = true
hasSelectedGroup = true hasSelectedGroup = true
}
} }
} }
} menu.setGroupCheckable(R.id.source_group, true, true)
menu.setGroupCheckable(R.id.source_group, true, true) if (!hasSelectedGroup) {
if (!hasSelectedGroup) { allItem.isChecked = true
allItem.isChecked = true }
} }
} }
@@ -97,6 +97,7 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
noButton() noButton()
yesButton { yesButton {
AppConfig.searchGroup = "" AppConfig.searchGroup = ""
upGroupMenu()
viewModel.startSearch() viewModel.startSearch()
} }
} }
@@ -262,17 +263,15 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
} }
R.id.menu_start_stop -> viewModel.startOrStopSearch() R.id.menu_start_stop -> viewModel.startOrStopSearch()
R.id.menu_source_manage -> startActivity<BookSourceActivity>() R.id.menu_source_manage -> startActivity<BookSourceActivity>()
else -> if (item?.groupId == R.id.source_group) { else -> if (item?.groupId == R.id.source_group && !item.isChecked) {
if (!item.isChecked) { item.isChecked = true
item.isChecked = true if (item.title.toString() == getString(R.string.all_source)) {
if (item.title.toString() == getString(R.string.all_source)) { AppConfig.searchGroup = ""
AppConfig.searchGroup = "" } else {
} else { AppConfig.searchGroup = item.title.toString()
AppConfig.searchGroup = item.title.toString()
}
viewModel.startOrStopSearch()
viewModel.refresh()
} }
viewModel.startOrStopSearch()
viewModel.refresh()
} }
} }
return false return false
@@ -359,24 +358,25 @@ class ChangeChapterSourceDialog() : BaseDialogFragment(R.layout.dialog_chapter_c
* 更新分组菜单 * 更新分组菜单
*/ */
private fun upGroupMenu() { private fun upGroupMenu() {
val menu: Menu = binding.toolBar.menu binding.toolBar.menu.findItem(R.id.menu_group)?.subMenu?.let { menu ->
val selectedGroup = AppConfig.searchGroup val selectedGroup = AppConfig.searchGroup
menu.removeGroup(R.id.source_group) menu.removeGroup(R.id.source_group)
val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source) val allItem = menu.add(R.id.source_group, Menu.NONE, Menu.NONE, R.string.all_source)
var hasSelectedGroup = false var hasSelectedGroup = false
groups.sortedWith { o1, o2 -> groups.sortedWith { o1, o2 ->
o1.cnCompare(o2) o1.cnCompare(o2)
}.forEach { group -> }.forEach { group ->
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let { menu.add(R.id.source_group, Menu.NONE, Menu.NONE, group)?.let {
if (group == selectedGroup) { if (group == selectedGroup) {
it.isChecked = true it.isChecked = true
hasSelectedGroup = true hasSelectedGroup = true
}
} }
} }
} menu.setGroupCheckable(R.id.source_group, true, true)
menu.setGroupCheckable(R.id.source_group, true, true) if (!hasSelectedGroup) {
if (!hasSelectedGroup) { allItem.isChecked = true
allItem.isChecked = true }
} }
} }
+12
View File
@@ -51,5 +51,17 @@
android:title="@string/load_toc" android:title="@string/load_toc"
android:checkable="true" android:checkable="true"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/menu_group"
android:title="@string/group">
<menu>
<group
android:id="@+id/source_group"
android:checkableBehavior="single">
</group>
</menu>
</item>
</menu> </menu>