refactor(android): migrate AlbumDetail TrackRow to shared TrackRow

This commit is contained in:
2026-05-29 22:48:06 -04:00
parent 6582d7699e
commit 7bed0c226b
@@ -3,7 +3,6 @@
package com.fabledsword.minstrel.library.ui package com.fabledsword.minstrel.library.ui
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@@ -56,7 +55,7 @@ import com.fabledsword.minstrel.models.TrackRef
import com.fabledsword.minstrel.nav.AlbumDetail import com.fabledsword.minstrel.nav.AlbumDetail
import com.fabledsword.minstrel.nav.ArtistDetail import com.fabledsword.minstrel.nav.ArtistDetail
import com.fabledsword.minstrel.shared.formatDuration import com.fabledsword.minstrel.shared.formatDuration
import com.fabledsword.minstrel.shared.widgets.CachedDot import com.fabledsword.minstrel.shared.widgets.TrackRow
import com.fabledsword.minstrel.shared.widgets.EmptyState import com.fabledsword.minstrel.shared.widgets.EmptyState
import com.fabledsword.minstrel.shared.widgets.LikeButton import com.fabledsword.minstrel.shared.widgets.LikeButton
import com.fabledsword.minstrel.shared.widgets.PullToRefreshScaffold import com.fabledsword.minstrel.shared.widgets.PullToRefreshScaffold
@@ -315,56 +314,35 @@ private fun TrackRow(
onNavigateToAlbum: (String) -> Unit, onNavigateToAlbum: (String) -> Unit,
onNavigateToArtist: (String) -> Unit, onNavigateToArtist: (String) -> Unit,
) { ) {
val titleColor = if (nowPlaying) { TrackRow(
MaterialTheme.colorScheme.primary title = track.title,
} else { artist = track.artistName,
MaterialTheme.colorScheme.onSurface trackId = track.id,
} onClick = onClick,
Row( nowPlaying = nowPlaying,
modifier = Modifier leading = {
.fillMaxWidth()
.clickable(onClick = onClick)
.padding(horizontal = 16.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = "${track.trackNumber ?: 0}",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.width(28.dp),
)
Column(modifier = Modifier.weight(1f)) {
Text( Text(
text = track.title, text = "${track.trackNumber ?: 0}",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodySmall,
color = titleColor, color = MaterialTheme.colorScheme.onSurfaceVariant,
maxLines = 1, modifier = Modifier.width(28.dp),
overflow = TextOverflow.Ellipsis,
) )
if (track.artistName.isNotEmpty()) { },
Text( trailing = {
text = track.artistName, Text(
style = MaterialTheme.typography.bodySmall, text = formatDuration(track.durationSec, zero = "--:--"),
color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodySmall,
maxLines = 1, color = MaterialTheme.colorScheme.onSurfaceVariant,
overflow = TextOverflow.Ellipsis, modifier = Modifier.padding(start = 12.dp),
) )
} LikeButton(liked = liked, onToggle = onToggleLike)
} TrackActionsButton(
CachedDot(track.id) track = track,
Text( onNavigateToAlbum = onNavigateToAlbum,
text = formatDuration(track.durationSec, zero = "--:--"), onNavigateToArtist = onNavigateToArtist,
style = MaterialTheme.typography.bodySmall, )
color = MaterialTheme.colorScheme.onSurfaceVariant, },
modifier = Modifier.padding(start = 12.dp), )
)
LikeButton(liked = liked, onToggle = onToggleLike)
TrackActionsButton(
track = track,
onNavigateToAlbum = onNavigateToAlbum,
onNavigateToArtist = onNavigateToArtist,
)
}
} }
private const val SKELETON_TRACK_ROWS = 8 private const val SKELETON_TRACK_ROWS = 8