增加全局阅读配置界面 #135

This commit is contained in:
HapeLee
2025-10-26 15:38:31 +08:00
parent 61368caa89
commit 363fcb251b
8 changed files with 372 additions and 193 deletions
@@ -21,6 +21,7 @@ class ConfigActivity : VMBaseActivity<ActivityConfigBinding, ConfigViewModel>()
ConfigTag.THEME_CONFIG -> replaceFragment<ThemeConfigFragment>(configTag)
ConfigTag.BACKUP_CONFIG -> replaceFragment<BackupConfigFragment>(configTag)
ConfigTag.COVER_CONFIG -> replaceFragment<CoverConfigFragment>(configTag)
ConfigTag.READ_CONFIG -> replaceFragment<ReadConfigFragment>(configTag)
else -> finish()
}
}
@@ -6,6 +6,6 @@ object ConfigTag {
const val THEME_CONFIG = "themeConfig"
const val BACKUP_CONFIG = "backupConfig"
const val COVER_CONFIG = "coverConfig"
const val WELCOME_CONFIG = "welcomeConfig"
const val READ_CONFIG = "readConfig"
}
@@ -0,0 +1,175 @@
package io.legato.kazusa.ui.config
import android.annotation.SuppressLint
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import android.view.ViewConfiguration
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import io.legato.kazusa.R
import io.legato.kazusa.constant.EventBus
import io.legato.kazusa.constant.PreferKey
import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.help.config.ReadBookConfig
import io.legato.kazusa.model.ReadBook
import io.legato.kazusa.ui.book.read.ReadBookActivity
import io.legato.kazusa.ui.book.read.config.PageKeyDialog
import io.legato.kazusa.ui.book.read.page.provider.ChapterProvider
import io.legato.kazusa.ui.widget.number.NumberPickerDialog
import io.legato.kazusa.utils.canvasrecorder.CanvasRecorderFactory
import io.legato.kazusa.utils.getPrefBoolean
import io.legato.kazusa.utils.postEvent
import io.legato.kazusa.utils.removePref
class ReadConfigFragment : PreferenceFragmentCompat(),
SharedPreferences.OnSharedPreferenceChangeListener {
private val slopSquare by lazy { ViewConfiguration.get(requireContext()).scaledTouchSlop }
@SuppressLint("RestrictedApi")
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_config_read)
upPreferenceSummary(PreferKey.menuAlpha, AppConfig.menuAlpha.toString())
upPreferenceSummary(PreferKey.pageTouchSlop, slopSquare.toString())
if (!CanvasRecorderFactory.isSupport) {
removePref(PreferKey.optimizeRender)
preferenceScreen.removePreferenceRecursively(PreferKey.optimizeRender)
}
val pref = findPreference<Preference>("clickRegionalConfig")
pref?.isEnabled = false
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.setTitle(R.string.read)
}
override fun onResume() {
super.onResume()
preferenceManager
.sharedPreferences
?.registerOnSharedPreferenceChangeListener(this)
}
override fun onPause() {
preferenceManager
.sharedPreferences
?.unregisterOnSharedPreferenceChangeListener(this)
super.onPause()
}
override fun onSharedPreferenceChanged(
sharedPreferences: SharedPreferences?,
key: String?
) {
when (key) {
PreferKey.readBodyToLh -> activity?.recreate()
PreferKey.hideStatusBar -> {
ReadBookConfig.hideStatusBar = getPrefBoolean(PreferKey.hideStatusBar)
postEvent(EventBus.UP_CONFIG, arrayListOf(0, 2))
}
PreferKey.hideNavigationBar -> {
ReadBookConfig.hideNavigationBar = getPrefBoolean(PreferKey.hideNavigationBar)
postEvent(EventBus.UP_CONFIG, arrayListOf(0, 2))
}
PreferKey.keepLight -> postEvent(key, true)
PreferKey.readSliderMode -> postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
PreferKey.textSelectAble -> postEvent(key, getPrefBoolean(key))
PreferKey.screenOrientation -> {
(activity as? ReadBookActivity)?.setOrientation()
}
PreferKey.textFullJustify,
PreferKey.textBottomJustify,
PreferKey.useZhLayout -> {
postEvent(EventBus.UP_CONFIG, arrayListOf(5))
}
PreferKey.showBrightnessView -> {
postEvent(PreferKey.showBrightnessView, "")
}
PreferKey.expandTextMenu -> {
(activity as? ReadBookActivity)?.textActionMenu?.upMenu()
}
PreferKey.doublePageHorizontal -> {
ChapterProvider.upLayout()
ReadBook.loadContent(false)
}
PreferKey.showReadTitleAddition,
PreferKey.readBarStyleFollowPage -> {
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
}
PreferKey.progressBarBehavior -> {
postEvent(EventBus.UP_SEEK_BAR, true)
}
PreferKey.noAnimScrollPage -> {
ReadBook.callBack?.upPageAnim()
}
PreferKey.optimizeRender -> {
ChapterProvider.upStyle()
ReadBook.callBack?.upPageAnim(true)
ReadBook.loadContent(false)
}
PreferKey.paddingDisplayCutouts -> {
postEvent(EventBus.UP_CONFIG, arrayListOf(2))
}
}
}
override fun onPreferenceTreeClick(preference: Preference): Boolean {
when (preference.key) {
"customPageKey" -> PageKeyDialog(requireContext()).show()
"clickRegionalConfig" -> {
(activity as? ReadBookActivity)?.showClickRegionalConfig()
}
PreferKey.menuAlpha -> {
NumberPickerDialog(requireContext())
.setTitle(getString(R.string.menu_alpha))
.setMaxValue(100)
.setMinValue(0)
.setValue(AppConfig.menuAlpha)
.show {
AppConfig.menuAlpha = it
upPreferenceSummary(PreferKey.menuAlpha, it.toString())
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
}
}
PreferKey.pageTouchSlop -> {
NumberPickerDialog(requireContext())
.setTitle(getString(R.string.page_touch_slop_dialog_title))
.setMaxValue(9999)
.setMinValue(0)
.setValue(AppConfig.pageTouchSlop)
.show {
AppConfig.pageTouchSlop = it
postEvent(EventBus.UP_CONFIG, arrayListOf(4))
}
}
}
return super.onPreferenceTreeClick(preference)
}
@Suppress("SameParameterValue")
private fun upPreferenceSummary(preferenceKey: String, value: String?) {
val preference = findPreference<Preference>(preferenceKey) ?: return
when (preferenceKey) {
PreferKey.menuAlpha -> preference.summary =
getString(R.string.menu_alpha_sum, AppConfig.menuAlpha)
PreferKey.pageTouchSlop -> preference.summary =
getString(R.string.page_touch_slop_summary, value)
}
}
}
@@ -152,6 +152,10 @@ class MyFragment() : BaseFragment(R.layout.fragment_my_config), MainFragmentInte
putExtra("configTag", ConfigTag.THEME_CONFIG)
}
"read_setting" -> startActivity<ConfigActivity> {
putExtra("configTag", ConfigTag.READ_CONFIG)
}
"fileManage" -> startActivity<FileManageActivity>()
"readRecord" -> startActivity<ReadRecordActivity>()
"about" -> startActivity<AboutActivity>()