Minor music model changes

Move the size recalculations/child item sorting to a method called finalize() in artists, albums, and genres. Also remove the artist images for now, Ill figure out a good way to bring them back.
This commit is contained in:
OxygenCobalt 2020-09-04 18:28:11 -06:00
parent 7a2c779fe2
commit 565d1efa96
9 changed files with 63 additions and 46 deletions

View file

@ -65,25 +65,6 @@ fun Long.toAlbumArtURI(): Uri {
) )
} }
// Get the cover art
@BindingAdapter("coverArt")
fun ImageView.getCoverArt(any: Any) {
val uri = when (any) {
is Song -> any.album.coverUri
is Album -> any.coverUri
// TODO: Artist images
else -> Uri.EMPTY
}
load(uri) {
crossfade(true)
placeholder(android.R.color.transparent)
error(R.drawable.ic_music)
}
}
fun Int.toSongCount(): Int { fun Int.toSongCount(): Int {
return if (this < 2) { return if (this < 2) {
R.string.label_single_song R.string.label_single_song
@ -113,3 +94,30 @@ fun TextView.getSongAlbumCount(artist: Artist) {
text = context.getString(R.string.format_combined_song_album, albums, songs) text = context.getString(R.string.format_combined_song_album, albums, songs)
} }
// Get the cover art
@BindingAdapter("coverArt")
fun ImageView.getCoverArt(any: Any) {
val uri = when (any) {
is Song -> any.album.coverUri
is Album -> any.coverUri
else -> Uri.EMPTY
}
load(uri) {
crossfade(true)
placeholder(android.R.color.transparent)
error(R.drawable.ic_music)
}
}
// Get the artist image.
@BindingAdapter("artistImage")
fun ImageView.getArtistImage(artist: Artist) {
load(artist.albums[0].coverUri) {
crossfade(true)
placeholder(android.R.color.transparent)
error(R.drawable.ic_music)
}
}

View file

@ -14,4 +14,8 @@ data class Album(
lateinit var artist: Artist lateinit var artist: Artist
val songs = mutableListOf<Song>() val songs = mutableListOf<Song>()
fun finalize() {
songs.sortBy { it.track }
}
} }

View file

@ -9,4 +9,13 @@ data class Artist(
val albums = mutableListOf<Album>() val albums = mutableListOf<Album>()
var numAlbums = 0 var numAlbums = 0
var numSongs = 0 var numSongs = 0
fun finalize() {
albums.sortByDescending { it.year }
numAlbums = albums.size
albums.forEach { album ->
numSongs += album.numSongs
}
}
} }

View file

@ -6,4 +6,9 @@ data class Genre(
) { ) {
val artists = mutableListOf<Artist>() val artists = mutableListOf<Artist>()
var numArtists = 0 var numArtists = 0
fun finalize() {
artists.sortByDescending { it.name }
numArtists = artists.size
}
} }

View file

@ -54,6 +54,7 @@ class MusicSorter(
} }
unknownAlbum.numSongs = unknownAlbum.songs.size unknownAlbum.numSongs = unknownAlbum.songs.size
unknownAlbum.finalize()
albums.add(unknownAlbum) albums.add(unknownAlbum)
@ -62,6 +63,8 @@ class MusicSorter(
"${unknownSongs.size} songs were placed into an unknown album." "${unknownSongs.size} songs were placed into an unknown album."
) )
} }
albums.sortByDescending { it.title }
} }
private fun sortAlbumsIntoArtists() { private fun sortAlbumsIntoArtists() {
@ -79,10 +82,7 @@ class MusicSorter(
artist.albums.add(album) artist.albums.add(album)
} }
artist.numAlbums = artist.albums.size artist.finalize()
artist.albums.forEach { album ->
artist.numSongs += album.numSongs
}
unknownAlbums.removeAll(artistAlbums) unknownAlbums.removeAll(artistAlbums)
} }
@ -98,10 +98,7 @@ class MusicSorter(
unknownArtist.albums.add(album) unknownArtist.albums.add(album)
} }
unknownArtist.numAlbums = unknownArtist.albums.size unknownArtist.finalize()
unknownArtist.albums.forEach { album ->
unknownArtist.numSongs += album.numSongs
}
artists.add(unknownArtist) artists.add(unknownArtist)
@ -110,6 +107,8 @@ class MusicSorter(
"${unknownAlbums.size} albums were placed into an unknown artist." "${unknownAlbums.size} albums were placed into an unknown artist."
) )
} }
artists.sortByDescending { it.name }
} }
private fun sortArtistsIntoGenres() { private fun sortArtistsIntoGenres() {
@ -150,6 +149,8 @@ class MusicSorter(
"${unknownArtists.size} albums were placed into an unknown genre." "${unknownArtists.size} albums were placed into an unknown genre."
) )
} }
genres.sortByDescending { it.name }
} }
// Correct any empty names [""] with the proper placeholders [Unknown Album] // Correct any empty names [""] with the proper placeholders [Unknown Album]

View file

@ -18,29 +18,20 @@
android:focusable="true" android:focusable="true"
android:padding="@dimen/padding_medium"> android:padding="@dimen/padding_medium">
<ImageView <!-- TODO: Artist images -->
android:id="@+id/artist_image"
android:layout_width="@dimen/cover_size_normal"
android:layout_height="@dimen/cover_size_normal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@tools:sample/backgrounds/scenic"
tools:ignore="ContentDescription" />
<TextView <TextView
android:id="@+id/artist_name" android:id="@+id/artist_name"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_medium" android:ellipsize="end"
android:maxLines="1"
android:text="@{artist.name}" android:text="@{artist.name}"
android:textAppearance="?android:attr/textAppearanceListItem" android:textAppearance="?android:attr/textAppearanceListItem"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:ellipsize="end"
android:maxLines="1"
app:layout_constraintBottom_toTopOf="@+id/album_song_count" app:layout_constraintBottom_toTopOf="@+id/album_song_count"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/artist_image" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" app:layout_constraintVertical_chainStyle="packed"
tools:text="Artist Name" /> tools:text="Artist Name" />
@ -49,13 +40,13 @@
android:id="@+id/album_song_count" android:id="@+id/album_song_count"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_medium"
android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
app:albumSongCount="@{artist}" app:albumSongCount="@{artist}"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/artist_image" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/artist_name" app:layout_constraintTop_toBottomOf="@+id/artist_name"
tools:text="2 Albums, 20 Songs" /> tools:text="2 Albums, 20 Songs" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>

View file

@ -17,7 +17,7 @@
android:elevation="@dimen/elevation_normal" android:elevation="@dimen/elevation_normal"
app:titleTextAppearance="@style/TextAppearance.Toolbar.Bold" app:titleTextAppearance="@style/TextAppearance.Toolbar.Bold"
app:title="@string/title_library_fragment" app:title="@string/title_library_fragment"
tools:titleTextColor="@color/blue"/> tools:titleTextColor="@color/blue" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/library_recycler" android:id="@+id/library_recycler"

View file

@ -18,7 +18,7 @@
app:titleTextAppearance="@style/TextAppearance.Toolbar.Bold" app:titleTextAppearance="@style/TextAppearance.Toolbar.Bold"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:title="@string/title_all_songs" app:title="@string/title_all_songs"
tools:titleTextColor="@color/blue"/> tools:titleTextColor="@color/blue" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/song_recycler" android:id="@+id/song_recycler"

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<fade xmlns:android="http://schemas.android.com/apk/res/android" <fade xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"> android:duration="@android:integer/config_longAnimTime"></fade>
</fade>