diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderGeneralSettings.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderGeneralSettings.kt
index cb7186d65..158ff71c3 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderGeneralSettings.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderGeneralSettings.kt
@@ -51,7 +51,16 @@ class ReaderGeneralSettings @JvmOverloads constructor(context: Context, attrs: A
binding.volumePage.bindToPreference(readerPreferences.readWithVolumeKeys())
binding.reserveVolumePage.bindToPreference(readerPreferences.readWithVolumeKeysInverted())
readerPreferences.readWithVolumeKeys().asHotFlow {
+ binding.volumePageSpeed.isVisible = it
binding.reserveVolumePage.isVisible = it
}.launchIn((context as ReaderActivity).lifecycleScope)
+
+ val volumePageInterval = readerPreferences.readWithVolumeKeysInterval().get()
+ binding.sliderVolumePageInterval.value = volumePageInterval.toFloat()
+ binding.sliderVolumePageInterval.addOnChangeListener { _, value, fromUser ->
+ if (fromUser) {
+ readerPreferences.readWithVolumeKeysInterval().set(value.toInt())
+ }
+ }
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
index 2c9ee5356..2c2d87127 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
@@ -92,6 +92,8 @@ class ReaderPreferences(private val preferenceStore: PreferenceStore) {
fun readWithVolumeKeys() = preferenceStore.getBoolean("reader_volume_keys", false)
+ fun readWithVolumeKeysInterval() = preferenceStore.getInt("reader_volume_keys_interval", 0)
+
fun readWithVolumeKeysInverted() = preferenceStore.getBoolean("reader_volume_keys_inverted", false)
fun navigationModePager() = preferenceStore.getInt("reader_navigation_mode_pager", 0)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt
index cc2bd8297..282a2e661 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt
@@ -22,6 +22,7 @@ abstract class ViewerConfig(readerPreferences: ReaderPreferences, private val sc
var usePageTransitions = false
var doubleTapAnimDuration = 500
var volumeKeysEnabled = false
+ var volumeKeysInterval = 0
var volumeKeysInverted = false
var trueColor = false
var alwaysShowChapterTransition = true
@@ -54,6 +55,9 @@ abstract class ViewerConfig(readerPreferences: ReaderPreferences, private val sc
readerPreferences.readWithVolumeKeys()
.register({ volumeKeysEnabled = it })
+ readerPreferences.readWithVolumeKeysInterval()
+ .register({ volumeKeysInterval = it })
+
readerPreferences.readWithVolumeKeysInverted()
.register({ volumeKeysInverted = it })
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
index d32b6e437..79709db80 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt
@@ -11,8 +11,8 @@ import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.viewpager.widget.ViewPager
import com.hippo.ehviewer.R
-import eu.kanade.tachiyomi.ui.reader.loader.PageLoader
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
+import eu.kanade.tachiyomi.ui.reader.loader.PageLoader
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation.NavigationRegion
@@ -70,6 +70,8 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
}
}
+ private var longPressed = false
+
init {
pager.isVisible = false // Don't layout the pager yet
pager.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
@@ -304,19 +306,22 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
override fun handleKeyEvent(event: KeyEvent): Boolean {
val isUp = event.action == KeyEvent.ACTION_UP
val ctrlPressed = event.metaState.and(KeyEvent.META_CTRL_ON) > 0
+ val interval = config.volumeKeysInterval
+ val movePage = longPressed && (interval == 0 || event.repeatCount % (interval + 1) == 0)
+ longPressed = event.isLongPress || !isUp && longPressed
when (event.keyCode) {
KeyEvent.KEYCODE_VOLUME_DOWN -> {
if (!config.volumeKeysEnabled || activity.menuVisible) {
return false
- } else if (isUp) {
+ } else if (isUp != movePage) {
if (!config.volumeKeysInverted) moveDown() else moveUp()
}
}
KeyEvent.KEYCODE_VOLUME_UP -> {
if (!config.volumeKeysEnabled || activity.menuVisible) {
return false
- } else if (isUp) {
+ } else if (isUp != movePage) {
if (!config.volumeKeysInverted) moveUp() else moveDown()
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
index 46073cf20..c72b71a5d 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
@@ -66,6 +66,8 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
private val threshold: Int = 13
+ private var longPressed = false
+
init {
recycler.isVisible = false // Don't let the recycler layout yet
recycler.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
@@ -214,19 +216,22 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
*/
override fun handleKeyEvent(event: KeyEvent): Boolean {
val isUp = event.action == KeyEvent.ACTION_UP
+ val interval = config.volumeKeysInterval
+ val movePage = longPressed && (interval == 0 || event.repeatCount % (interval + 1) == 0)
+ longPressed = event.isLongPress || !isUp && longPressed
when (event.keyCode) {
KeyEvent.KEYCODE_VOLUME_DOWN -> {
if (!config.volumeKeysEnabled || activity.menuVisible) {
return false
- } else if (isUp) {
+ } else if (isUp != movePage) {
if (!config.volumeKeysInverted) scrollDown() else scrollUp()
}
}
KeyEvent.KEYCODE_VOLUME_UP -> {
if (!config.volumeKeysEnabled || activity.menuVisible) {
return false
- } else if (isUp) {
+ } else if (isUp != movePage) {
if (!config.volumeKeysInverted) scrollUp() else scrollDown()
}
}
diff --git a/app/src/main/res/layout/reader_general_settings.xml b/app/src/main/res/layout/reader_general_settings.xml
index ed8e8b079..4876fd011 100644
--- a/app/src/main/res/layout/reader_general_settings.xml
+++ b/app/src/main/res/layout/reader_general_settings.xml
@@ -91,6 +91,46 @@
android:text="@string/settings_read_volume_page"
android:textColor="?android:attr/textColorSecondary" />
+
+
+
+
+
+
+
+
+
屏蔽列表
根据标题、上传者、标签、评论者屏蔽画廊或评论
使用音量键翻页
+ 快
+ 慢
翻转音量键
下载
下载路径
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 437f9ca76..30e2bfb6f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -390,6 +390,8 @@
Blockers
Block gallery or comment by title, uploader, tags and commenter
Use volume key to turn pages
+ Fast
+ Slow
Reverse volume key
Download
Download location