From 3fa6e2a0541f26946299f6511635e49687110038 Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Sat, 7 Sep 2024 15:04:07 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Cutout=20Padding=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added "Cutout padding" option in Reader * If true, applies padding to cutout area (independently of screen orientation) --- .../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 | 7 +++-- .../settings/CutoutPaddingSetting.kt | 31 +++++++++++++++++++ .../subcategories/PaddingSubcategory.kt | 5 +++ app/src/main/res/values-uk/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 9 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/CutoutPaddingSetting.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 603bda06..41d7c99c 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 @@ -29,6 +29,7 @@ object DataStoreConstants { val PARAGRAPH_INDENTATION = booleanPreferencesKey("paragraph_indentation") val TEXT_ALIGNMENT = stringPreferencesKey("text_alignment") val LETTER_SPACING = intPreferencesKey("letter_spacing") + val CUTOUT_PADDING = booleanPreferencesKey("cutout_padding") // Browse settings val BROWSE_FILES_STRUCTURE = stringPreferencesKey("browse_files_structure") 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 9a374852..f305cc5d 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 @@ -32,4 +32,5 @@ sealed class MainEvent { data class OnChangeDoublePressExit(val bool: Boolean) : MainEvent() data class OnChangeLetterSpacing(val spacing: Int) : MainEvent() data class OnChangeAbsoluteDark(val bool: Boolean) : MainEvent() + data class OnChangeCutoutPadding(val bool: Boolean) : 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 8604b982..8508f095 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 @@ -69,6 +69,7 @@ data class MainState( val fastColorPresetChange: Boolean = provideDefaultValue { true }, val textAlignment: ReaderTextAlignment = provideDefaultValue { ReaderTextAlignment.START }, val letterSpacing: Int = provideDefaultValue { 0 }, + val cutoutPadding: Boolean = provideDefaultValue { false }, // Browse Settings val browseFilesStructure: BrowseFilesStructure = provideDefaultValue { @@ -214,6 +215,10 @@ data class MainState( letterSpacing = provideValue( LETTER_SPACING ) { letterSpacing }, + + cutoutPadding = provideValue( + CUTOUT_PADDING + ) { cutoutPadding }, ) } } 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 71188e7e..6b31aceb 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 @@ -387,6 +387,20 @@ class MainViewModel @Inject constructor( } } } + + is MainEvent.OnChangeCutoutPadding -> { + viewModelScope.launch(Dispatchers.IO) { + setDatastore.execute( + DataStoreConstants.CUTOUT_PADDING, + event.bool + ) + updateStateWithSavedHandle { + it.copy( + cutoutPadding = event.bool + ) + } + } + } } } 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 ac011405..cef6205f 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 @@ -68,13 +68,11 @@ import ua.acclorite.book_story.presentation.core.navigation.Screen import ua.acclorite.book_story.presentation.core.util.showToast import ua.acclorite.book_story.presentation.screens.history.data.HistoryEvent import ua.acclorite.book_story.presentation.screens.library.data.LibraryEvent -import ua.acclorite.book_story.presentation.screens.reader.components.ReaderEndItem import ua.acclorite.book_story.presentation.screens.reader.components.ReaderTextParagraph import ua.acclorite.book_story.presentation.screens.reader.components.app_bar.ReaderBottomBar import ua.acclorite.book_story.presentation.screens.reader.components.app_bar.ReaderTopBar import ua.acclorite.book_story.presentation.screens.reader.components.readerFastColorPresetChange import ua.acclorite.book_story.presentation.screens.reader.components.settings_bottom_sheet.ReaderSettingsBottomSheet -import ua.acclorite.book_story.presentation.screens.reader.components.start_item.ReaderStartItem import ua.acclorite.book_story.presentation.screens.reader.data.ReaderEvent @Composable @@ -326,6 +324,11 @@ private fun ReaderScreen(lazyListState: LazyListState) { ) .showToast(context = context, longToast = false) } + ) + .then( + if (mainState.value.cutoutPadding) Modifier.padding( + WindowInsets.displayCutout.asPaddingValues() + ) else Modifier ), verticalArrangement = Arrangement.spacedBy(paragraphHeight), contentPadding = PaddingValues( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/CutoutPaddingSetting.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/CutoutPaddingSetting.kt new file mode 100644 index 00000000..98b0d12e --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/components/settings/CutoutPaddingSetting.kt @@ -0,0 +1,31 @@ +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.SwitchWithTitle + +/** + * Cutout Padding setting. + * If true, applies padding to cutout area. + */ +@Composable +fun CutoutPaddingSetting() { + val state = LocalMainViewModel.current.state + val onMainEvent = LocalMainViewModel.current.onEvent + + SwitchWithTitle( + selected = state.value.cutoutPadding, + title = stringResource(id = R.string.cutout_padding_option), + description = stringResource(id = R.string.cutout_padding_option_desc), + onClick = { + onMainEvent( + MainEvent.OnChangeCutoutPadding( + !state.value.cutoutPadding + ) + ) + } + ) +} \ 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 07876cc2..9307c81d 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 @@ -16,6 +16,7 @@ import androidx.compose.ui.unit.coerceAtLeast import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.core.components.CategoryTitle +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 /** @@ -51,6 +52,10 @@ fun LazyListScope.PaddingSubcategory( SidePaddingSetting() } + item { + CutoutPaddingSetting() + } + item { Spacer( modifier = Modifier.height(bottomPadding) diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 7397a7b9..a56c38a0 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -237,6 +237,8 @@ Проведіть вліво або вправо, щоб змінити пресет кольорів Розташування текста Відстань між літерами + Відступ від виїмки + Застосуйте відступ до ділянки виїмки Структура файлів diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c57a0672..1e12a97a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -254,6 +254,8 @@ Swipe left or right to change color preset Text alignment Letter spacing + Cutout padding + Apply padding to cutout area Files structure