Tab快速选择
This commit is contained in:
@@ -217,6 +217,7 @@ object PreferKey {
|
||||
|
||||
const val disableMangaScrollAnimation = "disableMangaScrollAnimation"
|
||||
const val disableMangaCrossFade = "disableMangaCrossFade"
|
||||
|
||||
const val titleBarMode = "titleBarMode"
|
||||
|
||||
const val shouldShowExpandButton = "shouldShowExpandButton"
|
||||
}
|
||||
|
||||
@@ -883,5 +883,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
set(value) {
|
||||
appCtx.putPrefBoolean(PreferKey.isPredictiveBackEnabled, value)
|
||||
}
|
||||
|
||||
var shouldShowExpandButton: Boolean
|
||||
get() = appCtx.getPrefBoolean(PreferKey.shouldShowExpandButton, false)
|
||||
set(value) {
|
||||
appCtx.putPrefBoolean(PreferKey.shouldShowExpandButton, value)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -31,12 +31,6 @@ class BookshelfConfigBottomSheet : BaseBottomSheetDialogFragment(R.layout.dialog
|
||||
AppConfig.bookshelfLayoutModePortrait
|
||||
}
|
||||
|
||||
val isList = bookshelfLayout == 0
|
||||
val isGrid = bookshelfLayout == 1
|
||||
val isGridCompact = bookshelfLayout == 2
|
||||
val isGridCover = bookshelfLayout == 3
|
||||
val isListCompact = bookshelfLayout == 4
|
||||
|
||||
val columnCount = requireContext().bookshelfLayoutGrid.takeIf { it > 0 } ?: 1
|
||||
|
||||
val bookshelfSort = AppConfig.bookshelfSort
|
||||
@@ -73,27 +67,36 @@ class BookshelfConfigBottomSheet : BaseBottomSheetDialogFragment(R.layout.dialog
|
||||
swShowLastUpdateTime.isChecked = AppConfig.showLastUpdateTime
|
||||
swShowWaitUpBooks.isChecked = AppConfig.showWaitUpCount
|
||||
swShowBookshelfFastScroller.isChecked = AppConfig.showBookshelfFastScroller
|
||||
swShowBookshelfTabMenu.isChecked = AppConfig.shouldShowExpandButton
|
||||
|
||||
when (bookshelfLayout) {
|
||||
0 -> chipGroupLayout.check(R.id.chip_list)
|
||||
1 -> chipGroupLayout.check(R.id.chip_grid)
|
||||
2 -> chipGroupLayout.check(R.id.chip_grid_compact)
|
||||
3 -> chipGroupLayout.check(R.id.chip_grid_cover)
|
||||
4 -> chipGroupLayout.check(R.id.chip_list_compact)
|
||||
}
|
||||
|
||||
chipList.isChecked = isList
|
||||
chipListCompact.isChecked = isListCompact
|
||||
chipGrid.isChecked = isGrid
|
||||
chipGridCompact.isChecked = isGridCompact
|
||||
chipGridCover.isChecked = isGridCover
|
||||
sliderGridCount.progress = columnCount
|
||||
|
||||
binding.tvValue.text = if (AppConfig.bookshelfRefreshingLimit <= 0) "无限制"
|
||||
else "${AppConfig.bookshelfRefreshingLimit} 本"
|
||||
updateControlsEnableState()
|
||||
|
||||
chipGroupLayout.setOnCheckedStateChangeListener { group, checkedIds ->
|
||||
updateControlsEnableState()
|
||||
}
|
||||
|
||||
chipGroupStyle.setOnCheckedStateChangeListener { group, checkedIds ->
|
||||
updateControlsEnableState()
|
||||
}
|
||||
|
||||
binding.tvValue.text = if (AppConfig.bookshelfRefreshingLimit <= 0) "无限制"
|
||||
else "${AppConfig.bookshelfRefreshingLimit} 本"
|
||||
|
||||
binding.tvValue.setOnClickListener {
|
||||
showNumberPicker()
|
||||
}
|
||||
binding.layoutRefreshLimit.setOnClickListener {
|
||||
NumberPickerDialog(requireContext())
|
||||
.setTitle("书架更新数量限制")
|
||||
.setMinValue(0) // 0 表示无限制
|
||||
.setMaxValue(500) // 可根据需求设定最大值
|
||||
.setValue(AppConfig.bookshelfRefreshingLimit)
|
||||
.show { selected ->
|
||||
AppConfig.bookshelfRefreshingLimit = selected
|
||||
tvValue.text = if (selected <= 0) "无限制" else "$selected 本"
|
||||
}
|
||||
showNumberPicker()
|
||||
}
|
||||
|
||||
when (AppConfig.bookshelfSortOrder) {
|
||||
@@ -128,19 +131,22 @@ class BookshelfConfigBottomSheet : BaseBottomSheetDialogFragment(R.layout.dialog
|
||||
AppConfig.showBookshelfFastScroller = swShowBookshelfFastScroller.isChecked
|
||||
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
||||
}
|
||||
|
||||
if (AppConfig.shouldShowExpandButton != swShowBookshelfTabMenu.isChecked) {
|
||||
AppConfig.shouldShowExpandButton = swShowBookshelfTabMenu.isChecked
|
||||
postEvent(EventBus.BOOKSHELF_REFRESH, "")
|
||||
}
|
||||
if (bookshelfSort != chipGroupSort.checkedChipId) {
|
||||
AppConfig.bookshelfSort = chipGroupSort.checkedChipId
|
||||
(requireParentFragment() as? BaseBookshelfFragment)?.upSort()
|
||||
}
|
||||
|
||||
val selectedColumn = sliderGridCount.progress
|
||||
val newLayout = when {
|
||||
chipList.isChecked -> 0
|
||||
chipGrid.isChecked -> 1
|
||||
chipGridCompact.isChecked -> 2
|
||||
chipGridCover.isChecked -> 3
|
||||
chipListCompact.isChecked -> 4
|
||||
val newLayout = when (chipGroupLayout.checkedChipId) {
|
||||
R.id.chip_list -> 0
|
||||
R.id.chip_grid -> 1
|
||||
R.id.chip_grid_compact -> 2
|
||||
R.id.chip_grid_cover -> 3
|
||||
R.id.chip_list_compact -> 4
|
||||
else -> 0
|
||||
}
|
||||
|
||||
@@ -187,4 +193,26 @@ class BookshelfConfigBottomSheet : BaseBottomSheetDialogFragment(R.layout.dialog
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private fun showNumberPicker() {
|
||||
NumberPickerDialog(requireContext())
|
||||
.setTitle("书架更新数量限制")
|
||||
.setMinValue(0) // 0 表示无限制
|
||||
.setMaxValue(500) // 可根据需求设定最大值
|
||||
.setValue(AppConfig.bookshelfRefreshingLimit)
|
||||
.show { selected ->
|
||||
AppConfig.bookshelfRefreshingLimit = selected
|
||||
binding.tvValue.text = if (selected <= 0) "无限制" else "$selected 本"
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateControlsEnableState() {
|
||||
val checkedLayoutId = binding.chipGroupLayout.checkedChipId
|
||||
val isListMode = checkedLayoutId == R.id.chip_list || checkedLayoutId == R.id.chip_list_compact
|
||||
binding.swShowLastUpdateTime.isEnabled = isListMode
|
||||
|
||||
|
||||
val checkedStyleChip = binding.chipGroupStyle.findViewById<Chip>(binding.chipGroupStyle.checkedChipId)
|
||||
val isGroupStyle0 = binding.chipGroupStyle.indexOfChild(checkedStyleChip) == 0
|
||||
binding.swShowBookshelfTabMenu.isEnabled = isGroupStyle0
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,12 @@
|
||||
package io.legado.app.ui.main.bookshelf.books
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
@@ -21,6 +24,7 @@ import io.legado.app.ui.book.group.GroupEditDialog
|
||||
import io.legado.app.ui.book.search.SearchActivity
|
||||
import io.legado.app.ui.main.bookshelf.BaseBookshelfFragment
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
import io.legado.app.utils.themeColor
|
||||
import io.legado.app.utils.toastOnUi
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import kotlin.collections.set
|
||||
@@ -58,6 +62,7 @@ class BookshelfFragment1() : BaseBookshelfFragment(R.layout.fragment_bookshelf1)
|
||||
binding.titleBar.fitsSystemWindows = true
|
||||
initView()
|
||||
initBookGroupData()
|
||||
setupExpandButton()
|
||||
}
|
||||
|
||||
private val selectedGroup: BookGroup?
|
||||
@@ -71,6 +76,58 @@ class BookshelfFragment1() : BaseBookshelfFragment(R.layout.fragment_bookshelf1)
|
||||
TabLayoutMediator(binding.tabLayout, binding.viewPagerBookshelf) { tab, position ->
|
||||
tab.text = bookGroups[position].groupName
|
||||
}.attach()
|
||||
|
||||
updateTabFadeEffect()
|
||||
}
|
||||
|
||||
private fun setupExpandButton() {
|
||||
binding.btnExpandTabs.setOnClickListener {
|
||||
showTabSelectionMenu()
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateTabFadeEffect() {
|
||||
binding.titleBar.addOnOffsetChangedListener({ appBarLayout, verticalOffset ->
|
||||
if (-verticalOffset >= appBarLayout.totalScrollRange) {
|
||||
val drawable = binding.tabRightFade.background as? GradientDrawable
|
||||
drawable?.colors = intArrayOf(Color.TRANSPARENT,
|
||||
requireContext().themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
|
||||
} else {
|
||||
val drawable = binding.tabRightFade.background as? GradientDrawable
|
||||
drawable?.colors = intArrayOf(Color.TRANSPARENT,
|
||||
requireContext().themeColor(com.google.android.material.R.attr.colorSurface))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun showTabSelectionMenu() {
|
||||
val popup = PopupMenu(requireContext(), binding.btnExpandTabs)
|
||||
|
||||
bookGroups.forEachIndexed { index, bookGroup ->
|
||||
popup.menu.add(0, index, index, bookGroup.groupName)
|
||||
}
|
||||
|
||||
popup.setOnMenuItemClickListener { item ->
|
||||
val position = item.itemId
|
||||
if (position in bookGroups.indices) {
|
||||
binding.viewPagerBookshelf.setCurrentItem(position, true)
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
popup.setOnDismissListener {
|
||||
binding.btnExpandTabs.isChecked = false
|
||||
}
|
||||
|
||||
popup.show()
|
||||
}
|
||||
|
||||
private fun updateExpandButtonVisibility() {
|
||||
binding.btnExpandTabs.visibility = if (AppConfig.shouldShowExpandButton) {
|
||||
View.VISIBLE
|
||||
} else {
|
||||
View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
override fun onQueryTextSubmit(query: String?): Boolean {
|
||||
@@ -99,6 +156,8 @@ class BookshelfFragment1() : BaseBookshelfFragment(R.layout.fragment_bookshelf1)
|
||||
tab.text = bookGroups[position].groupName
|
||||
}.attach()
|
||||
|
||||
updateExpandButtonVisibility()
|
||||
updateTabFadeEffect()
|
||||
selectLastTab()
|
||||
|
||||
binding.tabLayout.post {
|
||||
|
||||
Reference in New Issue
Block a user