From cf8632c48b3db35a9b82453db96b0cc657a0a846 Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Sun, 8 Sep 2024 21:57:03 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Change=20Paragraph=20Indentation?= =?UTF-8?q?=20to=20Slider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Changed "Paragraph indentation" option in Reader to use Slider * In range from 0pt to 10pt (1pt = " ") --- .../core/constants/DataStoreConstants.kt | 2 +- .../book_story/presentation/data/MainEvent.kt | 2 +- .../book_story/presentation/data/MainState.kt | 2 +- .../presentation/data/MainViewModel.kt | 4 ++-- .../screens/reader/ReaderScreen.kt | 9 +++++++- .../reader/components/ReaderTextParagraph.kt | 9 +++----- .../settings/ParagraphIndentationSetting.kt | 21 +++++++++++-------- 7 files changed, 28 insertions(+), 21 deletions(-) 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 42d836b1..8843662a 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 @@ -27,7 +27,7 @@ object DataStoreConstants { val FONT_SIZE = intPreferencesKey("font_size") val LINE_HEIGHT = intPreferencesKey("line_height") val PARAGRAPH_HEIGHT = intPreferencesKey("paragraph_height") - val PARAGRAPH_INDENTATION = booleanPreferencesKey("paragraph_indentation") + val PARAGRAPH_INDENTATION = intPreferencesKey("paragraph_indentation_int") val TEXT_ALIGNMENT = stringPreferencesKey("text_alignment") val LETTER_SPACING = intPreferencesKey("letter_spacing") val CUTOUT_PADDING = booleanPreferencesKey("cutout_padding") 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 af390258..96a46a2b 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 @@ -14,7 +14,7 @@ sealed class MainEvent { data class OnChangeFontSize(val fontSize: Int) : MainEvent() data class OnChangeLineHeight(val lineHeight: Int) : MainEvent() data class OnChangeParagraphHeight(val paragraphHeight: Int) : MainEvent() - data class OnChangeParagraphIndentation(val bool: Boolean) : MainEvent() + data class OnChangeParagraphIndentation(val indentation: Int) : MainEvent() data class OnChangeShowStartScreen(val bool: Boolean) : MainEvent() data class OnChangeCheckForUpdates(val bool: Boolean) : MainEvent() data class OnChangeSidePadding(val sidePadding: Int) : MainEvent() 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 613135b9..4e7a59ae 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 @@ -63,7 +63,7 @@ data class MainState( val fontSize: Int = provideDefaultValue { 16 }, val lineHeight: Int = provideDefaultValue { 4 }, val paragraphHeight: Int = provideDefaultValue { 8 }, - val paragraphIndentation: Boolean = provideDefaultValue { false }, + val paragraphIndentation: Int = provideDefaultValue { 0 }, val sidePadding: Int = provideDefaultValue { 6 }, val verticalPadding: Int = provideDefaultValue { 0 }, val doubleClickTranslation: Boolean = provideDefaultValue { false }, 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 de749bb2..b7e51dc5 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 @@ -169,10 +169,10 @@ class MainViewModel @Inject constructor( is MainEvent.OnChangeParagraphIndentation -> { viewModelScope.launch(Dispatchers.IO) { - setDatastore.execute(DataStoreConstants.PARAGRAPH_INDENTATION, event.bool) + setDatastore.execute(DataStoreConstants.PARAGRAPH_INDENTATION, event.indentation) updateStateWithSavedHandle { it.copy( - paragraphIndentation = event.bool + paragraphIndentation = event.indentation ) } } 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 fa1cacd3..209a4aea 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 @@ -247,6 +247,13 @@ private fun ReaderScreen(lazyListState: LazyListState) { false -> FontStyle.Normal } } + val paragraphIndentation = remember(mainState.value.paragraphIndentation) { + var indentation = "" + repeat(mainState.value.paragraphIndentation) { + indentation += " " + } + indentation + } val density = LocalDensity.current val layoutDirection = LocalLayoutDirection.current @@ -457,7 +464,7 @@ private fun ReaderScreen(lazyListState: LazyListState) { fontSize = mainState.value.fontSize.sp, letterSpacing = letterSpacing, sidePadding = sidePadding, - paragraphIndentation = mainState.value.paragraphIndentation, + paragraphIndentation = paragraphIndentation, fullscreenMode = mainState.value.fullscreen, doubleClickTranslationEnabled = mainState.value.doubleClickTranslation, toolbarHidden = toolbarHidden diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt index 97be3021..472ca2ee 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt @@ -41,7 +41,7 @@ import ua.acclorite.book_story.presentation.screens.settings.nested.reader.data. * @param fontSize Line's font size. * @param letterSpacing Letter spacing. * @param sidePadding Line's side padding. - * @param paragraphIndentation Whether Paragraph Indentation is enabled for this line. + * @param paragraphIndentation Paragraph Indentation for this line. * @param fullscreenMode Whether Reader is in fullscreen mode. * @param doubleClickTranslationEnabled Whether Double Click Translation is enabled. * @param toolbarHidden Whether selection toolBar is hidden. @@ -59,7 +59,7 @@ fun LazyItemScope.ReaderTextParagraph( fontSize: TextUnit, letterSpacing: TextUnit, sidePadding: Dp, - paragraphIndentation: Boolean, + paragraphIndentation: String, fullscreenMode: Boolean, doubleClickTranslationEnabled: Boolean, toolbarHidden: Boolean @@ -82,10 +82,7 @@ fun LazyItemScope.ReaderTextParagraph( ) { BasicText( text = buildAnnotatedString { - if (paragraphIndentation) { - append(" ") - } - + append(paragraphIndentation) append(line) }, modifier = Modifier.then( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt index 9ff2f20e..afbba70a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/ParagraphIndentationSetting.kt @@ -5,7 +5,7 @@ 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 +import ua.acclorite.book_story.presentation.screens.settings.components.SliderWithTitle /** * Paragraph Indentation setting. @@ -16,12 +16,15 @@ fun ParagraphIndentationSetting() { val state = LocalMainViewModel.current.state val onMainEvent = LocalMainViewModel.current.onEvent - SwitchWithTitle( - selected = state.value.paragraphIndentation, - title = stringResource(id = R.string.paragraph_indentation_option) - ) { - onMainEvent( - MainEvent.OnChangeParagraphIndentation(!state.value.paragraphIndentation) - ) - } + SliderWithTitle( + value = state.value.paragraphIndentation to "pt", + fromValue = 0, + toValue = 10, + title = stringResource(id = R.string.paragraph_indentation_option), + onValueChange = { + onMainEvent( + MainEvent.OnChangeParagraphIndentation(it) + ) + } + ) } \ No newline at end of file