Skip to content

Commit bde7457

Browse files
authored
Merge pull request #1942 from starry-shivam/master
feat: Navigate to artist page when clicking on artist name in player UI
2 parents c0350db + 21089ac commit bde7457

5 files changed

Lines changed: 24 additions & 5 deletions

File tree

app/src/main/java/com/theveloper/pixelplay/data/repository/MusicRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ interface MusicRepository {
280280
*/
281281
fun getSong(songId: String): Flow<Song?>
282282
fun getArtistById(artistId: Long): Flow<Artist?>
283+
suspend fun getArtistIdByName(name: String): Long?
283284
fun getArtistsForSong(songId: Long): Flow<List<Artist>>
284285

285286
/**

app/src/main/java/com/theveloper/pixelplay/data/repository/MusicRepositoryImpl.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,10 @@ class MusicRepositoryImpl @Inject constructor(
476476
return musicDao.getArtistById(artistId).map { it?.toArtist() }
477477
}
478478

479+
override suspend fun getArtistIdByName(name: String): Long? = withContext(Dispatchers.IO) {
480+
musicDao.getArtistIdByName(name)
481+
}
482+
479483
override fun getArtistsForSong(songId: Long): Flow<List<Artist>> {
480484
return musicDao.getArtistsForSong(songId)
481485
.map { entities -> entities.map { it.toArtist() } }

app/src/main/java/com/theveloper/pixelplay/presentation/components/player/FullPlayerContent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ fun FullPlayerContent(
396396
}
397397

398398
val onSongMetadataArtistClick = {
399-
val resolvedArtistId = currentSongArtists.firstOrNull()?.id ?: song.artistId
399+
val resolvedArtistId = currentSongArtists.firstOrNull { it.id != 0L && it.id != -1L }?.id ?: song.artistId
400400
if (currentSongArtists.size > 1) {
401401
showArtistPicker = true
402402
} else {
@@ -2121,7 +2121,7 @@ private fun PlayerSongInfo(
21212121
val coroutineScope = rememberCoroutineScope()
21222122
var isNavigatingToArtist by remember { mutableStateOf(false) }
21232123
val resolvedArtistId by remember(artists, artistId) {
2124-
derivedStateOf { artists.firstOrNull { it.id > 0L }?.id ?: artistId }
2124+
derivedStateOf { artists.firstOrNull { it.id != 0L && it.id != -1L }?.id ?: artistId }
21252125
}
21262126
val titleStyle = MaterialTheme.typography.headlineSmall.copy(
21272127
fontWeight = FontWeight.Bold,

app/src/main/java/com/theveloper/pixelplay/presentation/components/player/PlayerArtistPickerBottomSheet.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ internal fun PlayerArtistPickerBottomSheet(
6363
val primaryArtist = song.primaryArtist
6464
val computedItems = artists.mapIndexed { index, artist ->
6565
val isPrimary = when {
66-
primaryArtist.id > 0L -> artist.id == primaryArtist.id
66+
primaryArtist.id != 0L && primaryArtist.id != -1L -> artist.id == primaryArtist.id
6767
primaryArtist.name.isNotBlank() -> artist.name.equals(primaryArtist.name, ignoreCase = true)
6868
else -> index == 0
6969
}

app/src/main/java/com/theveloper/pixelplay/presentation/viewmodel/PlayerViewModel.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2335,7 +2335,7 @@ class PlayerViewModel @Inject constructor(
23352335
}
23362336

23372337
fun triggerArtistNavigationFromPlayer(artistId: Long) {
2338-
if (artistId <= 0) {
2338+
if (artistId == 0L) {
23392339
Log.d("ArtistDebug", "triggerArtistNavigationFromPlayer ignored invalid artistId=$artistId")
23402340
return
23412341
}
@@ -2348,10 +2348,24 @@ class PlayerViewModel @Inject constructor(
23482348

23492349
artistNavigationJob?.cancel()
23502350
artistNavigationJob = viewModelScope.launch {
2351+
var resolvedId = artistId
23512352
val currentSong = playbackStateHolder.stablePlayerState.value.currentSong
2353+
2354+
if (resolvedId == -1L && currentSong != null) {
2355+
val idFromName = musicRepository.getArtistIdByName(currentSong.artist)
2356+
if (idFromName != null) {
2357+
resolvedId = idFromName
2358+
}
2359+
}
2360+
2361+
if (resolvedId == 0L || resolvedId == -1L) {
2362+
Log.d("ArtistDebug", "triggerArtistNavigationFromPlayer: could not resolve artistId for name=${currentSong?.artist}")
2363+
return@launch
2364+
}
2365+
23522366
Log.d(
23532367
"ArtistDebug",
2354-
"triggerArtistNavigationFromPlayer: artistId=$artistId, songId=${currentSong?.id}, title=${currentSong?.title}"
2368+
"triggerArtistNavigationFromPlayer: artistId=$resolvedId, songId=${currentSong?.id}, title=${currentSong?.title}"
23552369
)
23562370
collapsePlayerSheet()
23572371

0 commit comments

Comments
 (0)