mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-11 07:29:14 +01:00
put the download indicator on the artist line, tight to its left
The glyph and the progress ring sat in the title row after the star, spaced 8dp; they now lead the subtitle row, 4dp from the artist name, which is where the artist line has room for them. `theDownloadedIndicatorSitsOnTheArtistLineToItsLeft` measures the unmerged bounds and fails if the indicator moves back up to the title line or to the artist's right.
This commit is contained in:
@@ -89,16 +89,21 @@ fun SongRow(
|
|||||||
modifier = Modifier.weight(1f, fill = false),
|
modifier = Modifier.weight(1f, fill = false),
|
||||||
)
|
)
|
||||||
StarredBadge(song.starred != null)
|
StarredBadge(song.starred != null)
|
||||||
DownloadBadge(download)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
supportingContent = {
|
supportingContent = {
|
||||||
Text(
|
Row(
|
||||||
text = song.artist.orEmpty().ifEmpty { "\u00A0" },
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
color = if (isPlaying) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant,
|
horizontalArrangement = Arrangement.spacedBy(4.dp),
|
||||||
maxLines = 1,
|
) {
|
||||||
overflow = TextOverflow.Ellipsis,
|
DownloadBadge(download)
|
||||||
)
|
Text(
|
||||||
|
text = song.artist.orEmpty().ifEmpty { "\u00A0" },
|
||||||
|
color = if (isPlaying) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
maxLines = 1,
|
||||||
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
colors = ListItemDefaults.colors(containerColor = Color.Transparent),
|
colors = ListItemDefaults.colors(containerColor = Color.Transparent),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -5,15 +5,18 @@ import androidx.compose.ui.test.assertIsDisplayed
|
|||||||
import androidx.compose.ui.test.junit4.v2.createAndroidComposeRule
|
import androidx.compose.ui.test.junit4.v2.createAndroidComposeRule
|
||||||
import androidx.compose.ui.test.onNodeWithContentDescription
|
import androidx.compose.ui.test.onNodeWithContentDescription
|
||||||
import androidx.compose.ui.test.onNodeWithText
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import com.subtracks.data.model.DownloadStatus
|
import com.subtracks.data.model.DownloadStatus
|
||||||
import com.subtracks.data.model.Song
|
import com.subtracks.data.model.Song
|
||||||
import com.subtracks.data.model.SongDownload
|
import com.subtracks.data.model.SongDownload
|
||||||
import com.subtracks.ui.theme.SubtracksTheme
|
import com.subtracks.ui.theme.SubtracksTheme
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.robolectric.annotation.GraphicsMode
|
import org.robolectric.annotation.GraphicsMode
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
@GraphicsMode(GraphicsMode.Mode.NATIVE)
|
@GraphicsMode(GraphicsMode.Mode.NATIVE)
|
||||||
@@ -60,6 +63,18 @@ class SongRowDownloadTest {
|
|||||||
composeRule.onNodeWithContentDescription("Downloaded").assertDoesNotExist()
|
composeRule.onNodeWithContentDescription("Downloaded").assertDoesNotExist()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun theDownloadedIndicatorSitsOnTheArtistLineToItsLeft() {
|
||||||
|
render(download(DownloadStatus.Completed))
|
||||||
|
|
||||||
|
val badge = composeRule.onNodeWithContentDescription("Downloaded", useUnmergedTree = true).fetchSemanticsNode().boundsInRoot
|
||||||
|
val artist = composeRule.onNodeWithText("Artist", useUnmergedTree = true).fetchSemanticsNode().boundsInRoot
|
||||||
|
|
||||||
|
assertTrue("expected the indicator left of the artist name, badge=$badge artist=$artist", badge.right <= artist.left)
|
||||||
|
val offBy = abs(badge.center.y - artist.center.y)
|
||||||
|
assertTrue("expected the indicator on the artist's line, off by ${offBy}px", offBy <= with(composeRule.density) { 2.dp.toPx() })
|
||||||
|
}
|
||||||
|
|
||||||
private fun download(status: DownloadStatus) =
|
private fun download(status: DownloadStatus) =
|
||||||
SongDownload(sourceId = 1, songId = "s1", status = status, engineId = 7, bytes = 40, total = 100)
|
SongDownload(sourceId = 1, songId = "s1", status = status, engineId = 7, bytes = 40, total = 100)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user