From e39105f781833628c32ea31b58547afdfd83f463 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Sat, 23 Dec 2023 22:57:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/constant/PreferKey.kt | 3 +- .../io/legado/app/help/config/AppConfig.kt | 7 +- .../app/ui/book/read/BaseReadBookActivity.kt | 20 ++- .../app/ui/book/read/ReadBookActivity.kt | 138 ++++++++++-------- .../legado/app/ui/book/read/page/PageView.kt | 14 +- app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-ja-rJP/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rHK/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/pref_config_read.xml | 4 +- 14 files changed, 114 insertions(+), 88 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 54221b68c..c213788db 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -140,9 +140,10 @@ object PreferKey { const val showBookshelfFastScroller = "showBookshelfFastScroller" const val importKeepEnable = "importKeepEnable" const val previewImageByClick = "previewImageByClick" - const val volumeKeyPageOnLongPress = "volumeKeyPageOnLongPress" + const val keyPageOnLongPress = "keyPageOnLongPress" const val volumeKeyPage = "volumeKeyPage" const val volumeKeyPageOnPlay = "volumeKeyPageOnPlay" + const val mouseWheelPage = "mouseWheelPage" const val cPrimary = "colorPrimary" const val cAccent = "colorAccent" diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index b59cc3250..e776ef866 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -467,8 +467,8 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { val progressBarBehavior: String? get() = appCtx.getPrefString(PreferKey.progressBarBehavior, "page") - val volumeKeyPageOnLongPress - get() = appCtx.getPrefBoolean(PreferKey.volumeKeyPageOnLongPress, false) + val keyPageOnLongPress + get() = appCtx.getPrefBoolean(PreferKey.keyPageOnLongPress, false) val volumeKeyPage get() = appCtx.getPrefBoolean(PreferKey.volumeKeyPage, true) @@ -476,6 +476,9 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { val volumeKeyPageOnPlay get() = appCtx.getPrefBoolean(PreferKey.volumeKeyPageOnPlay, true) + val mouseWheelPage + get() = appCtx.getPrefBoolean(PreferKey.mouseWheelPage, true) + var searchScope: String get() = appCtx.getPrefString("searchScope") ?: "" set(value) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt index 1d9291185..a7735129b 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt @@ -5,6 +5,7 @@ import android.content.pm.ActivityInfo import android.os.Build import android.os.Bundle import android.view.Gravity +import android.view.KeyEvent import android.view.View import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.WindowInsets @@ -34,8 +35,19 @@ import io.legado.app.ui.book.read.config.ClickActionConfigDialog import io.legado.app.ui.book.read.config.PaddingConfigDialog import io.legado.app.ui.book.read.config.PageKeyDialog import io.legado.app.ui.file.HandleFileContract -import io.legado.app.utils.* +import io.legado.app.utils.ColorUtils +import io.legado.app.utils.FileDoc +import io.legado.app.utils.find +import io.legado.app.utils.getPrefString +import io.legado.app.utils.gone +import io.legado.app.utils.isTv +import io.legado.app.utils.navigationBarGravity +import io.legado.app.utils.navigationBarHeight +import io.legado.app.utils.setLightStatusBar +import io.legado.app.utils.setNavigationBarColorAuto +import io.legado.app.utils.showDialogFragment import io.legado.app.utils.viewbindingdelegate.viewBinding +import io.legado.app.utils.visible /** * 阅读界面 @@ -303,11 +315,17 @@ abstract class BaseReadBookActivity : } fun isPrevKey(keyCode: Int): Boolean { + if (keyCode == KeyEvent.KEYCODE_UNKNOWN) { + return false + } val prevKeysStr = getPrefString(PreferKey.prevKeys) return prevKeysStr?.split(",")?.contains(keyCode.toString()) ?: false } fun isNextKey(keyCode: Int): Boolean { + if (keyCode == KeyEvent.KEYCODE_UNKNOWN) { + return false + } val nextKeysStr = getPrefString(PreferKey.nextKeys) return nextKeysStr?.split(",")?.contains(keyCode.toString()) ?: false } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index d5262249e..5b4d3a073 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.content.res.Configuration import android.net.Uri import android.os.Bundle +import android.os.SystemClock import android.view.Gravity import android.view.InputDevice import android.view.KeyEvent @@ -96,6 +97,7 @@ import io.legado.app.utils.LogUtils import io.legado.app.utils.StartActivityContract import io.legado.app.utils.SyncedRenderer import io.legado.app.utils.applyOpenTint +import io.legado.app.utils.buildMainHandler import io.legado.app.utils.getPrefBoolean import io.legado.app.utils.getPrefString import io.legado.app.utils.hexString @@ -215,13 +217,15 @@ class ReadBookActivity : BaseReadBookActivity(), override val pageFactory: TextPageFactory get() = binding.readView.pageFactory override val headerHeight: Int get() = binding.readView.curPage.headerHeight private val menuLayoutIsVisible get() = bottomDialog > 0 || binding.readMenu.isVisible - private val nextPageRunnable by lazy { Runnable { mouseWheelPage(PageDirection.NEXT) } } - private val prevPageRunnable by lazy { Runnable { mouseWheelPage(PageDirection.PREV) } } + private val nextPageRunnable by lazy { Runnable { keyPage(PageDirection.NEXT) } } + private val prevPageRunnable by lazy { Runnable { keyPage(PageDirection.PREV) } } private var bookChanged = false private var pageChanged = false private var reloadContent = false private val autoPageRenderer by lazy { SyncedRenderer { doAutoPage(it) } } private var autoPageScrollOffset = 0.0 + private val handler by lazy { buildMainHandler() } + private var lastKeyPageTime = 0L //恢复跳转前进度对话框的交互结果 private var confirmRestoreProcess: Boolean? = null @@ -601,13 +605,11 @@ class ReadBookActivity : BaseReadBookActivity(), if (event.action == MotionEvent.ACTION_SCROLL) { val axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL) LogUtils.d("onGenericMotionEvent", "axisValue = $axisValue") - binding.root.removeCallbacks(nextPageRunnable) - binding.root.removeCallbacks(prevPageRunnable) // 获得垂直坐标上的滚动方向 if (axisValue < 0.0f) { // 滚轮向下滚 - binding.root.postDelayed(nextPageRunnable, 200) + mouseWheelPage(PageDirection.NEXT) } else { // 滚轮向上滚 - binding.root.postDelayed(prevPageRunnable, 200) + mouseWheelPage(PageDirection.PREV) } return true } @@ -624,52 +626,40 @@ class ReadBookActivity : BaseReadBookActivity(), } when { isPrevKey(keyCode) -> { - if (keyCode != KeyEvent.KEYCODE_UNKNOWN) { - binding.readView.cancelSelect() - binding.readView.pageDelegate?.keyTurnPage(PageDirection.PREV) - return true - } + handleKeyPage(PageDirection.PREV) + return true } isNextKey(keyCode) -> { - if (keyCode != KeyEvent.KEYCODE_UNKNOWN) { - binding.readView.cancelSelect() - binding.readView.pageDelegate?.keyTurnPage(PageDirection.NEXT) - return true - } - } - - keyCode == KeyEvent.KEYCODE_VOLUME_UP -> { - if (volumeKeyPage(PageDirection.PREV, event.repeatCount > 0)) { - return true - } - } - - keyCode == KeyEvent.KEYCODE_VOLUME_DOWN -> { - if (volumeKeyPage(PageDirection.NEXT, event.repeatCount > 0)) { - return true - } - } - - keyCode == KeyEvent.KEYCODE_PAGE_UP -> { - binding.readView.cancelSelect() - binding.readView.pageDelegate?.keyTurnPage(PageDirection.PREV) + handleKeyPage(PageDirection.NEXT) return true } - - keyCode == KeyEvent.KEYCODE_PAGE_DOWN -> { - binding.readView.cancelSelect() - binding.readView.pageDelegate?.keyTurnPage(PageDirection.NEXT) - return true - } - - keyCode == KeyEvent.KEYCODE_SPACE -> { - binding.readView.cancelSelect() - binding.readView.pageDelegate?.keyTurnPage(PageDirection.NEXT) - return true - } - } + when (keyCode) { + KeyEvent.KEYCODE_VOLUME_UP -> if (volumeKeyPage(PageDirection.PREV)) { + return true + } + + KeyEvent.KEYCODE_VOLUME_DOWN -> if (volumeKeyPage(PageDirection.NEXT)) { + return true + } + + KeyEvent.KEYCODE_PAGE_UP -> { + handleKeyPage(PageDirection.PREV) + return true + } + + KeyEvent.KEYCODE_PAGE_DOWN -> { + handleKeyPage(PageDirection.NEXT) + return true + } + + KeyEvent.KEYCODE_SPACE -> { + handleKeyPage(PageDirection.NEXT) + return true + } + } + return super.onKeyDown(keyCode, event) } @@ -679,7 +669,7 @@ class ReadBookActivity : BaseReadBookActivity(), override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { when (keyCode) { KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_DOWN -> { - if (volumeKeyPage(PageDirection.NONE, event.repeatCount > 0)) { + if (volumeKeyPage(PageDirection.NONE)) { return true } } @@ -858,37 +848,61 @@ class ReadBookActivity : BaseReadBookActivity(), /** * 鼠标滚轮翻页 */ - private fun mouseWheelPage(direction: PageDirection): Boolean { - if (!binding.readMenu.isVisible) { - if (getPrefBoolean("mouseWheelPage", true)) { - binding.readView.pageDelegate?.isCancel = false - binding.readView.pageDelegate?.keyTurnPage(direction) - return true - } + private fun mouseWheelPage(direction: PageDirection) { + if (menuLayoutIsVisible || !AppConfig.mouseWheelPage) { + return } - return false + keyPageDebounce(direction, 200L, true) } /** * 音量键翻页 */ - private fun volumeKeyPage(direction: PageDirection, longPress: Boolean): Boolean { - if (menuLayoutIsVisible) { - return false - } + private fun volumeKeyPage(direction: PageDirection): Boolean { if (!AppConfig.volumeKeyPage) { return false } if (!AppConfig.volumeKeyPageOnPlay && BaseReadAloudService.isPlay()) { return false } - if (!AppConfig.volumeKeyPageOnLongPress && longPress) { - return true + handleKeyPage(direction) + return true + } + + private fun handleKeyPage(direction: PageDirection) { + if (AppConfig.keyPageOnLongPress || direction == PageDirection.NONE) { + keyPage(direction) + } else { + keyPageDebounce(direction) } + } + + private fun keyPageDebounce( + direction: PageDirection, + delay: Long = 100L, + mouseWheel: Boolean = false + ) { + handler.removeCallbacks(nextPageRunnable) + handler.removeCallbacks(prevPageRunnable) + if (!mouseWheel) { + val keyPageTime = SystemClock.uptimeMillis() + val elapsed = keyPageTime - lastKeyPageTime + lastKeyPageTime = keyPageTime + if (elapsed < 100) { + return + } + } + when (direction) { + PageDirection.NEXT -> handler.postDelayed(nextPageRunnable, delay) + PageDirection.PREV -> handler.postDelayed(prevPageRunnable, delay) + else -> {} + } + } + + private fun keyPage(direction: PageDirection) { binding.readView.cancelSelect() binding.readView.pageDelegate?.isCancel = false binding.readView.pageDelegate?.keyTurnPage(direction) - return true } override fun upMenuView() { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index 45f80709f..632e52f5d 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -324,18 +324,8 @@ class PageView(context: Context) : FrameLayout(context) { text = readProgress } } - tvTotalProgress1?.apply { - val progress = "${chapterIndex.plus(1)}/${chapterSize}" - if (text != progress) { - text = progress - } - } - tvPageAndTotal?.apply { - val pageAndTotal = "${index.plus(1)}/$pageSize $readProgress" - if (text != pageAndTotal) { - text = pageAndTotal - } - } + tvTotalProgress1?.text = "${chapterIndex.plus(1)}/${chapterSize}" + tvPageAndTotal?.text = "${index.plus(1)}/$pageSize $readProgress" } /** diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 2cf7dbe3e..a535adb05 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1139,5 +1139,5 @@ 调整本章页数 调整章节位置 清除成功,3秒后自动重启应用 - 长按音量键翻页 + 按键长按翻页 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 44c500503..2139cb703 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1142,5 +1142,5 @@ 调整本章页数 调整章节位置 清除成功,3秒后自动重启应用 - 长按音量键翻页 + 按键长按翻页 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 445339b01..cafde6dcf 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1142,5 +1142,5 @@ 调整本章页数 调整章节位置 清除成功,3秒后自动重启应用 - 长按音量键翻页 + 按键长按翻页 diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 31f68870f..fb633eac9 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1138,5 +1138,5 @@ Còn 调整本章页数 调整章节位置 清除成功,3秒后自动重启应用 - 长按音量键翻页 + 按键长按翻页 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 76277a8e2..701b26050 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1139,5 +1139,5 @@ 调整本章页数 调整章节位置 清除成功,3秒后自动重启应用 - 长按音量键翻页 + 按键长按翻页 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e92441421..b906e44cf 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1141,5 +1141,5 @@ 调整本章页数 调整章节位置 清除成功,3秒后自动重启应用 - 长按音量键翻页 + 按键长按翻页 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 828396447..2d1547e04 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1141,5 +1141,5 @@ 调整本章页数 调整章节位置 清除成功,3秒后自动重启应用 - 长按音量键翻页 + 按键长按翻页 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb693bdf5..f43c806bb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1142,5 +1142,5 @@ Adjust of chapter page Adjust of chapter index Cleared successfully, automatically restarts the application after 3 seconds - Press and hold the volume key to turn the page + Press and hold the key to turn the page diff --git a/app/src/main/res/xml/pref_config_read.xml b/app/src/main/res/xml/pref_config_read.xml index 150dad276..045303a6d 100644 --- a/app/src/main/res/xml/pref_config_read.xml +++ b/app/src/main/res/xml/pref_config_read.xml @@ -103,8 +103,8 @@