From 562ef8715d33ef6aa03aec2a67bdcd8e9f74941b Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Thu, 26 Dec 2024 14:46:44 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Bottom=20bar=20padding=20Option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added "Bottom bar padding" option, that lets users change padding below bottom bar slider to prevent accident touch Resolves: #125 --- .../core/constants/DataStoreConstants.kt | 1 + .../presentation/reader/ReaderBottomBar.kt | 19 +++++++++---- .../presentation/reader/ReaderContent.kt | 2 ++ .../presentation/reader/ReaderScaffold.kt | 2 ++ .../reader/padding/PaddingSubcategory.kt | 5 ++++ .../components/BottomBarPaddingOption.kt | 28 +++++++++++++++++++ .../acclorite/book_story/ui/main/MainEvent.kt | 1 + .../acclorite/book_story/ui/main/MainModel.kt | 8 ++++++ .../acclorite/book_story/ui/main/MainState.kt | 5 ++++ .../book_story/ui/reader/ReaderScreen.kt | 4 +++ app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 12 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/BottomBarPaddingOption.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 aa6b3bb9..9def269a 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 @@ -45,6 +45,7 @@ object DataStoreConstants { val SCREEN_BRIGHTNESS = doublePreferencesKey("screen_brightness") val HORIZONTAL_GESTURE = stringPreferencesKey("horizontal_gesture") val HORIZONTAL_GESTURE_SCROLL = doublePreferencesKey("horizontal_gesture_scroll") + val BOTTOM_BAR_PADDING = intPreferencesKey("bottom_bar_padding") // Browse settings val BROWSE_FILES_STRUCTURE = stringPreferencesKey("browse_files_structure") diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBar.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBar.kt index ab96bdc4..c8bd1659 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderBottomBar.kt @@ -5,7 +5,9 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -22,6 +24,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.library.book.Book @@ -44,6 +47,7 @@ fun ReaderBottomBar( currentChapter: Chapter?, currentChapterProgress: Float, checkpoint: Checkpoint, + bottomBarPadding: Dp, restoreCheckpoint: (ReaderEvent.OnRestoreCheckpoint) -> Unit, scroll: (ReaderEvent.OnScroll) -> Unit, changeProgress: (ReaderEvent.OnChangeProgress) -> Unit @@ -89,20 +93,21 @@ fun ReaderBottomBar( .background(Colors.readerSystemBarsColor) .noRippleClickable(onClick = {}) .navigationBarsPadding() - .padding(horizontal = 18.dp) - .padding(top = 16.dp), + .padding(horizontal = 18.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { + Spacer(Modifier.height(16.dp)) + Text( text = progress.value, color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.titleLarge ) - Row( - modifier = Modifier.padding(top = 3.dp, bottom = 5.dp), - verticalAlignment = Alignment.CenterVertically - ) { + + Spacer(Modifier.height(6.dp)) + + Row(verticalAlignment = Alignment.CenterVertically) { HorizontalExpandingTransition( visible = arrowDirection == Direction.START, startDirection = true @@ -150,5 +155,7 @@ fun ReaderBottomBar( } } } + + Spacer(Modifier.height(8.dp + bottomBarPadding)) } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt index 74a64979..2f0abe27 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt @@ -51,6 +51,7 @@ fun ReaderContent( horizontalGestureScroll: Float, paragraphHeight: Dp, sidePadding: Dp, + bottomBarPadding: Dp, backgroundColor: Color, fontColor: Color, fontFamily: FontWithName, @@ -124,6 +125,7 @@ fun ReaderContent( horizontalGestureScroll = horizontalGestureScroll, paragraphHeight = paragraphHeight, sidePadding = sidePadding, + bottomBarPadding = bottomBarPadding, backgroundColor = backgroundColor, fontColor = fontColor, fontFamily = fontFamily, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt index e06d82a5..2e330f77 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt @@ -56,6 +56,7 @@ fun ReaderScaffold( horizontalGestureScroll: Float, paragraphHeight: Dp, sidePadding: Dp, + bottomBarPadding: Dp, backgroundColor: Color, fontColor: Color, fontFamily: FontWithName, @@ -132,6 +133,7 @@ fun ReaderScaffold( currentChapter = currentChapter, currentChapterProgress = currentChapterProgress, checkpoint = checkpoint, + bottomBarPadding = bottomBarPadding, restoreCheckpoint = restoreCheckpoint, scroll = scroll, changeProgress = changeProgress diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/PaddingSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/PaddingSubcategory.kt index 911d84c3..7ce15173 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/PaddingSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/PaddingSubcategory.kt @@ -9,6 +9,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory +import ua.acclorite.book_story.presentation.settings.reader.padding.components.BottomBarPaddingOption import ua.acclorite.book_story.presentation.settings.reader.padding.components.CutoutPaddingOption import ua.acclorite.book_story.presentation.settings.reader.padding.components.SidePaddingOption import ua.acclorite.book_story.presentation.settings.reader.padding.components.VerticalPaddingOption @@ -36,5 +37,9 @@ fun LazyListScope.PaddingSubcategory( item { CutoutPaddingOption() } + + item { + BottomBarPaddingOption() + } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/BottomBarPaddingOption.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/BottomBarPaddingOption.kt new file mode 100644 index 00000000..339c9684 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/padding/components/BottomBarPaddingOption.kt @@ -0,0 +1,28 @@ +package ua.acclorite.book_story.presentation.settings.reader.padding.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import ua.acclorite.book_story.R +import ua.acclorite.book_story.presentation.core.components.settings.SliderWithTitle +import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.ui.main.MainModel + +@Composable +fun BottomBarPaddingOption() { + val mainModel = hiltViewModel() + val state = mainModel.state.collectAsStateWithLifecycle() + + SliderWithTitle( + value = state.value.bottomBarPadding to "pt", + fromValue = 0, + toValue = 24, + title = stringResource(id = R.string.bottom_bar_padding_option), + onValueChange = { + mainModel.onEvent( + MainEvent.OnChangeBottomBarPadding(it) + ) + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt index 5417303b..35c5a14c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt @@ -47,4 +47,5 @@ sealed class MainEvent { data class OnChangeScreenBrightness(val value: Float) : MainEvent() data class OnChangeHorizontalGesture(val value: String) : MainEvent() data class OnChangeHorizontalGestureScroll(val value: Float) : MainEvent() + data class OnChangeBottomBarPadding(val value: Int) : MainEvent() } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt index 8b0fb1ee..2d790cc7 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt @@ -394,6 +394,14 @@ class MainModel @Inject constructor( it.copy(horizontalGestureScroll = this.toFloat()) } ) + + is MainEvent.OnChangeBottomBarPadding -> handleDatastoreUpdate( + key = DataStoreConstants.BOTTOM_BAR_PADDING, + value = event.value, + updateState = { + it.copy(bottomBarPadding = this) + } + ) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt index c3c59feb..5a52cc5d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt @@ -90,6 +90,7 @@ data class MainState( ReaderHorizontalGesture.OFF }, val horizontalGestureScroll: Float = provideDefaultValue { 0.7f }, + val bottomBarPadding: Int = provideDefaultValue { 0 }, // Browse Settings val browseFilesStructure: BrowseFilesStructure = provideDefaultValue { @@ -295,6 +296,10 @@ data class MainState( horizontalGestureScroll = provideValue( HORIZONTAL_GESTURE_SCROLL, convert = { toFloat() } ) { horizontalGestureScroll }, + + bottomBarPadding = provideValue( + BOTTOM_BAR_PADDING + ) { bottomBarPadding }, ) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt index 8912039b..a55582f9 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt @@ -218,6 +218,9 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { } ) } + val bottomBarPadding = remember(mainState.value.bottomBarPadding) { + (mainState.value.bottomBarPadding * 4f).dp + } val chapters = remember(state.value.book.chapters) { val chapters = mutableMapOf() @@ -320,6 +323,7 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { horizontalGestureScroll = mainState.value.horizontalGestureScroll, paragraphHeight = paragraphHeight, sidePadding = sidePadding, + bottomBarPadding = bottomBarPadding, backgroundColor = backgroundColor.value, fontColor = fontColor.value, fontFamily = fontFamily, diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 8571277a..70c1e49c 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -267,6 +267,7 @@ Яскравість Горизонтальний жест Частка прокрутки + Відступ нижньої панелі Структура файлів diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dfc607b8..0151e2be 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -268,6 +268,7 @@ Brightness Horizontal gesture Scroll fraction + Bottom bar margin Files structure