diff --git a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryList.kt b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryList.kt index 3961947ddc..cf7a16992c 100644 --- a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryList.kt +++ b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryList.kt @@ -22,6 +22,8 @@ import tachiyomi.presentation.core.util.plus @Composable internal fun AnimeLibraryList( items: List, + entries: Int, + containerHeight: Int, contentPadding: PaddingValues, selection: List, onClick: (LibraryAnime) -> Unit, @@ -74,6 +76,8 @@ internal fun AnimeLibraryList( } else { null }, + entries = entries, + containerHeight = containerHeight, ) } } diff --git a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryPager.kt b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryPager.kt index 90e9e7c8ef..1eb8692414 100644 --- a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryPager.kt +++ b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryPager.kt @@ -14,8 +14,10 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.unit.dp import eu.kanade.core.preference.PreferenceMutableState @@ -42,8 +44,13 @@ fun AnimeLibraryPager( onLongClickAnime: (LibraryAnime) -> Unit, onClickContinueWatching: ((LibraryAnime) -> Unit)?, ) { + var containerHeight by remember { mutableIntStateOf(0) } HorizontalPager( - modifier = Modifier.fillMaxSize(), + modifier = Modifier + .fillMaxSize() + .onGloballyPositioned { layoutCoordinates -> + containerHeight = layoutCoordinates.size.height + }, state = state, verticalAlignment = Alignment.Top, ) { page -> @@ -64,19 +71,16 @@ fun AnimeLibraryPager( } val displayMode by getDisplayMode(page) - val columns by if (displayMode != LibraryDisplayMode.List) { - val configuration = LocalConfiguration.current - val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE - - remember(isLandscape) { getColumnsForOrientation(isLandscape) } - } else { - remember { mutableIntStateOf(0) } - } + val configuration = LocalConfiguration.current + val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + val columns by remember(isLandscape) { getColumnsForOrientation(isLandscape) } when (displayMode) { LibraryDisplayMode.List -> { AnimeLibraryList( items = library, + entries = columns, + containerHeight = containerHeight, contentPadding = contentPadding, selection = selectedAnime, onClick = onClickAnime, diff --git a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt index 28f2b7df5e..4014368230 100644 --- a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt @@ -36,6 +36,7 @@ import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem +import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @@ -248,17 +249,29 @@ private fun ColumnScope.DisplayPage( } } - if (displayMode != LibraryDisplayMode.List) { - val configuration = LocalConfiguration.current - val columnPreference = remember { - if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { - screenModel.libraryPreferences.animeLandscapeColumns() - } else { - screenModel.libraryPreferences.animePortraitColumns() - } + val configuration = LocalConfiguration.current + val columnPreference = remember { + if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { + screenModel.libraryPreferences.animeLandscapeColumns() + } else { + screenModel.libraryPreferences.animePortraitColumns() } + } - val columns by columnPreference.collectAsState() + val columns by columnPreference.collectAsState() + if (displayMode == LibraryDisplayMode.List) { + SliderItem( + label = stringResource(MR.strings.pref_library_rows), + max = 10, + value = columns, + valueText = if (columns > 0) { + pluralStringResource(MR.plurals.pref_library_entries_in_column, columns, columns,) + } else { + stringResource(MR.strings.label_default) + }, + onChange = columnPreference::set, + ) + } else { SliderItem( label = stringResource(MR.strings.pref_library_columns), max = 10, diff --git a/app/src/main/java/eu/kanade/presentation/library/components/CommonEntryItem.kt b/app/src/main/java/eu/kanade/presentation/library/components/CommonEntryItem.kt index 0252426fb2..e5ad4d3723 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/CommonEntryItem.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/CommonEntryItem.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shadow +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp @@ -338,19 +339,28 @@ fun EntryListItem( onClick: () -> Unit, badge: @Composable (RowScope.() -> Unit), onClickContinueViewing: (() -> Unit)? = null, + entries: Int = -1, + containerHeight: Int = 0, ) { + val density = LocalDensity.current Row( modifier = Modifier .selectedBackground(isSelected) - .height(56.dp) + .height( + when (entries) { + -1 -> { 76.dp } + 0 -> { with(density){(containerHeight / 7).toDp()} - (3/7).dp } + else -> { with(density){(containerHeight / entries).toDp()} - (3/entries).dp } + } + ) .combinedClickable( onClick = onClick, onLongClick = onLongClick, ) - .padding(horizontal = 16.dp, vertical = 8.dp), + .padding(horizontal = 16.dp, vertical = 3.dp), verticalAlignment = Alignment.CenterVertically, ) { - ItemCover.Square( + ItemCover.Book( modifier = Modifier .fillMaxHeight() .alpha(coverAlpha), @@ -361,7 +371,7 @@ fun EntryListItem( modifier = Modifier .padding(horizontal = 16.dp) .weight(1f), - maxLines = 2, + //maxLines = 2, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodyMedium, ) diff --git a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryList.kt b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryList.kt index 306617ea4d..c8807610f0 100644 --- a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryList.kt +++ b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryList.kt @@ -22,6 +22,8 @@ import tachiyomi.presentation.core.util.plus @Composable internal fun MangaLibraryList( items: List, + entries: Int, + containerHeight: Int, contentPadding: PaddingValues, selection: List, onClick: (LibraryManga) -> Unit, @@ -74,6 +76,8 @@ internal fun MangaLibraryList( } else { null }, + entries = entries, + containerHeight = containerHeight, ) } } diff --git a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt index c7c9fdedbe..654b33400e 100644 --- a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt +++ b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt @@ -14,8 +14,10 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.unit.dp import eu.kanade.core.preference.PreferenceMutableState @@ -42,8 +44,13 @@ fun MangaLibraryPager( onLongClickManga: (LibraryManga) -> Unit, onClickContinueReading: ((LibraryManga) -> Unit)?, ) { + var containerHeight by remember { mutableIntStateOf(0) } HorizontalPager( - modifier = Modifier.fillMaxSize(), + modifier = Modifier + .fillMaxSize() + .onGloballyPositioned { layoutCoordinates -> + containerHeight = layoutCoordinates.size.height + }, state = state, verticalAlignment = Alignment.Top, ) { page -> @@ -64,19 +71,16 @@ fun MangaLibraryPager( } val displayMode by getDisplayMode(page) - val columns by if (displayMode != LibraryDisplayMode.List) { - val configuration = LocalConfiguration.current - val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE - - remember(isLandscape) { getColumnsForOrientation(isLandscape) } - } else { - remember { mutableIntStateOf(0) } - } + val configuration = LocalConfiguration.current + val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + val columns by remember(isLandscape) { getColumnsForOrientation(isLandscape) } when (displayMode) { LibraryDisplayMode.List -> { MangaLibraryList( items = library, + entries = columns, + containerHeight = containerHeight, contentPadding = contentPadding, selection = selectedManga, onClick = onClickManga, diff --git a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt index 131b7f9427..181c6b474f 100644 --- a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt @@ -36,6 +36,7 @@ import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem +import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @@ -247,23 +248,35 @@ private fun ColumnScope.DisplayPage( } } - if (displayMode != LibraryDisplayMode.List) { - val configuration = LocalConfiguration.current - val columnPreference = remember { - if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { - screenModel.libraryPreferences.mangaLandscapeColumns() - } else { - screenModel.libraryPreferences.mangaPortraitColumns() - } + val configuration = LocalConfiguration.current + val columnPreference = remember { + if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { + screenModel.libraryPreferences.mangaLandscapeColumns() + } else { + screenModel.libraryPreferences.mangaPortraitColumns() } + } - val columns by columnPreference.collectAsState() + val columns by columnPreference.collectAsState() + if (displayMode == LibraryDisplayMode.List) { + SliderItem( + label = stringResource(MR.strings.pref_library_rows), + max = 10, + value = columns, + valueText = if (columns > 0) { + pluralStringResource(MR.plurals.pref_library_entries_in_column, columns, columns,) + } else { + stringResource(MR.strings.label_default) + }, + onChange = columnPreference::set, + ) + } else { SliderItem( label = stringResource(MR.strings.pref_library_columns), max = 10, value = columns, valueText = if (columns > 0) { - stringResource(MR.strings.pref_library_columns_per_row, columns) + stringResource(MR.strings.pref_library_columns_per_row, columns,) } else { stringResource(MR.strings.label_default) }, diff --git a/i18n/src/commonMain/moko-resources/base/plurals.xml b/i18n/src/commonMain/moko-resources/base/plurals.xml index bd9d941008..ed606e79f5 100644 --- a/i18n/src/commonMain/moko-resources/base/plurals.xml +++ b/i18n/src/commonMain/moko-resources/base/plurals.xml @@ -1,5 +1,9 @@ + + 1 entry + %d entries + After %1$s minute After %1$s minutes diff --git a/i18n/src/commonMain/moko-resources/base/strings.xml b/i18n/src/commonMain/moko-resources/base/strings.xml index 2209b359f5..99a4701f94 100644 --- a/i18n/src/commonMain/moko-resources/base/strings.xml +++ b/i18n/src/commonMain/moko-resources/base/strings.xml @@ -540,6 +540,7 @@ Display Grid size %d per row + List size Portrait Landscape Global update