🚀 Vertical Padding option

* Added "Vertical padding" option in Reader
* Slider, from 0pt to 24pt (1pt = 4.5dp)
* Applies vertical padding to Reader
This commit is contained in:
Acclorite 2024-09-08 17:03:02 +03:00
parent 89b319ee65
commit 11e21bf60b
9 changed files with 63 additions and 1 deletions

View file

@ -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")

View file

@ -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()
}

View file

@ -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 },
)
}
}

View file

@ -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
)
}
}
}
}
}

View file

@ -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()

View file

@ -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)
)
}
)
}

View file

@ -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()
}

View file

@ -230,6 +230,7 @@
<string name="background_color_option">Колір фона</string>
<string name="font_color_option">Колір шрифта</string>
<string name="side_padding_option">Бокові відступи</string>
<string name="vertical_padding_option">Вертикальні відступи</string>
<string name="double_click_translation_option">Переклад подвійним кліком</string>
<string name="double_click_translation_option_desc">Двічі клацніть на абзац, щоб перекласти його</string>
<string name="fast_color_preset_change_option">Швидка зміна пресета кольорів</string>

View file

@ -247,6 +247,7 @@
<string name="background_color_option">Background color</string>
<string name="font_color_option">Font color</string>
<string name="side_padding_option">Side padding</string>
<string name="vertical_padding_option">Vertical padding</string>
<string name="double_click_translation_option">Double click translation</string>
<string name="double_click_translation_option_desc">Double click on paragraph to translate it</string>
<string name="fast_color_preset_change_option">Fast color preset change</string>