artists: tighten the header and drop the dead star/more on track artists

Lift the type label to the artist name's inset and centre the album count
on the star/more row. A credited track artist has no artists row, so its
star is disabled and more does nothing; hide both there.
This commit is contained in:
austinried
2026-10-04 01:49:55 +00:00
parent fd2e1cfd86
commit 299457d8fc
2 changed files with 40 additions and 30 deletions
@@ -363,42 +363,47 @@ fun ArtistDetailScreen(
} }
} }
} }
Row( Column(
modifier = Modifier.fillMaxWidth().padding(start = 16.dp, end = 8.dp, top = 34.dp, bottom = 0.dp), modifier = Modifier.fillMaxWidth().padding(start = 16.dp, end = 8.dp, top = TITLE_INSET),
verticalAlignment = Alignment.CenterVertically,
) { ) {
Column(Modifier.weight(1f)) { Text(
Text( text = artistType,
text = artistType, style = MaterialTheme.typography.labelLarge,
style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.onSurfaceVariant,
color = MaterialTheme.colorScheme.onSurfaceVariant, )
) Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
) {
Text( Text(
text = pluralStringResource(R.plurals.resources_album_count, albumCount.toInt(), albumCount), text = pluralStringResource(R.plurals.resources_album_count, albumCount.toInt(), albumCount),
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.weight(1f),
) )
} if (artist != null) {
IconButton( IconButton(
onClick = { onToggleStar?.invoke() }, onClick = { onToggleStar?.invoke() },
enabled = onToggleStar != null, enabled = onToggleStar != null,
) { ) {
Icon( Icon(
imageVector = if (starred) Icons.Rounded.Star else Icons.Rounded.StarBorder, imageVector = if (starred) Icons.Rounded.Star else Icons.Rounded.StarBorder,
contentDescription = contentDescription =
stringResource( stringResource(
if (starred) R.string.actions_unstar else R.string.actions_star, if (starred) R.string.actions_unstar else R.string.actions_star,
), ),
tint = tint =
if (starred) { if (starred) {
MaterialTheme.colorScheme.primary MaterialTheme.colorScheme.primary
} else { } else {
MaterialTheme.colorScheme.onSurfaceVariant MaterialTheme.colorScheme.onSurfaceVariant
}, },
) )
} }
IconButton(onClick = onMore) { IconButton(onClick = onMore) {
Icon(Icons.Rounded.MoreHoriz, contentDescription = stringResource(R.string.more_options)) Icon(Icons.Rounded.MoreHoriz, contentDescription = stringResource(R.string.more_options))
}
}
} }
} }
} }
@@ -1,8 +1,11 @@
package com.subtracks.ui.library package com.subtracks.ui.library
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.junit4.v2.createAndroidComposeRule import androidx.compose.ui.test.junit4.v2.createAndroidComposeRule
import androidx.compose.ui.test.onAllNodesWithContentDescription
import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import com.subtracks.data.model.Artist import com.subtracks.data.model.Artist
@@ -45,6 +48,7 @@ class ArtistDetailScreenTest {
composeRule.onAllNodesWithText("Guest")[0].assertExists() composeRule.onAllNodesWithText("Guest")[0].assertExists()
composeRule.onNodeWithText("Artist").assertExists() composeRule.onNodeWithText("Artist").assertExists()
composeRule.onAllNodesWithContentDescription("More options").assertCountEquals(0)
} }
@Test @Test
@@ -56,5 +60,6 @@ class ArtistDetailScreenTest {
) )
composeRule.onNodeWithText("Album artist").assertExists() composeRule.onNodeWithText("Album artist").assertExists()
composeRule.onNodeWithContentDescription("More options").assertExists()
} }
} }