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