🚀 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:
parent
4f20d0a461
commit
3fa6e2a054
9 changed files with 66 additions and 2 deletions
|
|
@ -29,6 +29,7 @@ object DataStoreConstants {
|
||||||
val PARAGRAPH_INDENTATION = booleanPreferencesKey("paragraph_indentation")
|
val PARAGRAPH_INDENTATION = booleanPreferencesKey("paragraph_indentation")
|
||||||
val TEXT_ALIGNMENT = stringPreferencesKey("text_alignment")
|
val TEXT_ALIGNMENT = stringPreferencesKey("text_alignment")
|
||||||
val LETTER_SPACING = intPreferencesKey("letter_spacing")
|
val LETTER_SPACING = intPreferencesKey("letter_spacing")
|
||||||
|
val CUTOUT_PADDING = booleanPreferencesKey("cutout_padding")
|
||||||
|
|
||||||
// Browse settings
|
// Browse settings
|
||||||
val BROWSE_FILES_STRUCTURE = stringPreferencesKey("browse_files_structure")
|
val BROWSE_FILES_STRUCTURE = stringPreferencesKey("browse_files_structure")
|
||||||
|
|
|
||||||
|
|
@ -32,4 +32,5 @@ sealed class MainEvent {
|
||||||
data class OnChangeDoublePressExit(val bool: Boolean) : MainEvent()
|
data class OnChangeDoublePressExit(val bool: Boolean) : MainEvent()
|
||||||
data class OnChangeLetterSpacing(val spacing: Int) : MainEvent()
|
data class OnChangeLetterSpacing(val spacing: Int) : MainEvent()
|
||||||
data class OnChangeAbsoluteDark(val bool: Boolean) : MainEvent()
|
data class OnChangeAbsoluteDark(val bool: Boolean) : MainEvent()
|
||||||
|
data class OnChangeCutoutPadding(val bool: Boolean) : MainEvent()
|
||||||
}
|
}
|
||||||
|
|
@ -69,6 +69,7 @@ data class MainState(
|
||||||
val fastColorPresetChange: Boolean = provideDefaultValue { true },
|
val fastColorPresetChange: Boolean = provideDefaultValue { true },
|
||||||
val textAlignment: ReaderTextAlignment = provideDefaultValue { ReaderTextAlignment.START },
|
val textAlignment: ReaderTextAlignment = provideDefaultValue { ReaderTextAlignment.START },
|
||||||
val letterSpacing: Int = provideDefaultValue { 0 },
|
val letterSpacing: Int = provideDefaultValue { 0 },
|
||||||
|
val cutoutPadding: Boolean = provideDefaultValue { false },
|
||||||
|
|
||||||
// Browse Settings
|
// Browse Settings
|
||||||
val browseFilesStructure: BrowseFilesStructure = provideDefaultValue {
|
val browseFilesStructure: BrowseFilesStructure = provideDefaultValue {
|
||||||
|
|
@ -214,6 +215,10 @@ data class MainState(
|
||||||
letterSpacing = provideValue(
|
letterSpacing = provideValue(
|
||||||
LETTER_SPACING
|
LETTER_SPACING
|
||||||
) { letterSpacing },
|
) { letterSpacing },
|
||||||
|
|
||||||
|
cutoutPadding = provideValue(
|
||||||
|
CUTOUT_PADDING
|
||||||
|
) { cutoutPadding },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.core.util.showToast
|
||||||
import ua.acclorite.book_story.presentation.screens.history.data.HistoryEvent
|
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.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.ReaderTextParagraph
|
||||||
import ua.acclorite.book_story.presentation.screens.reader.components.app_bar.ReaderBottomBar
|
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.app_bar.ReaderTopBar
|
||||||
import ua.acclorite.book_story.presentation.screens.reader.components.readerFastColorPresetChange
|
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.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
|
import ua.acclorite.book_story.presentation.screens.reader.data.ReaderEvent
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -326,6 +324,11 @@ private fun ReaderScreen(lazyListState: LazyListState) {
|
||||||
)
|
)
|
||||||
.showToast(context = context, longToast = false)
|
.showToast(context = context, longToast = false)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
.then(
|
||||||
|
if (mainState.value.cutoutPadding) Modifier.padding(
|
||||||
|
WindowInsets.displayCutout.asPaddingValues()
|
||||||
|
) else Modifier
|
||||||
),
|
),
|
||||||
verticalArrangement = Arrangement.spacedBy(paragraphHeight),
|
verticalArrangement = Arrangement.spacedBy(paragraphHeight),
|
||||||
contentPadding = PaddingValues(
|
contentPadding = PaddingValues(
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -16,6 +16,7 @@ import androidx.compose.ui.unit.coerceAtLeast
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ua.acclorite.book_story.R
|
import ua.acclorite.book_story.R
|
||||||
import ua.acclorite.book_story.presentation.core.components.CategoryTitle
|
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
|
import ua.acclorite.book_story.presentation.screens.settings.nested.reader.components.settings.SidePaddingSetting
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -51,6 +52,10 @@ fun LazyListScope.PaddingSubcategory(
|
||||||
SidePaddingSetting()
|
SidePaddingSetting()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
item {
|
||||||
|
CutoutPaddingSetting()
|
||||||
|
}
|
||||||
|
|
||||||
item {
|
item {
|
||||||
Spacer(
|
Spacer(
|
||||||
modifier = Modifier.height(bottomPadding)
|
modifier = Modifier.height(bottomPadding)
|
||||||
|
|
|
||||||
|
|
@ -237,6 +237,8 @@
|
||||||
<string name="fast_color_preset_change_option_desc">Проведіть вліво або вправо, щоб змінити пресет кольорів</string>
|
<string name="fast_color_preset_change_option_desc">Проведіть вліво або вправо, щоб змінити пресет кольорів</string>
|
||||||
<string name="text_alignment_option">Розташування текста</string>
|
<string name="text_alignment_option">Розташування текста</string>
|
||||||
<string name="letter_spacing_option">Відстань між літерами</string>
|
<string name="letter_spacing_option">Відстань між літерами</string>
|
||||||
|
<string name="cutout_padding_option">Відступ від виїмки</string>
|
||||||
|
<string name="cutout_padding_option_desc">Застосуйте відступ до ділянки виїмки</string>
|
||||||
|
|
||||||
<!-- Browse -->
|
<!-- Browse -->
|
||||||
<string name="browse_files_structure_option">Структура файлів</string>
|
<string name="browse_files_structure_option">Структура файлів</string>
|
||||||
|
|
|
||||||
|
|
@ -254,6 +254,8 @@
|
||||||
<string name="fast_color_preset_change_option_desc">Swipe left or right to change color preset</string>
|
<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="text_alignment_option">Text alignment</string>
|
||||||
<string name="letter_spacing_option">Letter spacing</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 -->
|
<!-- Browse -->
|
||||||
<string name="browse_files_structure_option">Files structure</string>
|
<string name="browse_files_structure_option">Files structure</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue