Supports page turning when holding volume keys

This commit is contained in:
FooIbar authored and tarsin committed 2023-01-26 08:44:14 +08:00
1 parent 1e620931a2
commit 065a14952a
8 files changed
+74 -5

No files matched your search

@@ -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())
}
}
}
}
@@ -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)
@@ -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 })
@@ -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()
}
}
@@ -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()
}
}