From 0496004cc434aa33f8714bc61c2c281b58bb365a Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Sun, 8 Sep 2024 20:24:58 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Hide=20Bars=20On=20Fast=20Scroll?= =?UTF-8?q?=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added "Hide bars on fast scroll" option in Reader * If true, hides bars during fast scroll --- .../core/constants/DataStoreConstants.kt | 1 + .../book_story/presentation/data/MainEvent.kt | 1 + .../book_story/presentation/data/MainState.kt | 5 ++++ .../presentation/data/MainViewModel.kt | 14 ++++++++++ .../screens/reader/ReaderScreen.kt | 9 ++++--- .../settings/HideBarsOnFastScrollSetting.kt | 27 +++++++++++++++++++ .../settings/KeepScreenOnSetting.kt | 1 - .../subcategories/MiscSubcategory.kt | 5 ++++ app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 10 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/HideBarsOnFastScrollSetting.kt diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt index 92249f92..42d836b1 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt @@ -33,6 +33,7 @@ object DataStoreConstants { val CUTOUT_PADDING = booleanPreferencesKey("cutout_padding") val FULLSCREEN = booleanPreferencesKey("fullscreen") val KEEP_SCREEN_ON = booleanPreferencesKey("keep_screen_on") + val HIDE_BARS_ON_FAST_SCROLL = booleanPreferencesKey("hide_bars_on_fast_scroll") // Browse settings val BROWSE_FILES_STRUCTURE = stringPreferencesKey("browse_files_structure") diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt index b4ecd662..af390258 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainEvent.kt @@ -36,4 +36,5 @@ sealed class MainEvent { data class OnChangeFullscreen(val bool: Boolean) : MainEvent() data class OnChangeKeepScreenOn(val bool: Boolean) : MainEvent() data class OnChangeVerticalPadding(val padding: Int) : MainEvent() + data class OnChangeHideBarsOnFastScroll(val bool: Boolean) : MainEvent() } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt index 9b0ab295..613135b9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainState.kt @@ -73,6 +73,7 @@ data class MainState( val cutoutPadding: Boolean = provideDefaultValue { false }, val fullscreen: Boolean = provideDefaultValue { true }, val keepScreenOn: Boolean = provideDefaultValue { true }, + val hideBarsOnFastScroll: Boolean = provideDefaultValue { true }, // Browse Settings val browseFilesStructure: BrowseFilesStructure = provideDefaultValue { @@ -234,6 +235,10 @@ data class MainState( verticalPadding = provideValue( VERTICAL_PADDING ) { verticalPadding }, + + hideBarsOnFastScroll = provideValue( + HIDE_BARS_ON_FAST_SCROLL + ) { hideBarsOnFastScroll }, ) } } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt index 3c85086a..de749bb2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/data/MainViewModel.kt @@ -443,6 +443,20 @@ class MainViewModel @Inject constructor( } } } + + is MainEvent.OnChangeHideBarsOnFastScroll -> { + viewModelScope.launch(Dispatchers.IO) { + setDatastore.execute( + DataStoreConstants.HIDE_BARS_ON_FAST_SCROLL, + event.bool + ) + updateStateWithSavedHandle { + it.copy( + hideBarsOnFastScroll = event.bool + ) + } + } + } } } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt index 09729241..fa1cacd3 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt @@ -191,17 +191,20 @@ private fun ReaderScreen(lazyListState: LazyListState) { available: Offset, source: NestedScrollSource ): Offset { - val velocity = consumed.y + consumed.y.let { velocity -> + if(velocity in -70f..70f) return@let + if(!state.value.showMenu) return@let + if(state.value.lockMenu) return@let + if(!mainState.value.hideBarsOnFastScroll) return@let - if ((velocity > 70 || velocity < -70) && state.value.showMenu && !state.value.lockMenu) { onEvent( ReaderEvent.OnShowHideMenu( + show = false, fullscreenMode = mainState.value.fullscreen, activity = context ) ) } - return super.onPostScroll(consumed, available, source) } } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/HideBarsOnFastScrollSetting.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/HideBarsOnFastScrollSetting.kt new file mode 100644 index 00000000..a9332af5 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/HideBarsOnFastScrollSetting.kt @@ -0,0 +1,27 @@ +package ua.acclorite.book_story.presentation.screens.settings.nested.reader.components.settings + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import ua.acclorite.book_story.R +import ua.acclorite.book_story.presentation.core.components.LocalMainViewModel +import ua.acclorite.book_story.presentation.data.MainEvent +import ua.acclorite.book_story.presentation.screens.settings.components.SwitchWithTitle + +/** + * Hide Bars On Fast Scroll setting. + * If true, hides bars during fast scroll. + */ +@Composable +fun HideBarsOnFastScrollSetting() { + val state = LocalMainViewModel.current.state + val onMainEvent = LocalMainViewModel.current.onEvent + + SwitchWithTitle( + selected = state.value.hideBarsOnFastScroll, + title = stringResource(id = R.string.hide_bars_on_fast_scroll_option) + ) { + onMainEvent( + MainEvent.OnChangeHideBarsOnFastScroll(!state.value.hideBarsOnFastScroll) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/KeepScreenOnSetting.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/KeepScreenOnSetting.kt index 5af81e36..229bfa88 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/KeepScreenOnSetting.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/KeepScreenOnSetting.kt @@ -19,7 +19,6 @@ fun KeepScreenOnSetting() { SwitchWithTitle( selected = state.value.keepScreenOn, title = stringResource(id = R.string.keep_screen_on_option), - description = stringResource(id = R.string.keep_screen_on_option_desc), onClick = { onMainEvent( MainEvent.OnChangeKeepScreenOn( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/MiscSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/MiscSubcategory.kt index 8e5fb3ae..985b0376 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/MiscSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/MiscSubcategory.kt @@ -11,6 +11,7 @@ import androidx.compose.ui.unit.Dp import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.screens.settings.components.SettingsSubcategory import ua.acclorite.book_story.presentation.screens.settings.nested.reader.components.settings.FullscreenSetting +import ua.acclorite.book_story.presentation.screens.settings.nested.reader.components.settings.HideBarsOnFastScrollSetting import ua.acclorite.book_story.presentation.screens.settings.nested.reader.components.settings.KeepScreenOnSetting /** @@ -40,5 +41,9 @@ fun LazyListScope.MiscSubcategory( item { KeepScreenOnSetting() } + + item { + HideBarsOnFastScrollSetting() + } } } \ 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 d89014fb..e8d64fa6 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -242,7 +242,7 @@ Повний екран Сховати системні панелі та прибрати відступи Тримати екран увімкненим - Тримати екран увімкненим нескінченно + Ховати панелі при швидкому прокручуванні Структура файлів diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ab77d563..ea3d6d89 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -259,7 +259,7 @@ Fullscreen Hide system bars and remove padding Keep screen on - Keep screen awake infinitely + Hide bars on fast scroll Files structure