🚀 Cutout Padding option

* Added "Cutout padding" option in Reader
* If true, applies padding to cutout area (independently of screen orientation)
This commit is contained in:
Acclorite 2024-09-07 15:04:07 +03:00
parent 4f20d0a461
commit 3fa6e2a054
9 changed files with 66 additions and 2 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -237,6 +237,8 @@
<string name="fast_color_preset_change_option_desc">Проведіть вліво або вправо, щоб змінити пресет кольорів</string>
<string name="text_alignment_option">Розташування текста</string>
<string name="letter_spacing_option">Відстань між літерами</string>
<string name="cutout_padding_option">Відступ від виїмки</string>
<string name="cutout_padding_option_desc">Застосуйте відступ до ділянки виїмки</string>
<!-- Browse -->
<string name="browse_files_structure_option">Структура файлів</string>

View file

@ -254,6 +254,8 @@
<string name="fast_color_preset_change_option_desc">Swipe left or right to change color preset</string>
<string name="text_alignment_option">Text alignment</string>
<string name="letter_spacing_option">Letter spacing</string>
<string name="cutout_padding_option">Cutout padding</string>
<string name="cutout_padding_option_desc">Apply padding to cutout area</string>
<!-- Browse -->
<string name="browse_files_structure_option">Files structure</string>