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 93abb385..92249f92 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 @@ -21,6 +21,7 @@ object DataStoreConstants { val DOUBLE_CLICK_TRANSLATION = booleanPreferencesKey("double_click_translation") val FAST_COLOR_PRESET_CHANGE = booleanPreferencesKey("fast_color_preset_change") val SIDE_PADDING = intPreferencesKey("side_padding") + val VERTICAL_PADDING = intPreferencesKey("vertical_padding") val FONT = stringPreferencesKey("font") val IS_ITALIC = booleanPreferencesKey("font_style") val FONT_SIZE = intPreferencesKey("font_size") 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 122975de..b4ecd662 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 @@ -35,4 +35,5 @@ sealed class MainEvent { data class OnChangeCutoutPadding(val bool: Boolean) : MainEvent() data class OnChangeFullscreen(val bool: Boolean) : MainEvent() data class OnChangeKeepScreenOn(val bool: Boolean) : MainEvent() + data class OnChangeVerticalPadding(val padding: Int) : 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 4540752d..9b0ab295 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 @@ -65,6 +65,7 @@ data class MainState( val paragraphHeight: Int = provideDefaultValue { 8 }, val paragraphIndentation: Boolean = provideDefaultValue { false }, val sidePadding: Int = provideDefaultValue { 6 }, + val verticalPadding: Int = provideDefaultValue { 0 }, val doubleClickTranslation: Boolean = provideDefaultValue { false }, val fastColorPresetChange: Boolean = provideDefaultValue { true }, val textAlignment: ReaderTextAlignment = provideDefaultValue { ReaderTextAlignment.START }, @@ -229,6 +230,10 @@ data class MainState( keepScreenOn = provideValue( KEEP_SCREEN_ON ) { keepScreenOn }, + + verticalPadding = provideValue( + VERTICAL_PADDING + ) { verticalPadding }, ) } } 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 62027036..3c85086a 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 @@ -429,6 +429,20 @@ class MainViewModel @Inject constructor( } } } + + is MainEvent.OnChangeVerticalPadding -> { + viewModelScope.launch(Dispatchers.IO) { + setDatastore.execute( + DataStoreConstants.VERTICAL_PADDING, + event.padding + ) + updateStateWithSavedHandle { + it.copy( + verticalPadding = event.padding + ) + } + } + } } } 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 089b30f6..09729241 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 @@ -232,6 +232,9 @@ private fun ReaderScreen(lazyListState: LazyListState) { val sidePadding = remember(mainState.value.sidePadding) { (mainState.value.sidePadding * 3).dp } + val verticalPadding = remember(mainState.value.verticalPadding) { + (mainState.value.verticalPadding * 4.5f).dp + } val paragraphHeight = remember(mainState.value.paragraphHeight) { (mainState.value.paragraphHeight * 3).dp } @@ -425,7 +428,8 @@ private fun ReaderScreen(lazyListState: LazyListState) { .showToast(context = context, longToast = false) } ) - .padding(contentPadding), + .padding(contentPadding) + .padding(vertical = verticalPadding), verticalArrangement = Arrangement.spacedBy(paragraphHeight), contentPadding = PaddingValues( top = (WindowInsets.displayCutout.asPaddingValues() diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/VerticalPaddingSetting.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/VerticalPaddingSetting.kt new file mode 100644 index 00000000..38964eff --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/VerticalPaddingSetting.kt @@ -0,0 +1,30 @@ +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.SliderWithTitle + +/** + * Vertical Padding setting. + * Changes Reader's vertical padding. + */ +@Composable +fun VerticalPaddingSetting() { + val state = LocalMainViewModel.current.state + val onMainEvent = LocalMainViewModel.current.onEvent + + SliderWithTitle( + value = state.value.verticalPadding to "pt", + fromValue = 0, + toValue = 24, + title = stringResource(id = R.string.vertical_padding_option), + onValueChange = { + onMainEvent( + MainEvent.OnChangeVerticalPadding(it) + ) + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/PaddingSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/PaddingSubcategory.kt index 934cebcb..79a1f26b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/PaddingSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/subcategories/PaddingSubcategory.kt @@ -12,6 +12,7 @@ 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.CutoutPaddingSetting import ua.acclorite.book_story.presentation.screens.settings.nested.reader.components.settings.SidePaddingSetting +import ua.acclorite.book_story.presentation.screens.settings.nested.reader.components.settings.VerticalPaddingSetting /** * Padding subcategory. @@ -37,6 +38,10 @@ fun LazyListScope.PaddingSubcategory( SidePaddingSetting() } + item { + VerticalPaddingSetting() + } + item { CutoutPaddingSetting() } diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 89848b51..d89014fb 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -230,6 +230,7 @@ Колір фона Колір шрифта Бокові відступи + Вертикальні відступи Переклад подвійним кліком Двічі клацніть на абзац, щоб перекласти його Швидка зміна пресета кольорів diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7e769108..ab77d563 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -247,6 +247,7 @@ Background color Font color Side padding + Vertical padding Double click translation Double click on paragraph to translate it Fast color preset change