From e0b1b182992aa193df6bebfbac08ca1cea7acc42 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 1 Dec 2024 15:11:03 +0800 Subject: [PATCH] Support reverse physical key controls in reader --- app/src/main/kotlin/com/hippo/ehviewer/Settings.kt | 1 + .../kotlin/com/hippo/ehviewer/ui/reader/KeyEventHandler.kt | 5 +++-- .../com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt | 4 ++++ .../main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt | 2 ++ app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt index 5cccc8355..49252ce1e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt @@ -195,6 +195,7 @@ object Settings : DataStorePreferences(null) { val keepScreenOn = boolPref("pref_keep_screen_on_key", true) val readerLongTapAction = boolPref("reader_long_tap", true) val pageTransitions = boolPref("pref_enable_transitions_key", true) + val readerReverseControls = boolPref("reader_volume_keys_inverted", false) val grayScale = boolPref("pref_grayscale", false) val invertedColors = boolPref("pref_inverted_colors", false) val readerWebtoonNav = intPref("reader_navigation_mode_webtoon", 0) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/KeyEventHandler.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/KeyEventHandler.kt index 3e34a5644..ada910322 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/KeyEventHandler.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/KeyEventHandler.kt @@ -9,13 +9,14 @@ import androidx.compose.ui.input.key.type fun Modifier.keyEventHandler( enabled: () -> Boolean, + reverse: () -> Boolean, movePrevious: () -> Unit, moveNext: () -> Unit, ) = onPreviewKeyEvent { if (enabled() && it.type == KeyEventType.KeyDown) { when (it.key) { - Key.DirectionUp, Key.PageUp, Key.VolumeUp -> movePrevious() - Key.DirectionDown, Key.PageDown, Key.VolumeDown -> moveNext() + Key.DirectionUp, Key.PageUp, Key.VolumeUp -> if (reverse()) moveNext() else movePrevious() + Key.DirectionDown, Key.PageDown, Key.VolumeDown -> if (reverse()) movePrevious() else moveNext() else -> return@onPreviewKeyEvent false } true diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt index 1cfb9cc13..29204ac14 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt @@ -63,4 +63,8 @@ fun ReaderGeneralSetting() = Column(modifier = Modifier.verticalScroll(rememberS title = stringResource(id = R.string.pref_page_transitions), field = Settings.pageTransitions.asMutableState(), ) + SwitchChoice( + title = stringResource(id = R.string.settings_read_reverse_controls), + field = Settings.readerReverseControls.asMutableState(), + ) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt index 1cf7e87b6..ef5650e6d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt @@ -188,6 +188,7 @@ fun AnimatedVisibilityScope.ReaderScreen(pageLoader: PageLoader, info: BaseGalle } val showSeekbar by Settings.showReaderSeekbar.collectAsState() val readingMode by Settings.readingMode.collectAsState { ReadingModeType.fromPreference(it) } + val reverseControls by Settings.readerReverseControls.collectAsState() val fullscreen by Settings.fullscreen.collectAsState() val cutoutShort by Settings.cutoutShort.collectAsState() val uiController = rememberSystemUiController() @@ -207,6 +208,7 @@ fun AnimatedVisibilityScope.ReaderScreen(pageLoader: PageLoader, info: BaseGalle Box( Modifier.keyEventHandler( enabled = { !appbarVisible }, + reverse = { reverseControls }, movePrevious = { launch { if (isWebtoon) lazyListState.scrollUp() else pagerState.moveToPrevious() diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c92bbabfb..15aa58869 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -312,6 +312,7 @@ https://github.com/EhTagTranslation/Editor/wiki 屏蔽列表 根据标题、上传者、标签、评论者屏蔽画廊或评论 + 反转物理按键控制 [实验性] 屏蔽外部广告 [可选] 选择替换外部广告的图片 下载 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f5c074014..14962ddc5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -328,6 +328,7 @@ https://placeholder Blockers Block gallery or comment by title, uploader, tags and commenter + Reverse physical key controls [Experimental] Block extraneous ads [Optional] Pick placeholder to replace ads Download