From 2403a44c186d503d26bfb565ddad7c0a51875816 Mon Sep 17 00:00:00 2001 From: damontecres <154766448+damontecres@users.noreply.github.com> Date: Thu, 11 Dec 2025 13:03:16 -0500 Subject: [PATCH] Add view option for hiding card titles (#422) Adds a view option for grids to show/hide titles. It is enabled by default. Closes #403 --- .../damontecres/wholphin/ui/cards/GridCard.kt | 56 ++++++++++--------- .../ui/components/CollectionFolderGrid.kt | 9 +-- .../ui/components/ViewOptionsDialog.kt | 9 +++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 45 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/GridCard.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/GridCard.kt index b6f3ff4f..218a64d2 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/cards/GridCard.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/cards/GridCard.kt @@ -1,5 +1,6 @@ package com.github.damontecres.wholphin.ui.cards +import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.background import androidx.compose.foundation.interaction.MutableInteractionSource @@ -44,6 +45,7 @@ fun GridCard( imageAspectRatio: Float = AspectRatios.TALL, imageContentScale: ContentScale = ContentScale.Fit, imageType: ViewOptionImageType = ViewOptionImageType.PRIMARY, + showTitle: Boolean = true, ) { val dto = item?.data val focused by interactionSource.collectIsFocusedAsState() @@ -98,34 +100,36 @@ fun GridCard( .background(MaterialTheme.colorScheme.surfaceVariant), ) } - Column( - verticalArrangement = Arrangement.spacedBy(0.dp), - modifier = - Modifier - .padding(bottom = spaceBelow) - .fillMaxWidth(), - ) { - Text( - text = item?.title ?: "", - maxLines = 1, - textAlign = TextAlign.Center, - overflow = TextOverflow.Ellipsis, + AnimatedVisibility(showTitle) { + Column( + verticalArrangement = Arrangement.spacedBy(0.dp), modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 4.dp) - .enableMarquee(focusedAfterDelay), - ) - Text( - text = item?.subtitle ?: "", - maxLines = 1, - textAlign = TextAlign.Center, - modifier = - Modifier - .fillMaxWidth() - .padding(horizontal = 4.dp) - .enableMarquee(focusedAfterDelay), - ) + .padding(bottom = spaceBelow) + .fillMaxWidth(), + ) { + Text( + text = item?.title ?: "", + maxLines = 1, + textAlign = TextAlign.Center, + overflow = TextOverflow.Ellipsis, + modifier = + Modifier + .fillMaxWidth() + .padding(horizontal = 4.dp) + .enableMarquee(focusedAfterDelay), + ) + Text( + text = item?.subtitle ?: "", + maxLines = 1, + textAlign = TextAlign.Center, + modifier = + Modifier + .fillMaxWidth() + .padding(horizontal = 4.dp) + .enableMarquee(focusedAfterDelay), + ) + } } } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt index 2ba65f13..35b5d1c3 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt @@ -681,6 +681,10 @@ fun CollectionFolderGridContent( letterPosition: suspend (Char) -> Int, sortOptions: List, playEnabled: Boolean, + getPossibleFilterValues: suspend (ItemFilterBy<*>) -> List, + defaultViewOptions: ViewOptions, + onSaveViewOptions: (ViewOptions) -> Unit, + viewOptions: ViewOptions, onClickPlayAll: (shuffle: Boolean) -> Unit, onClickPlay: (Int, BaseItem) -> Unit, modifier: Modifier = Modifier, @@ -689,10 +693,6 @@ fun CollectionFolderGridContent( currentFilter: GetItemsFilter = GetItemsFilter(), filterOptions: List> = listOf(), onFilterChange: (GetItemsFilter) -> Unit = {}, - getPossibleFilterValues: suspend (ItemFilterBy<*>) -> List, - defaultViewOptions: ViewOptions, - viewOptions: ViewOptions, - onSaveViewOptions: (ViewOptions) -> Unit, ) { val context = LocalContext.current val title = item?.name ?: item?.data?.collectionType?.name ?: stringResource(R.string.collection) @@ -837,6 +837,7 @@ fun CollectionFolderGridContent( imageContentScale = viewOptions.contentScale.scale, imageAspectRatio = viewOptions.aspectRatio.ratio, imageType = viewOptions.imageType, + showTitle = viewOptions.showTitles, modifier = mod, ) }, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/ViewOptionsDialog.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/ViewOptionsDialog.kt index 8142002b..e4e6d350 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/ViewOptionsDialog.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/ViewOptionsDialog.kt @@ -113,6 +113,7 @@ data class ViewOptions( val aspectRatio: AspectRatio = AspectRatio.TALL, val showDetails: Boolean = false, val imageType: ViewOptionImageType = ViewOptionImageType.PRIMARY, + val showTitles: Boolean = true, ) { companion object { val ViewOptionsColumns = @@ -165,6 +166,13 @@ data class ViewOptions( getter = { it.showDetails }, setter = { vo, value -> vo.copy(showDetails = value) }, ) + val ViewOptionsShowTitles = + AppSwitchPreference( + title = R.string.show_titles, + defaultValue = true, + getter = { it.showTitles }, + setter = { vo, value -> vo.copy(showTitles = value) }, + ) val ViewOptionsImageType = AppChoicePreference( @@ -194,6 +202,7 @@ data class ViewOptions( ViewOptionsImageType, ViewOptionsAspectRatio, ViewOptionsDetailHeader, + ViewOptionsShowTitles, ViewOptionsColumns, ViewOptionsSpacing, ViewOptionsContentScale, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 678c8d5d..eb2fce4f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -354,6 +354,7 @@ Automatic Use username/password Login + Show titles Disabled