diff --git a/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt b/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt index d647238d..bbf5c1c6 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/settings/SettingsManager.kt @@ -4,6 +4,8 @@ * SPDX-License-Identifier: GPL-3.0-only */ +@file:Suppress("RemoveExplicitTypeArguments") + package ua.acclorite.book_story.data.settings import androidx.datastore.preferences.core.Preferences @@ -82,7 +84,7 @@ class SettingsManager @Inject constructor( } ) val theme = setting( - key = stringPreferencesKey("theme"), default = Theme.Companion.entries().first(), + key = stringPreferencesKey("theme"), default = Theme.entries().first(), serialize = { it.name }, deserialize = { Theme.valueOf(it) } ) val darkTheme = setting( @@ -205,6 +207,9 @@ class SettingsManager @Inject constructor( val horizontalGesturePullAnim = setting( key = booleanPreferencesKey("horizontal_gesture_pull_anim"), default = true ) + val horizontalGestureDisableScrolling = setting( + key = booleanPreferencesKey("horizontal_gesture_disable_scrolling"), default = false + ) val bottomBarPadding = setting( key = intPreferencesKey("bottom_bar_padding"), default = 0 ) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt index 214f9162..2254d944 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScreen.kt @@ -408,6 +408,7 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { horizontalGestureSensitivity = horizontalGestureSensitivity, horizontalGestureAlphaAnim = settings.horizontalGestureAlphaAnim.value, horizontalGesturePullAnim = settings.horizontalGesturePullAnim.value, + horizontalGestureDisableScrolling = settings.horizontalGestureDisableScrolling.value, highlightedReading = settings.highlightedReading.value, highlightedReadingThickness = highlightedReadingThickness, progress = progress, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt index 18121d80..fd8f158f 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/common/LazyColumnWithScrollbar.kt @@ -29,8 +29,9 @@ fun LazyColumnWithScrollbar( state: LazyListState = rememberLazyListState(), scrollbarSettings: ScrollbarSettings = ScrollbarData.secondaryScrollbar, enableScrollbar: Boolean = true, - contentPadding: PaddingValues = PaddingValues(0.dp), verticalArrangement: Arrangement.Vertical = Arrangement.Top, + contentPadding: PaddingValues = PaddingValues(0.dp), + userScrollEnabled: Boolean = true, content: LazyListScope.() -> Unit ) { val enabled = remember { @@ -44,7 +45,8 @@ fun LazyColumnWithScrollbar( modifier = modifier, state = state, verticalArrangement = verticalArrangement, - contentPadding = contentPadding + contentPadding = contentPadding, + userScrollEnabled = userScrollEnabled ) { content() } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt index c150af12..5526b230 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderContent.kt @@ -59,6 +59,7 @@ fun ReaderContent( horizontalGestureSensitivity: Dp, horizontalGestureAlphaAnim: Boolean, horizontalGesturePullAnim: Boolean, + horizontalGestureDisableScrolling: Boolean, highlightedReading: Boolean, highlightedReadingThickness: FontWeight, progress: String, @@ -135,6 +136,7 @@ fun ReaderContent( horizontalGestureSensitivity = horizontalGestureSensitivity, horizontalGestureAlphaAnim = horizontalGestureAlphaAnim, horizontalGesturePullAnim = horizontalGesturePullAnim, + horizontalGestureDisableScrolling = horizontalGestureDisableScrolling, highlightedReading = highlightedReading, highlightedReadingThickness = highlightedReadingThickness, progress = progress, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt index 4cf903d4..4009323e 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderLayout.kt @@ -59,6 +59,7 @@ fun ReaderLayout( horizontalGestureSensitivity: Dp, horizontalGestureAlphaAnim: Boolean, horizontalGesturePullAnim: Boolean, + horizontalGestureDisableScrolling: Boolean, highlightedReading: Boolean, highlightedReadingThickness: FontWeight, progress: String, @@ -168,6 +169,7 @@ fun ReaderLayout( enableScrollbar = false, parentModifier = Modifier.weight(1f), modifier = Modifier.fillMaxSize(), + userScrollEnabled = !horizontalGestureDisableScrolling, contentPadding = PaddingValues( top = (WindowInsets.displayCutout.asPaddingValues() .calculateTopPadding() + paragraphHeight) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt index 0a3feb1e..b8aa4e1d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScaffold.kt @@ -63,6 +63,7 @@ fun ReaderScaffold( horizontalGestureSensitivity: Dp, horizontalGestureAlphaAnim: Boolean, horizontalGesturePullAnim: Boolean, + horizontalGestureDisableScrolling: Boolean, highlightedReading: Boolean, highlightedReadingThickness: FontWeight, progress: String, @@ -166,6 +167,7 @@ fun ReaderScaffold( horizontalGestureSensitivity = horizontalGestureSensitivity, horizontalGestureAlphaAnim = horizontalGestureAlphaAnim, horizontalGesturePullAnim = horizontalGesturePullAnim, + horizontalGestureDisableScrolling = horizontalGestureDisableScrolling, highlightedReading = highlightedReading, highlightedReadingThickness = highlightedReadingThickness, progress = progress, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/ReadingModeSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/ReadingModeSubcategory.kt index a2f657b8..61cff76f 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/ReadingModeSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/ReadingModeSubcategory.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.settings.components.SettingsSubcategory import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureAlphaAnimOption +import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureDisableScrollingOption import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureOption import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGesturePullAnimOption import ua.acclorite.book_story.ui.settings.reader.reading_mode.components.HorizontalGestureScrollOption @@ -52,5 +53,9 @@ fun LazyListScope.ReadingModeSubcategory( item { HorizontalGestureAlphaAnimOption() } + + item { + HorizontalGestureDisableScrollingOption() + } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureDisableScrollingOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureDisableScrollingOption.kt new file mode 100644 index 00000000..05218255 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureDisableScrollingOption.kt @@ -0,0 +1,36 @@ +/* + * Book's Story — free and open-source Material You eBook reader. + * Copyright (C) 2024-2025 Acclorite + * SPDX-License-Identifier: GPL-3.0-only + */ + +package ua.acclorite.book_story.ui.settings.reader.reading_mode.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture +import ua.acclorite.book_story.ui.common.components.settings.SwitchWithTitle +import ua.acclorite.book_story.ui.common.helpers.LocalSettings +import ua.acclorite.book_story.ui.theme.ExpandingTransition + +@Composable +fun HorizontalGestureDisableScrollingOption() { + val settings = LocalSettings.current + + ExpandingTransition( + visible = when (settings.horizontalGesture.value) { + ReaderHorizontalGesture.OFF -> false + else -> true + } + ) { + SwitchWithTitle( + selected = settings.horizontalGestureDisableScrolling.value, + title = stringResource(id = R.string.horizontal_gesture_disable_scrolling_option), + description = stringResource(id = R.string.horizontal_gesture_disable_scrolling_option_desc), + onClick = { + settings.horizontalGestureDisableScrolling.update(!settings.horizontalGestureDisableScrolling.lastValue) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 9ff6eaca..61aa275d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -211,6 +211,8 @@ Увімкнути анімацію тягнення під час використання горизонтального жесту + Вимкнути гортання + Повністю вимкнути гортання читача Відступ нижньої панелі Підсвічування слів Підсвічувати початок кожного слова diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 97153cb5..c1360069 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -235,6 +235,8 @@ Enable pull animation when using horizontal gesture + Disable scrolling + Completely disable reader scrolling Bottom bar margin Highlight words Highlight the beginning of each word