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 7f3e7ef6..7d9b3a02 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 @@ -56,6 +56,7 @@ object DataStoreConstants { val PROGRESS_BAR = booleanPreferencesKey("progress_bar") val PROGRESS_BAR_PADDING = intPreferencesKey("progress_bar_padding") val PROGRESS_BAR_ALIGNMENT = stringPreferencesKey("progress_bar_alignment") + val PROGRESS_BAR_FONT_SIZE = intPreferencesKey("progress_bar_font_size") // Browse settings val BROWSE_FILES_STRUCTURE = stringPreferencesKey("browse_files_structure") diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt index 6a80fda8..c428f035 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt @@ -56,6 +56,7 @@ fun ReaderContent( progressBar: Boolean, progressBarPadding: Dp, progressBarAlignment: HorizontalAlignment, + progressBarFontSize: TextUnit, paragraphHeight: Dp, sidePadding: Dp, bottomBarPadding: Dp, @@ -130,6 +131,7 @@ fun ReaderContent( progressBar = progressBar, progressBarPadding = progressBarPadding, progressBarAlignment = progressBarAlignment, + progressBarFontSize = progressBarFontSize, paragraphHeight = paragraphHeight, sidePadding = sidePadding, bottomBarPadding = bottomBarPadding, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayout.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayout.kt index c94148ad..0e251d3b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderLayout.kt @@ -56,6 +56,7 @@ fun ReaderLayout( progressBar: Boolean, progressBarPadding: Dp, progressBarAlignment: HorizontalAlignment, + progressBarFontSize: TextUnit, paragraphHeight: Dp, sidePadding: Dp, backgroundColor: Color, @@ -223,6 +224,7 @@ fun ReaderLayout( progress = progress, progressBarPadding = progressBarPadding, progressBarAlignment = progressBarAlignment, + progressBarFontSize = progressBarFontSize, fontColor = fontColor, sidePadding = sidePadding ) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderProgressBar.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderProgressBar.kt index d86a5588..402f6df2 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderProgressBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderProgressBar.kt @@ -4,13 +4,13 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.selection.DisableSelection -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.TextUnit import ua.acclorite.book_story.domain.util.HorizontalAlignment @Composable @@ -18,6 +18,7 @@ fun ReaderProgressBar( progress: String, progressBarPadding: Dp, progressBarAlignment: HorizontalAlignment, + progressBarFontSize: TextUnit, fontColor: Color, sidePadding: Dp ) { @@ -32,9 +33,10 @@ fun ReaderProgressBar( ) { DisableSelection { Text( - progress, - style = MaterialTheme.typography.bodyLarge, + text = progress, color = fontColor, + fontSize = progressBarFontSize, + maxLines = 1, overflow = TextOverflow.Ellipsis ) } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt index c1d5d4a0..cca94ad7 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt @@ -60,6 +60,7 @@ fun ReaderScaffold( progressBar: Boolean, progressBarPadding: Dp, progressBarAlignment: HorizontalAlignment, + progressBarFontSize: TextUnit, paragraphHeight: Dp, sidePadding: Dp, bottomBarPadding: Dp, @@ -161,6 +162,7 @@ fun ReaderScaffold( progressBar = progressBar, progressBarPadding = progressBarPadding, progressBarAlignment = progressBarAlignment, + progressBarFontSize = progressBarFontSize, paragraphHeight = paragraphHeight, sidePadding = sidePadding, backgroundColor = backgroundColor, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/ProgressSubcategory.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/ProgressSubcategory.kt index 81712673..12ee24e6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/ProgressSubcategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/ProgressSubcategory.kt @@ -10,6 +10,7 @@ import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategory import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarAlignmentOption +import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarFontSizeOption import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarOption import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarPaddingOption @@ -29,6 +30,10 @@ fun LazyListScope.ProgressSubcategory( ProgressBarOption() } + item { + ProgressBarFontSizeOption() + } + item { ProgressBarPaddingOption() } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarFontSizeOption.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarFontSizeOption.kt new file mode 100644 index 00000000..7fe9a3f6 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarFontSizeOption.kt @@ -0,0 +1,31 @@ +package ua.acclorite.book_story.presentation.settings.reader.progress.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import ua.acclorite.book_story.R +import ua.acclorite.book_story.presentation.core.components.settings.SliderWithTitle +import ua.acclorite.book_story.ui.main.MainEvent +import ua.acclorite.book_story.ui.main.MainModel +import ua.acclorite.book_story.ui.theme.ExpandingTransition + +@Composable +fun ProgressBarFontSizeOption() { + val mainModel = hiltViewModel() + val state = mainModel.state.collectAsStateWithLifecycle() + + ExpandingTransition(visible = state.value.progressBar) { + SliderWithTitle( + value = state.value.progressBarFontSize to "pt", + fromValue = 4, + toValue = 16, + title = stringResource(id = R.string.progress_bar_font_size_option), + onValueChange = { + mainModel.onEvent( + MainEvent.OnChangeProgressBarFontSize(it) + ) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarOption.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarOption.kt index cbff59ef..7d32b245 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarOption.kt @@ -17,6 +17,7 @@ fun ProgressBarOption() { SwitchWithTitle( selected = state.value.progressBar, title = stringResource(id = R.string.progress_bar_option), + description = stringResource(id = R.string.progress_bar_option_desc), onClick = { mainModel.onEvent( MainEvent.OnChangeProgressBar( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt index a244fd2d..96cc43e1 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt @@ -58,4 +58,5 @@ sealed class MainEvent { data class OnChangeProgressBar(val value: Boolean) : MainEvent() data class OnChangeProgressBarPadding(val value: Int) : MainEvent() data class OnChangeProgressBarAlignment(val value: String) : MainEvent() + data class OnChangeProgressBarFontSize(val value: Int) : MainEvent() } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt index 006a80d0..1acc54f6 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt @@ -488,6 +488,14 @@ class MainModel @Inject constructor( it.copy(progressBarAlignment = this.toHorizontalAlignment()) } ) + + is MainEvent.OnChangeProgressBarFontSize -> handleDatastoreUpdate( + key = DataStoreConstants.PROGRESS_BAR_FONT_SIZE, + value = event.value, + updateState = { + it.copy(progressBarFontSize = this) + } + ) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt index e3cc0d91..d62f3f1a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt @@ -105,6 +105,7 @@ data class MainState( val progressBar: Boolean = provideDefaultValue { false }, val progressBarPadding: Int = provideDefaultValue { 4 }, val progressBarAlignment: HorizontalAlignment = provideDefaultValue { HorizontalAlignment.CENTER }, + val progressBarFontSize: Int = provideDefaultValue { 8 }, // Browse Settings val browseFilesStructure: BrowseFilesStructure = provideDefaultValue { @@ -354,6 +355,10 @@ data class MainState( progressBarAlignment = provideValue( PROGRESS_BAR_ALIGNMENT, convert = { toHorizontalAlignment() } ) { progressBarAlignment }, + + progressBarFontSize = provideValue( + PROGRESS_BAR_FONT_SIZE + ) { progressBarFontSize }, ) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt index 29172430..7c63ad80 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt @@ -224,6 +224,9 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { val progressBarPadding = remember(mainState.value.progressBarPadding) { (mainState.value.progressBarPadding * 3).dp } + val progressBarFontSize = remember(mainState.value.progressBarFontSize) { + (mainState.value.progressBarFontSize * 2).sp + } val layoutDirection = LocalLayoutDirection.current val cutoutInsets = WindowInsets.displayCutout @@ -396,6 +399,7 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { progressBar = mainState.value.progressBar, progressBarPadding = progressBarPadding, progressBarAlignment = mainState.value.progressBarAlignment, + progressBarFontSize = progressBarFontSize, paragraphHeight = paragraphHeight, sidePadding = sidePadding, bottomBarPadding = bottomBarPadding, diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index df37fbcd..45493eef 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -203,8 +203,10 @@ Розмір Ефекти кольору Панель прогресу + Показувати панель прогресу внизу Поля Розташування + Розмір шрифта Структура файлів diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 198bd46b..220b98ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -260,8 +260,10 @@ Size Color effects Progress bar + Display progress bar at the bottom Margins Alignment + Font size Files structure