diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/ReaderPreferencesView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/ReaderPreferencesView.kt index 5505cd6bb..de19c8193 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/ReaderPreferencesView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/ReaderPreferencesView.kt @@ -43,6 +43,8 @@ fun ReaderPreferencesView(webReaderViewModel: WebReaderViewModel) { val themeState = remember { mutableStateOf(currentWebPreferences.storedThemePreference) } + val volumeForScrollState = remember { mutableStateOf(currentWebPreferences.shouldUseVolumeRockerForScroll) } + OmnivoreTheme { Column( modifier = Modifier @@ -239,6 +241,24 @@ fun ReaderPreferencesView(webReaderViewModel: WebReaderViewModel) { } ) } + + Row(verticalAlignment = Alignment.CenterVertically) { + Text( + stringResource(R.string.reader_preferences_view_volume_scroll), + style = TextStyle( + fontSize = 15.sp, + fontWeight = FontWeight.Normal, + color = Color(red = 137, green = 137, blue = 137)) + ) + Spacer(modifier = Modifier.weight(1.0F)) + Switch ( + checked = volumeForScrollState.value, + onCheckedChange = { + volumeForScrollState.value = it + webReaderViewModel.updateVolumeRockerForScroll(it) + } + ) + } } } } @@ -285,5 +305,6 @@ data class WebPreferences( val storedThemePreference: String, val fontFamily: WebFont, val prefersHighContrastText: Boolean, - val prefersJustifyText: Boolean + val prefersJustifyText: Boolean, + var shouldUseVolumeRockerForScroll: Boolean ) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReader.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReader.kt index 988565701..e56d10853 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReader.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReader.kt @@ -170,11 +170,17 @@ fun WebReader( if (event.action == KeyEvent.ACTION_DOWN) { when (keyCode) { KeyEvent.KEYCODE_VOLUME_UP -> { + if (!webReaderViewModel.shouldUseVolumeRockerForScroll) { + return@setOnKeyListener false + } scrollVertically(OmnivoreWebView.Direction.UP) return@setOnKeyListener true } KeyEvent.KEYCODE_VOLUME_DOWN -> { + if (!webReaderViewModel.shouldUseVolumeRockerForScroll) { + return@setOnKeyListener false + } scrollVertically(OmnivoreWebView.Direction.DOWN) return@setOnKeyListener true } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReaderViewModel.kt index 925c03c7c..74d55d4ce 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/reader/WebReaderViewModel.kt @@ -106,6 +106,8 @@ class WebReaderViewModel @Inject constructor( private val showHighlightColorPalette = MutableLiveData(false) val highlightColor = MutableLiveData(HighlightColor()) + var shouldUseVolumeRockerForScroll = true + fun loadItem(slug: String?, requestID: String?) { this.slug = slug if (isLoading || webReaderParamsLiveData.value != null) { @@ -470,6 +472,7 @@ class WebReaderViewModel @Inject constructor( val prefersHighContrastFont = datastoreRepo.getString(DatastoreKeys.prefersWebHighContrastText) == "true" val prefersJustifyText = datastoreRepo.getString(DatastoreKeys.prefersJustifyText) == "true" + val shouldUseVolumeRockerForScroll = datastoreRepo.getString(DatastoreKeys.volumeForScroll) != "false" WebPreferences( textFontSize = storedFontSize ?: 12, @@ -479,7 +482,8 @@ class WebReaderViewModel @Inject constructor( storedThemePreference = storedThemePreference, fontFamily = storedWebFont, prefersHighContrastText = prefersHighContrastFont, - prefersJustifyText = prefersJustifyText + prefersJustifyText = prefersJustifyText, + shouldUseVolumeRockerForScroll = shouldUseVolumeRockerForScroll ) } @@ -555,6 +559,13 @@ class WebReaderViewModel @Inject constructor( enqueueScript(script) } + fun updateVolumeRockerForScroll(shouldUseVolumeRockerForScroll: Boolean) { + runBlocking { + datastoreRepo.putString(DatastoreKeys.volumeForScroll, shouldUseVolumeRockerForScroll.toString()) + } + this.shouldUseVolumeRockerForScroll = shouldUseVolumeRockerForScroll + } + fun applyWebFont(font: WebFont) { runBlocking { datastoreRepo.putString(DatastoreKeys.preferredWebFontFamily, font.rawValue) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/utils/Constants.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/utils/Constants.kt index b4962979a..684cbdd3b 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/utils/Constants.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/utils/Constants.kt @@ -23,6 +23,7 @@ object DatastoreKeys { const val lastUsedSavedItemFilter = "lastUsedSavedItemFilter" const val lastUsedSavedItemSortFilter = "lastUsedSavedItemSortFilter" const val preferredTheme = "preferredTheme" + const val volumeForScroll = "volumeForScroll" } object AppleConstants { diff --git a/android/Omnivore/app/src/main/res/values-de/strings.xml b/android/Omnivore/app/src/main/res/values-de/strings.xml index afaefdef8..22f8bfcdc 100644 --- a/android/Omnivore/app/src/main/res/values-de/strings.xml +++ b/android/Omnivore/app/src/main/res/values-de/strings.xml @@ -148,6 +148,7 @@ Text ausrichten + Verwenden Sie die Lautstärketasten zum Scrollen Wir konnten deinen Inhalt nicht abrufen. Lese-Einstellungen Notizbuch diff --git a/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml b/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml index 780ae2bcd..b198f4bd1 100644 --- a/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml +++ b/android/Omnivore/app/src/main/res/values-zh-rCN/strings.xml @@ -149,6 +149,7 @@ 对齐文字 + 使用音量按钮滚动 我们无法取得您的内容。 阅读器偏好设定 笔记 diff --git a/android/Omnivore/app/src/main/res/values-zh-rTW/strings.xml b/android/Omnivore/app/src/main/res/values-zh-rTW/strings.xml index c634719cf..f43bba4e3 100644 --- a/android/Omnivore/app/src/main/res/values-zh-rTW/strings.xml +++ b/android/Omnivore/app/src/main/res/values-zh-rTW/strings.xml @@ -148,6 +148,7 @@ 對齊文字 + 使用音量按鈕捲動 我們無法取得您的內容。 閱讀器偏好設定 筆記本 diff --git a/android/Omnivore/app/src/main/res/values/strings.xml b/android/Omnivore/app/src/main/res/values/strings.xml index fba0f250b..d74a443c4 100644 --- a/android/Omnivore/app/src/main/res/values/strings.xml +++ b/android/Omnivore/app/src/main/res/values/strings.xml @@ -148,6 +148,7 @@ Auto High Contrast Text Justify Text + Use Volume Rocker to scroll We were unable to fetch your content.