From b354e37cc34e1b713a0d19818fd030294985f109 Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 24 Jun 2023 11:23:06 -0400 Subject: [PATCH] Refactor grid size slider composable for reuse --- .../library/LibrarySettingsDialog.kt | 70 ++++++------------- .../core/components/SettingsItems.kt | 39 +++++++++++ 2 files changed, 60 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt index 7d570a4591..ce1adbe75a 100644 --- a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt @@ -1,25 +1,17 @@ package eu.kanade.presentation.library import android.content.res.Configuration -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Slider -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.presentation.components.TriStateItem @@ -35,7 +27,7 @@ import tachiyomi.domain.manga.model.TriStateFilter import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.RadioItem -import tachiyomi.presentation.core.components.SettingsItemsPaddings +import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.components.SortItem @Composable @@ -195,48 +187,28 @@ private fun ColumnScope.DisplayPage( } if (displayMode != LibraryDisplayMode.List) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding( - horizontal = SettingsItemsPaddings.Horizontal, - vertical = SettingsItemsPaddings.Vertical, - ), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(24.dp), - ) { - val configuration = LocalConfiguration.current - val columnPreference = remember { - if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { - screenModel.libraryPreferences.landscapeColumns() - } else { - screenModel.libraryPreferences.portraitColumns() - } + val configuration = LocalConfiguration.current + val columnPreference = remember { + if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { + screenModel.libraryPreferences.landscapeColumns() + } else { + screenModel.libraryPreferences.portraitColumns() } - - val columns by columnPreference.collectAsState() - Column(modifier = Modifier.weight(0.5f)) { - Text( - stringResource(id = R.string.pref_library_columns), - style = MaterialTheme.typography.bodyMedium, - ) - Text( - if (columns > 0) { - stringResource(id = R.string.pref_library_columns_per_row, columns) - } else { - stringResource(id = R.string.label_default) - }, - ) - } - - Slider( - value = columns.toFloat(), - onValueChange = { columnPreference.set(it.toInt()) }, - modifier = Modifier.weight(1.5f), - valueRange = 0f..10f, - steps = 10, - ) } + + val columns by columnPreference.collectAsState() + SliderItem( + label = stringResource(R.string.pref_library_columns), + min = 0, + max = 10, + value = columns, + valueText = if (columns > 0) { + stringResource(R.string.pref_library_columns_per_row, columns) + } else { + stringResource(R.string.label_default) + }, + onChange = { columnPreference.set(it) }, + ) } HeadingItem(R.string.overlay_header) diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt index 00040026b0..bc8a50fe41 100644 --- a/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt @@ -3,6 +3,7 @@ package tachiyomi.presentation.core.components import androidx.annotation.StringRes import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer @@ -17,6 +18,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.RadioButton +import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -135,6 +137,43 @@ fun RadioItem( ) } +@Composable +fun SliderItem( + label: String, + min: Int, + max: Int, + value: Int, + valueText: String, + onChange: (Int) -> Unit, +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding( + horizontal = SettingsItemsPaddings.Horizontal, + vertical = SettingsItemsPaddings.Vertical, + ), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(24.dp), + ) { + Column(modifier = Modifier.weight(0.5f)) { + Text( + text = label, + style = MaterialTheme.typography.bodyMedium, + ) + Text(valueText) + } + + Slider( + value = value.toFloat(), + onValueChange = { onChange(it.toInt()) }, + modifier = Modifier.weight(1.5f), + valueRange = min.toFloat()..max.toFloat(), + steps = max - min, + ) + } +} + @Composable private fun BaseSettingsItem( label: String,