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