From 11e21bf60ba425789c06b7d614bb68779b689279 Mon Sep 17 00:00:00 2001
From: Acclorite <140836141+Acclorite@users.noreply.github.com>
Date: Sun, 8 Sep 2024 17:03:02 +0300
Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Vertical=20Padding=20option?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Added "Vertical padding" option in Reader
* Slider, from 0pt to 24pt (1pt = 4.5dp)
* Applies vertical padding to Reader
---
.../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 | 6 +++-
.../settings/VerticalPaddingSetting.kt | 30 +++++++++++++++++++
.../subcategories/PaddingSubcategory.kt | 5 ++++
app/src/main/res/values-uk/strings.xml | 1 +
app/src/main/res/values/strings.xml | 1 +
9 files changed, 63 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/VerticalPaddingSetting.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 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