diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseLayout.kt b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseLayout.kt index ddba7f06..ca71fb7f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/browse/model/BrowseLayout.kt @@ -6,7 +6,11 @@ package ua.acclorite.book_story.presentation.browse.model +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class BrowseLayout { - LIST, GRID + +enum class BrowseLayout(@StringRes val title: Int) { + LIST(R.string.layout_list), + GRID(R.string.layout_grid) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryLayout.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryLayout.kt index 41057832..5e490432 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryLayout.kt @@ -6,7 +6,10 @@ package ua.acclorite.book_story.presentation.library.model +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class LibraryLayout { - GRID, LIST +enum class LibraryLayout(@StringRes val title: Int) { + GRID(R.string.layout_grid), + LIST(R.string.layout_list) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryTitlePosition.kt b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryTitlePosition.kt index 0f3803f4..bd7b5117 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryTitlePosition.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/library/model/LibraryTitlePosition.kt @@ -6,7 +6,12 @@ package ua.acclorite.book_story.presentation.library.model +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class LibraryTitlePosition { - OFF, BELOW, INSIDE + +enum class LibraryTitlePosition(@StringRes val title: Int) { + OFF(R.string.library_title_position_off), + BELOW(R.string.library_title_position_below), + INSIDE(R.string.library_title_position_inside) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderColorEffects.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderColorEffects.kt index 4c3f85d8..a57887e1 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderColorEffects.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderColorEffects.kt @@ -6,10 +6,12 @@ package ua.acclorite.book_story.presentation.reader.model +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class ReaderColorEffects { - OFF, - GRAYSCALE, - FONT, - BACKGROUND +enum class ReaderColorEffects(@StringRes val title: Int) { + OFF(R.string.color_effects_off), + GRAYSCALE(R.string.color_effects_grayscale), + FONT(R.string.color_effects_font), + BACKGROUND(R.string.color_effects_background) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderFontThickness.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderFontThickness.kt index f677452a..601d1069 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderFontThickness.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderFontThickness.kt @@ -6,12 +6,14 @@ package ua.acclorite.book_story.presentation.reader.model +import androidx.annotation.StringRes import androidx.compose.ui.text.font.FontWeight +import ua.acclorite.book_story.R -enum class ReaderFontThickness(val thickness: FontWeight) { - THIN(FontWeight.Thin), - EXTRA_LIGHT(FontWeight.ExtraLight), - LIGHT(FontWeight.Light), - NORMAL(FontWeight.Normal), - MEDIUM(FontWeight.Medium) +enum class ReaderFontThickness(val thickness: FontWeight, @StringRes val title: Int) { + THIN(FontWeight.Thin, R.string.font_thickness_thin), + EXTRA_LIGHT(FontWeight.ExtraLight, R.string.font_thickness_extra_light), + LIGHT(FontWeight.Light, R.string.font_thickness_light), + NORMAL(FontWeight.Normal, R.string.font_thickness_normal), + MEDIUM(FontWeight.Medium, R.string.font_thickness_medium) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderHorizontalGesture.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderHorizontalGesture.kt index 868ff6fa..9be21b99 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderHorizontalGesture.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderHorizontalGesture.kt @@ -6,9 +6,11 @@ package ua.acclorite.book_story.presentation.reader.model +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class ReaderHorizontalGesture { - OFF, - ON, - INVERSE +enum class ReaderHorizontalGesture(@StringRes val title: Int) { + OFF(R.string.horizontal_gesture_off), + ON(R.string.horizontal_gesture_on), + INVERSE(R.string.horizontal_gesture_inverse) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderProgressCount.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderProgressCount.kt index e63184b9..ff1a3343 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderProgressCount.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderProgressCount.kt @@ -6,8 +6,11 @@ package ua.acclorite.book_story.presentation.reader.model +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class ReaderProgressCount { - PERCENTAGE, - QUANTITY + +enum class ReaderProgressCount(@StringRes val title: Int) { + PERCENTAGE(R.string.progress_count_percentage), + QUANTITY(R.string.progress_count_quantity) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderScreenOrientation.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderScreenOrientation.kt index d311b898..b204e32e 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderScreenOrientation.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderScreenOrientation.kt @@ -7,12 +7,32 @@ package ua.acclorite.book_story.presentation.reader.model import android.content.pm.ActivityInfo +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class ReaderScreenOrientation(val code: Int) { - DEFAULT(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED), - FREE(ActivityInfo.SCREEN_ORIENTATION_USER), - PORTRAIT(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT), - LANDSCAPE(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE), - LOCKED_PORTRAIT(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT), - LOCKED_LANDSCAPE(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE), +enum class ReaderScreenOrientation(val code: Int, @StringRes val title: Int) { + DEFAULT( + ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, + R.string.default_string + ), + FREE( + ActivityInfo.SCREEN_ORIENTATION_USER, + R.string.screen_orientation_free + ), + PORTRAIT( + ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT, + R.string.screen_orientation_portrait + ), + LANDSCAPE( + ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE, + R.string.screen_orientation_landscape + ), + LOCKED_PORTRAIT( + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, + R.string.screen_orientation_locked_portrait + ), + LOCKED_LANDSCAPE( + ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, + R.string.screen_orientation_locked_landscape + ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderTextAlignment.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderTextAlignment.kt index f617318b..d2c6f24b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderTextAlignment.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/model/ReaderTextAlignment.kt @@ -6,11 +6,13 @@ package ua.acclorite.book_story.presentation.reader.model +import androidx.annotation.StringRes import androidx.compose.ui.text.style.TextAlign +import ua.acclorite.book_story.R -enum class ReaderTextAlignment(val textAlignment: TextAlign) { - START(TextAlign.Start), - JUSTIFY(TextAlign.Justify), - CENTER(TextAlign.Center), - END(TextAlign.End) +enum class ReaderTextAlignment(val textAlignment: TextAlign, @StringRes val title: Int) { + START(TextAlign.Start, R.string.alignment_start), + JUSTIFY(TextAlign.Justify, R.string.alignment_justify), + CENTER(TextAlign.Center, R.string.alignment_center), + END(TextAlign.End, R.string.alignment_end) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt index 0b06fc96..d77bf9da 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartScreen.kt @@ -12,7 +12,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.ui.text.TextStyle import androidx.hilt.navigation.compose.hiltViewModel import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize @@ -25,7 +24,7 @@ import ua.acclorite.book_story.presentation.settings.SettingsEvent import ua.acclorite.book_story.presentation.settings.SettingsModel import ua.acclorite.book_story.ui.common.helpers.LocalActivity import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.navigator.LocalNavigator import ua.acclorite.book_story.ui.start.StartContent @@ -60,10 +59,9 @@ object StartScreen : Screen, Parcelable { val languages = remember(settings.language.value) { CoreData.languages.sortedBy { it.second }.map { - ButtonItem( - id = it.first, + ListItem( + item = it.first, title = it.second, - textStyle = TextStyle(), selected = it.first == settings.language.lastValue ) }.sortedBy { it.title } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ChipsWithTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ChipsWithTitle.kt index 9ddadd58..4d82103c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ChipsWithTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/ChipsWithTitle.kt @@ -19,20 +19,17 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle -/** - * Chips with title. Use list of [ButtonItem]s to display chips. - */ @Composable -fun ChipsWithTitle( +fun ChipsWithTitle( modifier: Modifier = Modifier, title: String, - chips: List, + chips: List>, horizontalPadding: Dp = 18.dp, verticalPadding: Dp = 8.dp, - onClick: (ButtonItem) -> Unit + onClick: (T) -> Unit ) { Column( modifier @@ -53,14 +50,14 @@ fun ChipsWithTitle( label = { StyledText( text = item.title, - style = item.textStyle, + style = item.textStyle(), maxLines = 1 ) }, - onClick = { onClick(item) }, + onClick = { onClick(item.item) }, ) } - }, + } ) } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SegmentedButtonWithTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SegmentedButtonWithTitle.kt index cb5dcffa..24125919 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SegmentedButtonWithTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SegmentedButtonWithTitle.kt @@ -44,31 +44,18 @@ import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.common.AnimatedVisibility import ua.acclorite.book_story.ui.common.components.common.StyledText -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle -/** - * Segmented Button with Title. - * Uses custom implementation(material3 one has many flaws). - * Contains [buttons]. - * - * @param modifier Modifier. - * @param title Title of the buttons. - * @param buttons [ButtonItem]s. - * @param enabled Whether button is enabled. - * @param horizontalPadding Horizontal item padding. - * @param verticalPadding Vertical item padding. - * @param onClick OnClick callback. - */ @Composable -fun SegmentedButtonWithTitle( +fun SegmentedButtonWithTitle( modifier: Modifier = Modifier, title: String, - buttons: List, + buttons: List>, enabled: Boolean = true, horizontalPadding: Dp = 18.dp, verticalPadding: Dp = 8.dp, - onClick: (ButtonItem) -> Unit + onClick: (T) -> Unit ) { Column( modifier @@ -91,9 +78,9 @@ fun SegmentedButtonWithTitle( ) .padding(0.5.dp) ) { - buttons.forEachIndexed { index, buttonItem -> + buttons.forEachIndexed { index, item -> SegmentedButton( - button = buttonItem, + button = item, enabled = enabled, shape = when (index) { buttons.lastIndex -> RoundedCornerShape( @@ -108,7 +95,7 @@ fun SegmentedButtonWithTitle( else -> RoundedCornerShape(0) }, - onClick = { onClick(buttonItem) } + onClick = { onClick(item.item) } ) } } @@ -117,19 +104,9 @@ fun SegmentedButtonWithTitle( } } -/** - * Custom Segmented button. - * Adjusts width based on component name. - * - * @param button [ButtonItem]. - * @param enabled Whether can be clicked. - * @param shape Shape of the button. For proper implementation should have 100% corners on first and last buttons(start and end). - * @param colors [SegmentedButtonColors]. - * @param onClick OnClick callback. - */ @Composable -private fun SegmentedButton( - button: ButtonItem, +private fun SegmentedButton( + button: ListItem, enabled: Boolean, shape: RoundedCornerShape, colors: SegmentedButtonColors = SegmentedButtonDefaults.colors(), @@ -181,7 +158,7 @@ private fun SegmentedButton( StyledText( text = button.title, - style = button.textStyle.copy( + style = button.textStyle().copy( color = if (button.selected) colors.activeContentColor else colors.inactiveContentColor ) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SliderWithTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SliderWithTitle.kt index 37e040b2..0885d9ef 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SliderWithTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SliderWithTitle.kt @@ -33,20 +33,6 @@ import ua.acclorite.book_story.ui.common.components.common.StyledText import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle import kotlin.math.roundToInt -/** - * Slider with title. - * - * @param modifier Modifier. - * @param value Value to be displayed, in pair with [String] which is the type of value(e.g. "pt") - * @param valuePlaceholder Placeholder of the value(e.g. "Default", instead of the "1pt") - * @param showPlaceholder Whether placeholder should be shown. - * @param fromValue From where user can pick value. - * @param toValue To where user can pick value. - * @param title Title of this slider. - * @param horizontalPadding Horizontal item padding. - * @param verticalPadding Vertical item padding. - * @param onValueChange Callback when value changes. - */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun SliderWithTitle( @@ -127,19 +113,6 @@ fun SliderWithTitle( } } -/** - * Slider with title. - * - * @param modifier Modifier. - * @param value Value to be displayed, in pair with [String] which is the type of value(e.g. "pt") - * @param valuePlaceholder Placeholder of the value(e.g. "Default", instead of the "1pt") - * @param showPlaceholder Whether placeholder should be shown. - * @param toValue To where user can pick value. - * @param title Title of this slider. - * @param horizontalPadding Horizontal item padding. - * @param verticalPadding Vertical item padding. - * @param onValueChange Callback when value changes. - */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun SliderWithTitle( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SwitchWIthTitle.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SwitchWIthTitle.kt index 7249f01f..b6e2f1da 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SwitchWIthTitle.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/components/settings/SwitchWIthTitle.kt @@ -25,16 +25,6 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import ua.acclorite.book_story.ui.common.components.common.StyledText -/** - * Checkbox with title. - * - * @param selected Whether [Switch] has checked state. - * @param title Title. - * @param description Optional description. - * @param horizontalPadding Horizontal padding. - * @param verticalPadding Vertical padding. - * @param onClick Triggers when user clicks anywhere on this composable. - */ @Composable fun SwitchWithTitle( modifier: Modifier = Modifier, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/common/model/ButtonItem.kt b/app/src/main/java/ua/acclorite/book_story/ui/common/model/ListItem.kt similarity index 61% rename from app/src/main/java/ua/acclorite/book_story/ui/common/model/ButtonItem.kt rename to app/src/main/java/ua/acclorite/book_story/ui/common/model/ListItem.kt index a8db6cff..64e45d2b 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/common/model/ButtonItem.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/common/model/ListItem.kt @@ -6,13 +6,15 @@ package ua.acclorite.book_story.ui.common.model +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.ui.text.TextStyle @Immutable -data class ButtonItem( - val id: String, +data class ListItem( + val item: T, val title: String, - val textStyle: TextStyle, + val textStyle: @Composable () -> TextStyle = { MaterialTheme.typography.labelLarge }, val selected: Boolean ) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/DarkThemeOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/DarkThemeOption.kt index ed222dde..a1a5832d 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/DarkThemeOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/DarkThemeOption.kt @@ -6,13 +6,12 @@ package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.theme.model.DarkTheme @Composable @@ -21,19 +20,15 @@ fun DarkThemeOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.dark_theme_option), - buttons = DarkTheme.entries.map { - ButtonItem( - it.name, - title = when (it) { - DarkTheme.OFF -> stringResource(id = R.string.dark_theme_off) - DarkTheme.ON -> stringResource(id = R.string.dark_theme_on) - DarkTheme.FOLLOW_SYSTEM -> stringResource(id = R.string.dark_theme_follow_system) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.darkTheme.value + buttons = DarkTheme.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.darkTheme.value ) + }, + onClick = { item -> + settings.darkTheme.update(item) } - ) { - settings.darkTheme.update(DarkTheme.valueOf(it.id)) - } + ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/PureDarkOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/PureDarkOption.kt index 74bf3627..0d3cede8 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/PureDarkOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/PureDarkOption.kt @@ -6,13 +6,12 @@ package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.theme.ExpandingTransition import ua.acclorite.book_story.ui.theme.model.PureDark @@ -23,20 +22,16 @@ fun PureDarkOption() { ExpandingTransition(visible = settings.darkTheme.value.isDark()) { SegmentedButtonWithTitle( title = stringResource(id = R.string.pure_dark_option), - buttons = PureDark.entries.map { - ButtonItem( - id = it.toString(), - title = when (it) { - PureDark.OFF -> stringResource(id = R.string.pure_dark_off) - PureDark.ON -> stringResource(id = R.string.pure_dark_on) - PureDark.SAVER -> stringResource(id = R.string.pure_dark_power_saver) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.pureDark.value + buttons = PureDark.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.pureDark.value ) + }, + onClick = { item -> + settings.pureDark.update(item) } - ) { - settings.pureDark.update(PureDark.valueOf(it.id)) - } + ) } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/ThemeContrastOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/ThemeContrastOption.kt index 939d4682..c554a41e 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/ThemeContrastOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/appearance/theme_preferences/components/ThemeContrastOption.kt @@ -6,7 +6,6 @@ package ua.acclorite.book_story.ui.settings.appearance.theme_preferences.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateOf @@ -16,7 +15,7 @@ import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.theme.BookStoryTheme import ua.acclorite.book_story.ui.theme.ExpandingTransition import ua.acclorite.book_story.ui.theme.model.ThemeContrast @@ -42,21 +41,17 @@ fun ThemeContrastOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.theme_contrast_option), enabled = settings.theme.value.hasThemeContrast, - buttons = ThemeContrast.entries.map { - ButtonItem( - id = it.toString(), - title = when (it) { - ThemeContrast.STANDARD -> stringResource(id = R.string.theme_contrast_standard) - ThemeContrast.MEDIUM -> stringResource(id = R.string.theme_contrast_medium) - ThemeContrast.HIGH -> stringResource(id = R.string.theme_contrast_high) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.themeContrast.value + buttons = ThemeContrast.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.themeContrast.value ) + }, + onClick = { item -> + settings.themeContrast.update(item) } - ) { - settings.themeContrast.update(ThemeContrast.valueOf(it.id)) - } + ) } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseLayoutOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseLayoutOption.kt index 2eb8f63e..01b1a53f 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseLayoutOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/browse/display/components/BrowseLayoutOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.browse.display.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.browse.model.BrowseLayout import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun BrowseLayoutOption() { @@ -21,18 +20,15 @@ fun BrowseLayoutOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.layout_option), - buttons = BrowseLayout.entries.map { - ButtonItem( - it.toString(), - when (it) { - BrowseLayout.LIST -> stringResource(id = R.string.layout_list) - BrowseLayout.GRID -> stringResource(id = R.string.layout_grid) - }, - MaterialTheme.typography.labelLarge, - it == settings.browseLayout.value + buttons = BrowseLayout.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.browseLayout.value ) + }, + onClick = { item -> + settings.browseLayout.update(item) } - ) { - settings.browseLayout.update(BrowseLayout.valueOf(it.id)) - } + ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt index 9bc21c7f..abf1aa8f 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/general/components/AppLanguageOption.kt @@ -6,7 +6,6 @@ package ua.acclorite.book_story.ui.settings.general.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel @@ -16,7 +15,7 @@ import ua.acclorite.book_story.presentation.settings.SettingsEvent import ua.acclorite.book_story.presentation.settings.SettingsModel import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun AppLanguageOption() { @@ -25,15 +24,15 @@ fun AppLanguageOption() { ChipsWithTitle( title = stringResource(id = R.string.language_option), - chips = CoreData.languages.sortedBy { it.second }.map { - ButtonItem( - it.first, - it.second, - MaterialTheme.typography.labelLarge, - it.first == settings.language.value + chips = CoreData.languages.sortedBy { it.second }.map { item -> + ListItem( + item = item.first, + title = item.second, + selected = item.first == settings.language.value ) + }, + onClick = { item -> + settingsModel.onEvent(SettingsEvent.OnUpdateLanguage(item)) } - ) { - settingsModel.onEvent(SettingsEvent.OnUpdateLanguage(it.id)) - } + ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryLayoutOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryLayoutOption.kt index 79b44b8d..2efed03c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryLayoutOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryLayoutOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.library.display.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.library.model.LibraryLayout import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun LibraryLayoutOption() { @@ -21,18 +20,15 @@ fun LibraryLayoutOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.layout_option), - buttons = LibraryLayout.entries.map { - ButtonItem( - it.toString(), - when (it) { - LibraryLayout.LIST -> stringResource(id = R.string.layout_list) - LibraryLayout.GRID -> stringResource(id = R.string.layout_grid) - }, - MaterialTheme.typography.labelLarge, - it == settings.libraryLayout.value + buttons = LibraryLayout.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.libraryLayout.value ) + }, + onClick = { item -> + settings.libraryLayout.update(item) } - ) { - settings.libraryLayout.update(LibraryLayout.valueOf(it.id)) - } + ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryTitlePositionOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryTitlePositionOption.kt index 0ab3c17c..acc0cdb4 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryTitlePositionOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/library/display/components/LibraryTitlePositionOption.kt @@ -6,7 +6,6 @@ package ua.acclorite.book_story.ui.settings.library.display.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R @@ -14,7 +13,7 @@ import ua.acclorite.book_story.presentation.library.model.LibraryLayout import ua.acclorite.book_story.presentation.library.model.LibraryTitlePosition import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable @@ -24,20 +23,16 @@ fun LibraryTitlePositionOption() { ExpandingTransition(visible = settings.libraryLayout.value == LibraryLayout.GRID) { ChipsWithTitle( title = stringResource(id = R.string.title_position_option), - chips = LibraryTitlePosition.entries.map { - ButtonItem( - it.name, - when (it) { - LibraryTitlePosition.OFF -> stringResource(id = R.string.library_title_position_off) - LibraryTitlePosition.BELOW -> stringResource(id = R.string.library_title_position_below) - LibraryTitlePosition.INSIDE -> stringResource(id = R.string.library_title_position_inside) - }, - MaterialTheme.typography.labelLarge, - it == settings.libraryTitlePosition.value + chips = LibraryTitlePosition.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.libraryTitlePosition.value ) + }, + onClick = { item -> + settings.libraryTitlePosition.update(item) } - ) { - settings.libraryTitlePosition.update(LibraryTitlePosition.valueOf(it.id)) - } + ) } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt index 933a30ab..4440afbd 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/chapters/components/ChapterTitleAlignmentOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.reader.chapters.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun ChapterTitleAlignmentOption() { @@ -21,21 +20,15 @@ fun ChapterTitleAlignmentOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.chapter_title_alignment_option), - buttons = ReaderTextAlignment.entries.map { - ButtonItem( - id = it.toString(), - title = when (it) { - ReaderTextAlignment.START -> stringResource(id = R.string.alignment_start) - ReaderTextAlignment.JUSTIFY -> stringResource(id = R.string.alignment_justify) - ReaderTextAlignment.CENTER -> stringResource(id = R.string.alignment_center) - ReaderTextAlignment.END -> stringResource(id = R.string.alignment_end) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.chapterTitleAlignment.value + buttons = ReaderTextAlignment.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.chapterTitleAlignment.value ) }, - onClick = { - settings.chapterTitleAlignment.update(ReaderTextAlignment.valueOf(it.id)) + onClick = { item -> + settings.chapterTitleAlignment.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt index 5237dd68..21542b41 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontFamilyOption.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.reader.data.ReaderData @Composable @@ -21,21 +21,20 @@ fun FontFamilyOption() { ChipsWithTitle( title = stringResource(id = R.string.font_family_option), - chips = ReaderData.fonts.map { - ButtonItem( - id = it.id, - title = it.fontName.asString(), - textStyle = MaterialTheme.typography.labelLarge.copy( - fontFamily = it.font - ), - selected = it == settings.fontFamily.value + chips = ReaderData.fonts.map { item -> + ListItem( + item = item, + title = item.fontName.asString(), + textStyle = { + MaterialTheme.typography.labelLarge.copy( + fontFamily = item.font + ) + }, + selected = item == settings.fontFamily.value ) }, - onClick = { - settings.fontFamily.update( - ReaderData.fonts.find { font -> font.id == it.id } - ?: ReaderData.fonts[0] - ) + onClick = { item -> + settings.fontFamily.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt index c4da815c..b65e4b3b 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontStyleOption.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.text.font.FontStyle import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun FontStyleOption() { @@ -22,32 +22,31 @@ fun FontStyleOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.font_style_option), buttons = listOf( - ButtonItem( - id = "normal", + ListItem( + item = false, title = stringResource(id = R.string.font_style_normal), - textStyle = MaterialTheme.typography.labelLarge.copy( - fontFamily = settings.fontFamily.value.font, - fontStyle = FontStyle.Normal - ), + textStyle = { + MaterialTheme.typography.labelLarge.copy( + fontFamily = settings.fontFamily.value.font, + fontStyle = FontStyle.Normal + ) + }, selected = !settings.italic.value ), - ButtonItem( - id = "italic", + ListItem( + item = true, title = stringResource(id = R.string.font_style_italic), - textStyle = MaterialTheme.typography.labelLarge.copy( - fontFamily = settings.fontFamily.value.font, - fontStyle = FontStyle.Italic - ), + textStyle = { + MaterialTheme.typography.labelLarge.copy( + fontFamily = settings.fontFamily.value.font, + fontStyle = FontStyle.Italic + ) + }, selected = settings.italic.value ) ), - onClick = { - settings.italic.update( - when (it.id) { - "italic" -> true - else -> false - } - ) + onClick = { item -> + settings.italic.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt index a25a8842..9daf4d90 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/font/components/FontThicknessOption.kt @@ -13,7 +13,7 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.reader.model.ReaderFontThickness import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun FontThicknessOption() { @@ -21,25 +21,21 @@ fun FontThicknessOption() { ChipsWithTitle( title = stringResource(id = R.string.font_thickness_option), - chips = ReaderFontThickness.entries.map { - ButtonItem( - id = it.toString(), - title = when (it) { - ReaderFontThickness.THIN -> stringResource(id = R.string.font_thickness_thin) - ReaderFontThickness.EXTRA_LIGHT -> stringResource(id = R.string.font_thickness_extra_light) - ReaderFontThickness.LIGHT -> stringResource(id = R.string.font_thickness_light) - ReaderFontThickness.NORMAL -> stringResource(id = R.string.font_thickness_normal) - ReaderFontThickness.MEDIUM -> stringResource(id = R.string.font_thickness_medium) + chips = ReaderFontThickness.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + textStyle = { + MaterialTheme.typography.labelLarge.copy( + fontFamily = settings.fontFamily.value.font, + fontWeight = item.thickness + ) }, - textStyle = MaterialTheme.typography.labelLarge.copy( - fontFamily = settings.fontFamily.value.font, - fontWeight = it.thickness - ), - selected = it == settings.fontThickness.value + selected = item == settings.fontThickness.value ) }, - onClick = { - settings.fontThickness.update(ReaderFontThickness.valueOf(it.id)) + onClick = { item -> + settings.fontThickness.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesAlignmentOption.kt index cb3563e7..17b1dcff 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesAlignmentOption.kt @@ -6,13 +6,12 @@ package ua.acclorite.book_story.ui.settings.reader.images.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.theme.ExpandingTransition import ua.acclorite.book_story.ui.theme.model.HorizontalAlignment @@ -23,20 +22,15 @@ fun ImagesAlignmentOption() { ExpandingTransition(visible = settings.images.value) { SegmentedButtonWithTitle( title = stringResource(id = R.string.images_alignment_option), - buttons = HorizontalAlignment.entries.map { - ButtonItem( - id = it.name, - 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 == settings.imagesAlignment.value + buttons = HorizontalAlignment.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.imagesAlignment.value ) }, - onClick = { - settings.imagesAlignment.update(HorizontalAlignment.valueOf(it.id)) + onClick = { item -> + settings.imagesAlignment.update(item) } ) } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesColorEffectsOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesColorEffectsOption.kt index 02eb5eca..b4c721fb 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesColorEffectsOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/images/components/ImagesColorEffectsOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.reader.images.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.reader.model.ReaderColorEffects import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.theme.ExpandingTransition @Composable @@ -23,21 +22,15 @@ fun ImagesColorEffectsOption() { ExpandingTransition(visible = settings.images.value) { ChipsWithTitle( title = stringResource(id = R.string.images_color_effects_option), - chips = ReaderColorEffects.entries.map { - ButtonItem( - id = it.name, - title = when (it) { - ReaderColorEffects.OFF -> stringResource(R.string.color_effects_off) - ReaderColorEffects.GRAYSCALE -> stringResource(R.string.color_effects_grayscale) - ReaderColorEffects.FONT -> stringResource(R.string.color_effects_font) - ReaderColorEffects.BACKGROUND -> stringResource(R.string.color_effects_background) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.imagesColorEffects.value + chips = ReaderColorEffects.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.imagesColorEffects.value ) }, - onClick = { - settings.imagesColorEffects.update(ReaderColorEffects.valueOf(it.id)) + onClick = { item -> + settings.imagesColorEffects.update(item) } ) } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarAlignmentOption.kt index 85308b18..86c1b49b 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressBarAlignmentOption.kt @@ -6,13 +6,12 @@ package ua.acclorite.book_story.ui.settings.reader.progress.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.theme.ExpandingTransition import ua.acclorite.book_story.ui.theme.model.HorizontalAlignment @@ -23,20 +22,15 @@ fun ProgressBarAlignmentOption() { ExpandingTransition(visible = settings.progressBar.value) { SegmentedButtonWithTitle( title = stringResource(id = R.string.progress_bar_alignment_option), - buttons = HorizontalAlignment.entries.map { - ButtonItem( - id = it.name, - 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 == settings.progressBarAlignment.value + buttons = HorizontalAlignment.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.progressBarAlignment.value ) }, - onClick = { - settings.progressBarAlignment.update(HorizontalAlignment.valueOf(it.id)) + onClick = { item -> + settings.progressBarAlignment.update(item) } ) } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressCountOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressCountOption.kt index 375e4c87..18d9b867 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressCountOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/progress/components/ProgressCountOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.reader.progress.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.reader.model.ReaderProgressCount import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun ProgressCountOption() { @@ -21,19 +20,15 @@ fun ProgressCountOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.progress_count_option), - buttons = ReaderProgressCount.entries.map { - ButtonItem( - id = it.name, - title = when (it) { - ReaderProgressCount.PERCENTAGE -> stringResource(id = R.string.progress_count_percentage) - ReaderProgressCount.QUANTITY -> stringResource(id = R.string.progress_count_quantity) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.progressCount.value + buttons = ReaderProgressCount.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.progressCount.value ) }, - onClick = { - settings.progressCount.update(ReaderProgressCount.valueOf(it.id)) + onClick = { item -> + settings.progressCount.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureOption.kt index 0661d692..bf14b5bc 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/reading_mode/components/HorizontalGestureOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.reader.reading_mode.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.reader.model.ReaderHorizontalGesture import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun HorizontalGestureOption() { @@ -21,20 +20,15 @@ fun HorizontalGestureOption() { ChipsWithTitle( title = stringResource(id = R.string.horizontal_gesture_option), - chips = ReaderHorizontalGesture.entries.map { - ButtonItem( - id = it.name, - title = when (it) { - ReaderHorizontalGesture.OFF -> stringResource(R.string.horizontal_gesture_off) - ReaderHorizontalGesture.ON -> stringResource(R.string.horizontal_gesture_on) - ReaderHorizontalGesture.INVERSE -> stringResource(R.string.horizontal_gesture_inverse) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.horizontalGesture.value + chips = ReaderHorizontalGesture.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.horizontalGesture.value ) }, - onClick = { - settings.horizontalGesture.update(ReaderHorizontalGesture.valueOf(it.id)) + onClick = { item -> + settings.horizontalGesture.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenOrientationOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenOrientationOption.kt index 54f94dfc..e7204c6f 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenOrientationOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/system/components/ScreenOrientationOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.reader.system.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.reader.model.ReaderScreenOrientation import ua.acclorite.book_story.ui.common.components.settings.ChipsWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun ScreenOrientationOption() { @@ -21,23 +20,15 @@ fun ScreenOrientationOption() { ChipsWithTitle( title = stringResource(id = R.string.screen_orientation_option), - chips = ReaderScreenOrientation.entries.map { - ButtonItem( - id = it.name, - title = when (it) { - ReaderScreenOrientation.FREE -> stringResource(id = R.string.screen_orientation_free) - ReaderScreenOrientation.PORTRAIT -> stringResource(id = R.string.screen_orientation_portrait) - ReaderScreenOrientation.LANDSCAPE -> stringResource(id = R.string.screen_orientation_landscape) - ReaderScreenOrientation.LOCKED_PORTRAIT -> stringResource(id = R.string.screen_orientation_locked_portrait) - ReaderScreenOrientation.LOCKED_LANDSCAPE -> stringResource(id = R.string.screen_orientation_locked_landscape) - else -> stringResource(id = R.string.default_string) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.screenOrientation.value + chips = ReaderScreenOrientation.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.screenOrientation.value ) }, - onClick = { - settings.screenOrientation.update(ReaderScreenOrientation.valueOf(it.id)) + onClick = { item -> + settings.screenOrientation.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/TextAlignmentOption.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/TextAlignmentOption.kt index 486302b9..e877aabe 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/TextAlignmentOption.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/reader/text/components/TextAlignmentOption.kt @@ -6,14 +6,13 @@ package ua.acclorite.book_story.ui.settings.reader.text.components -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.presentation.reader.model.ReaderTextAlignment import ua.acclorite.book_story.ui.common.components.settings.SegmentedButtonWithTitle import ua.acclorite.book_story.ui.common.helpers.LocalSettings -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun TextAlignmentOption() { @@ -21,21 +20,15 @@ fun TextAlignmentOption() { SegmentedButtonWithTitle( title = stringResource(id = R.string.text_alignment_option), - buttons = ReaderTextAlignment.entries.map { - ButtonItem( - id = it.toString(), - title = when (it) { - ReaderTextAlignment.START -> stringResource(id = R.string.alignment_start) - ReaderTextAlignment.JUSTIFY -> stringResource(id = R.string.alignment_justify) - ReaderTextAlignment.CENTER -> stringResource(id = R.string.alignment_center) - ReaderTextAlignment.END -> stringResource(id = R.string.alignment_end) - }, - textStyle = MaterialTheme.typography.labelLarge, - selected = it == settings.textAlignment.value + buttons = ReaderTextAlignment.entries.map { item -> + ListItem( + item = item, + title = stringResource(id = item.title), + selected = item == settings.textAlignment.value ) }, - onClick = { - settings.textAlignment.update(ReaderTextAlignment.valueOf(it.id)) + onClick = { item -> + settings.textAlignment.update(item) } ) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartContent.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartContent.kt index bff197c1..d1868401 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartContent.kt @@ -12,13 +12,13 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import ua.acclorite.book_story.presentation.navigator.StackEvent import ua.acclorite.book_story.presentation.start.StartScreen -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun StartContent( currentPage: Int, stackEvent: StackEvent, - languages: List, + languages: List>, updateLanguage: (String) -> Unit, navigateForward: () -> Unit, navigateBack: () -> Unit, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettings.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettings.kt index e5299bfb..90e34479 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettings.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettings.kt @@ -9,13 +9,13 @@ package ua.acclorite.book_story.ui.start import androidx.compose.runtime.Composable import ua.acclorite.book_story.presentation.navigator.StackEvent import ua.acclorite.book_story.presentation.start.StartScreen -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem @Composable fun StartSettings( currentPage: Int, stackEvent: StackEvent, - languages: List, + languages: List>, updateLanguage: (String) -> Unit, navigateForward: () -> Unit ) { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutGeneral.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutGeneral.kt index de418303..99a5b514 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutGeneral.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartSettingsLayoutGeneral.kt @@ -18,11 +18,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ua.acclorite.book_story.R import ua.acclorite.book_story.ui.common.components.dialog.SelectableDialogItem -import ua.acclorite.book_story.ui.common.model.ButtonItem +import ua.acclorite.book_story.ui.common.model.ListItem import ua.acclorite.book_story.ui.settings.components.SettingsSubcategoryTitle fun LazyListScope.StartSettingsLayoutGeneral( - languages: List, + languages: List>, updateLanguage: (String) -> Unit, ) { item { @@ -34,13 +34,13 @@ fun LazyListScope.StartSettingsLayoutGeneral( Spacer(modifier = Modifier.height(12.dp)) } - items(languages, key = { it.id }) { + items(languages, key = { it.item }) { SelectableDialogItem( selected = it.selected, title = it.title, horizontalPadding = 18.dp ) { - updateLanguage(it.id) + updateLanguage(it.item) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/DarkTheme.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/DarkTheme.kt index 5ad21651..66758aad 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/DarkTheme.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/DarkTheme.kt @@ -6,13 +6,15 @@ package ua.acclorite.book_story.ui.theme.model +import androidx.annotation.StringRes import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable +import ua.acclorite.book_story.R -enum class DarkTheme { - FOLLOW_SYSTEM, - OFF, - ON; +enum class DarkTheme(@StringRes val title: Int) { + FOLLOW_SYSTEM(R.string.dark_theme_follow_system), + OFF(R.string.dark_theme_off), + ON(R.string.dark_theme_on); @Composable fun isDark(): Boolean { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/HorizontalAlignment.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/HorizontalAlignment.kt index b92742ae..aa16ea31 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/HorizontalAlignment.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/HorizontalAlignment.kt @@ -6,10 +6,12 @@ package ua.acclorite.book_story.ui.theme.model +import androidx.annotation.StringRes import androidx.compose.ui.Alignment +import ua.acclorite.book_story.R -enum class HorizontalAlignment(val alignment: Alignment) { - START(Alignment.Companion.CenterStart), - CENTER(Alignment.Companion.Center), - END(Alignment.Companion.CenterEnd) +enum class HorizontalAlignment(val alignment: Alignment, @StringRes val title: Int) { + START(Alignment.Companion.CenterStart, R.string.alignment_start), + CENTER(Alignment.Companion.Center, R.string.alignment_center), + END(Alignment.Companion.CenterEnd, R.string.alignment_end) } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/PureDark.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/PureDark.kt index 49a57d72..e3f129af 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/PureDark.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/PureDark.kt @@ -8,12 +8,14 @@ package ua.acclorite.book_story.ui.theme.model import android.content.Context import android.os.PowerManager +import androidx.annotation.StringRes import androidx.compose.runtime.Composable +import ua.acclorite.book_story.R -enum class PureDark { - OFF, - ON, - SAVER; +enum class PureDark(@StringRes val title: Int) { + OFF(R.string.pure_dark_off), + ON(R.string.pure_dark_on), + SAVER(R.string.pure_dark_power_saver); @Composable fun isPureDark(context: Context): Boolean { diff --git a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/ThemeContrast.kt b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/ThemeContrast.kt index b846cda6..1db9083c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/theme/model/ThemeContrast.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/theme/model/ThemeContrast.kt @@ -6,9 +6,12 @@ package ua.acclorite.book_story.ui.theme.model +import androidx.annotation.StringRes +import ua.acclorite.book_story.R -enum class ThemeContrast { - STANDARD, - MEDIUM, - HIGH + +enum class ThemeContrast(@StringRes val title: Int) { + STANDARD(R.string.theme_contrast_standard), + MEDIUM(R.string.theme_contrast_medium), + HIGH(R.string.theme_contrast_high) } \ No newline at end of file