diff --git a/app/src/test/kotlin/com/subtracks/ui/DemoScreenshotTest.kt b/app/src/test/kotlin/com/subtracks/ui/DemoScreenshotTest.kt index 7abbe3fb..f61b99d2 100644 --- a/app/src/test/kotlin/com/subtracks/ui/DemoScreenshotTest.kt +++ b/app/src/test/kotlin/com/subtracks/ui/DemoScreenshotTest.kt @@ -40,12 +40,14 @@ import com.subtracks.data.model.Source import com.subtracks.data.model.coverArtKey import com.subtracks.data.prefs.ListQuery import com.subtracks.data.repo.SEARCH_RESULT_LIMIT +import com.subtracks.data.repo.normalizeBiography import com.subtracks.data.source.subsonic.SubsonicSource import com.subtracks.data.source.subsonic.TestServer import com.subtracks.data.source.subsonic.TestServers import com.subtracks.data.sync.SyncService import com.subtracks.playback.PlaybackState import com.subtracks.playback.QueueItem +import com.subtracks.ui.components.ArtistArt import com.subtracks.ui.home.HomeFeed import com.subtracks.ui.home.HomeScreen import com.subtracks.ui.library.AlbumDetailScreen @@ -82,11 +84,15 @@ import javax.imageio.ImageIO * by `:*UnitTest` or the integration suite; run it explicitly with `gradle :app:demoScreenshots`. * The synced database is rebuilt each run; downloaded cover art is cached under the system temp dir * so reruns do not re-fetch it. + * + * The device is a 393x786 dp phone at 440 dpi, which renders 1080x2161. A capture one pixel over + * 1080x2160 breaks the stores' 2:1 limit, so the captures are cropped to 1080x2160 afterwards, with + * the last row taken from the row above it. */ @OptIn(DelicateCoilApi::class) @RunWith(AndroidJUnit4::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(qualifiers = RobolectricDeviceQualifiers.PixelXL) +@Config(qualifiers = "w393dp-h786dp-normal-long-notround-any-440dpi-keyshidden-nonav") class DemoScreenshotTest { @get:Rule val composeRule = createAndroidComposeRule() @@ -123,6 +129,7 @@ class DemoScreenshotTest { HomeScreen( feed = demo.feed, coverArt = demo.coverArt, + artistArt = demo::artistArt, playingSongId = demo.homePlayingSong.id, modifier = Modifier.fillMaxSize(), ) @@ -178,6 +185,7 @@ class DemoScreenshotTest { ArtistDetailScreen( artist = demo.artist, artistName = demo.artist.name, + bio = demo.artistBio, albums = ArtistAlbums( albumCredits = @@ -216,6 +224,7 @@ class DemoScreenshotTest { onSync = {}, onOpenSettings = {}, artwork = demo.artwork(demo.nowPlayingAlbum.coverArt), + artistArt = demo::artistArt, modifier = Modifier.weight(1f), ) demo.MiniPlayerOverlay(demo.nowPlayingSong, demo.nowPlayingAlbum, progressInset = true) @@ -228,6 +237,7 @@ class DemoScreenshotTest { onQueryChange = {}, results = demo.search, coverArt = demo.coverArt, + artistArt = demo::artistArt, playingSongId = demo.nowPlayingSong.id, modifier = Modifier.fillMaxSize(), ) @@ -288,7 +298,7 @@ class DemoScreenshotTest { private fun reencodeOpaqueRgb(file: File) { val decoded = ImageIO.read(file) - val rgb = BufferedImage(decoded.width, decoded.height, BufferedImage.TYPE_INT_RGB) + val rgb = BufferedImage(decoded.width, decoded.width * 2, BufferedImage.TYPE_INT_RGB) rgb.createGraphics().run { drawImage(decoded, 0, 0, null) dispose() @@ -329,6 +339,7 @@ class DemoScreenshotTest { val homePlayingAlbum: Album, val homePlayingSong: Song, val artist: Artist, + val artistBio: String?, val artistAlbums: List, val search: SearchResults, val coverArt: (String?, Boolean) -> CoverArtRef?, @@ -371,6 +382,15 @@ class DemoScreenshotTest { return artworkColorsFromSeeds(primary?.rgb ?: FALLBACK_SEED, null) } + fun artistArt(artist: Artist): ArtistArt { + val thumbnail = artist.coverArt?.let { coverArt(it, true) } + return ArtistArt( + image = thumbnail, + thumbnail = thumbnail, + covers = artist.coverArts.take(4).mapNotNull { coverArt(it, true) }, + ) + } + companion object { private const val FALLBACK_SEED = 0xFF3A7BD5.toInt() private const val DEMO_BASE = "https://demo.navidrome.org/" @@ -417,9 +437,11 @@ class DemoScreenshotTest { val homePlayingAlbum = allAlbums.firstOrNull { it.name == "Shaking The Habitual" } ?: allAlbums.last() val homePlayingSong = songsOf(homePlayingAlbum).first() val artist = - allArtists.firstOrNull { it.name == "Ugress" } + allArtists.firstOrNull { it.name == "Nine Inch Nails" } + ?: allArtists.firstOrNull { it.name == "pornophonique" } ?: allArtists.maxByOrNull { it.albumCount } ?: error("demo library has no artists") + val artistBio = normalizeBiography(source.artistBiography(artist.id)) val artistAlbums = dao.albumsForArtist(1, artist.id).first() val coverArtIds = @@ -509,6 +531,7 @@ class DemoScreenshotTest { homePlayingAlbum = homePlayingAlbum, homePlayingSong = homePlayingSong, artist = artist, + artistBio = artistBio, artistAlbums = artistAlbums.filter { it.coverArt != null }, search = search, coverArt = coverArt, diff --git a/metadata/en-US/images/phoneScreenshots/01_home.png b/metadata/en-US/images/phoneScreenshots/01_home.png index f6b68a43..fdd783ce 100644 Binary files a/metadata/en-US/images/phoneScreenshots/01_home.png and b/metadata/en-US/images/phoneScreenshots/01_home.png differ diff --git a/metadata/en-US/images/phoneScreenshots/02_now-playing.png b/metadata/en-US/images/phoneScreenshots/02_now-playing.png index a6de17f7..ff5e1eff 100644 Binary files a/metadata/en-US/images/phoneScreenshots/02_now-playing.png and b/metadata/en-US/images/phoneScreenshots/02_now-playing.png differ diff --git a/metadata/en-US/images/phoneScreenshots/03_library-albums.png b/metadata/en-US/images/phoneScreenshots/03_library-albums.png index 00aff7de..a4404ccd 100644 Binary files a/metadata/en-US/images/phoneScreenshots/03_library-albums.png and b/metadata/en-US/images/phoneScreenshots/03_library-albums.png differ diff --git a/metadata/en-US/images/phoneScreenshots/04_album.png b/metadata/en-US/images/phoneScreenshots/04_album.png index 9248feb8..bf1a8820 100644 Binary files a/metadata/en-US/images/phoneScreenshots/04_album.png and b/metadata/en-US/images/phoneScreenshots/04_album.png differ diff --git a/metadata/en-US/images/phoneScreenshots/05_artist.png b/metadata/en-US/images/phoneScreenshots/05_artist.png index 4adf313c..ec3a123f 100644 Binary files a/metadata/en-US/images/phoneScreenshots/05_artist.png and b/metadata/en-US/images/phoneScreenshots/05_artist.png differ diff --git a/metadata/en-US/images/phoneScreenshots/06_library-artists.png b/metadata/en-US/images/phoneScreenshots/06_library-artists.png index 36502183..2b941977 100644 Binary files a/metadata/en-US/images/phoneScreenshots/06_library-artists.png and b/metadata/en-US/images/phoneScreenshots/06_library-artists.png differ diff --git a/metadata/en-US/images/phoneScreenshots/07_search.png b/metadata/en-US/images/phoneScreenshots/07_search.png index b531983a..76949b99 100644 Binary files a/metadata/en-US/images/phoneScreenshots/07_search.png and b/metadata/en-US/images/phoneScreenshots/07_search.png differ