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 456acf62..7f3e7ef6 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 @@ -55,6 +55,7 @@ object DataStoreConstants { val IMAGES_COLOR_EFFECTS = stringPreferencesKey("images_color_effects") val PROGRESS_BAR = booleanPreferencesKey("progress_bar") val PROGRESS_BAR_PADDING = intPreferencesKey("progress_bar_padding") + val PROGRESS_BAR_ALIGNMENT = stringPreferencesKey("progress_bar_alignment") // 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 bfcfec5a..6a80fda8 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 @@ -55,6 +55,7 @@ fun ReaderContent( progress: String, progressBar: Boolean, progressBarPadding: Dp, + progressBarAlignment: HorizontalAlignment, paragraphHeight: Dp, sidePadding: Dp, bottomBarPadding: Dp, @@ -128,6 +129,7 @@ fun ReaderContent( progress = progress, progressBar = progressBar, progressBarPadding = progressBarPadding, + progressBarAlignment = progressBarAlignment, 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 e450e8e4..c94148ad 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 @@ -55,6 +55,7 @@ fun ReaderLayout( progress: String, progressBar: Boolean, progressBarPadding: Dp, + progressBarAlignment: HorizontalAlignment, paragraphHeight: Dp, sidePadding: Dp, backgroundColor: Color, @@ -221,6 +222,7 @@ fun ReaderLayout( ReaderProgressBar( progress = progress, progressBarPadding = progressBarPadding, + progressBarAlignment = progressBarAlignment, 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 ba552e75..d86a5588 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 @@ -7,16 +7,17 @@ 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.Alignment 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 ua.acclorite.book_story.domain.util.HorizontalAlignment @Composable fun ReaderProgressBar( progress: String, progressBarPadding: Dp, + progressBarAlignment: HorizontalAlignment, fontColor: Color, sidePadding: Dp ) { @@ -27,7 +28,7 @@ fun ReaderProgressBar( horizontal = sidePadding, vertical = progressBarPadding ), - contentAlignment = Alignment.Center + contentAlignment = progressBarAlignment.alignment ) { DisableSelection { Text( 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 d491383b..c1d5d4a0 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 @@ -59,6 +59,7 @@ fun ReaderScaffold( progress: String, progressBar: Boolean, progressBarPadding: Dp, + progressBarAlignment: HorizontalAlignment, paragraphHeight: Dp, sidePadding: Dp, bottomBarPadding: Dp, @@ -159,6 +160,7 @@ fun ReaderScaffold( progress = progress, progressBar = progressBar, progressBarPadding = progressBarPadding, + progressBarAlignment = progressBarAlignment, 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 db56049b..81712673 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 @@ -9,6 +9,7 @@ import androidx.compose.ui.graphics.Color 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.ProgressBarOption import ua.acclorite.book_story.presentation.settings.reader.progress.components.ProgressBarPaddingOption @@ -31,5 +32,9 @@ fun LazyListScope.ProgressSubcategory( item { ProgressBarPaddingOption() } + + item { + ProgressBarAlignmentOption() + } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarAlignmentOption.kt new file mode 100644 index 00000000..f633e6d8 --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/reader/progress/components/ProgressBarAlignmentOption.kt @@ -0,0 +1,45 @@ +package ua.acclorite.book_story.presentation.settings.reader.progress.components + +import androidx.compose.material3.MaterialTheme +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.domain.ui.ButtonItem +import ua.acclorite.book_story.domain.util.HorizontalAlignment +import ua.acclorite.book_story.presentation.core.components.settings.SegmentedButtonWithTitle +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 ProgressBarAlignmentOption() { + val mainModel = hiltViewModel() + val state = mainModel.state.collectAsStateWithLifecycle() + + ExpandingTransition(visible = state.value.progressBar) { + SegmentedButtonWithTitle( + title = stringResource(id = R.string.progress_bar_alignment_option), + buttons = HorizontalAlignment.entries.map { + ButtonItem( + id = it.toString(), + title = when (it) { + HorizontalAlignment.START -> stringResource(id = R.string.alignment_start) + HorizontalAlignment.CENTER -> stringResource(id = R.string.alignment_center) + HorizontalAlignment.END -> stringResource(id = R.string.alignment_end) + }, + textStyle = MaterialTheme.typography.labelLarge, + selected = it == state.value.progressBarAlignment + ) + }, + onClick = { + mainModel.onEvent( + MainEvent.OnChangeProgressBarAlignment( + it.id + ) + ) + } + ) + } +} \ No newline at end of file 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 b0ef1406..a244fd2d 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 @@ -57,4 +57,5 @@ sealed class MainEvent { data class OnChangeImagesColorEffects(val value: String) : MainEvent() data class OnChangeProgressBar(val value: Boolean) : MainEvent() data class OnChangeProgressBarPadding(val value: Int) : MainEvent() + data class OnChangeProgressBarAlignment(val value: String) : 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 7b79a86d..006a80d0 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 @@ -480,6 +480,14 @@ class MainModel @Inject constructor( it.copy(progressBarPadding = this) } ) + + is MainEvent.OnChangeProgressBarAlignment -> handleDatastoreUpdate( + key = DataStoreConstants.PROGRESS_BAR_ALIGNMENT, + value = event.value, + updateState = { + it.copy(progressBarAlignment = this.toHorizontalAlignment()) + } + ) } } 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 ad042e9a..e3cc0d91 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 @@ -104,6 +104,7 @@ data class MainState( val imagesColorEffects: ReaderColorEffects = provideDefaultValue { ReaderColorEffects.OFF }, val progressBar: Boolean = provideDefaultValue { false }, val progressBarPadding: Int = provideDefaultValue { 4 }, + val progressBarAlignment: HorizontalAlignment = provideDefaultValue { HorizontalAlignment.CENTER }, // Browse Settings val browseFilesStructure: BrowseFilesStructure = provideDefaultValue { @@ -349,6 +350,10 @@ data class MainState( progressBarPadding = provideValue( PROGRESS_BAR_PADDING ) { progressBarPadding }, + + progressBarAlignment = provideValue( + PROGRESS_BAR_ALIGNMENT, convert = { toHorizontalAlignment() } + ) { progressBarAlignment }, ) } } 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 b84f1061..29172430 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 @@ -395,6 +395,7 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { progress = progress.value, progressBar = mainState.value.progressBar, progressBarPadding = progressBarPadding, + progressBarAlignment = mainState.value.progressBarAlignment, 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 95c07a66..6a2cfeaf 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -206,6 +206,7 @@ Ефекти кольору Панель прогресу Поля + Розташування Структура файлів diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3a36cce6..e90433bd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -261,6 +261,7 @@ Color effects Progress bar Margins + Alignment Files structure