diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt index c9d7e42dc..e82aed2d8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt @@ -17,6 +17,7 @@ package code.name.monkey.retromusic.model import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil +import java.text.Collator data class Artist( val id: Long, @@ -60,37 +61,34 @@ data class Artist( get() = albums.flatMap { it.songs } val sortedSongs: List - get() = songs.sortedWith( - when (PreferenceUtil.artistDetailSongSortOrder) { - SortOrder.ArtistSongSortOrder.SONG_A_Z -> { o1, o2 -> - o1.title.compareTo( - o2.title - ) - } - SortOrder.ArtistSongSortOrder.SONG_Z_A -> { o1, o2 -> - o2.title.compareTo( - o1.title - ) - } - SortOrder.ArtistSongSortOrder.SONG_ALBUM -> { o1, o2 -> - o1.albumName.compareTo( - o2.albumName - ) - } - SortOrder.ArtistSongSortOrder.SONG_YEAR -> { o1, o2 -> - o2.year.compareTo( - o1.year - ) - } - SortOrder.ArtistSongSortOrder.SONG_DURATION -> { o1, o2 -> - o1.duration.compareTo( - o2.duration - ) - } - else -> { - throw IllegalArgumentException("invalid ${PreferenceUtil.artistDetailSongSortOrder}") - } - }) + get() { + val collator = Collator.getInstance() + return songs.sortedWith( + when (PreferenceUtil.artistDetailSongSortOrder) { + SortOrder.ArtistSongSortOrder.SONG_A_Z -> { o1, o2 -> + collator.compare(o1.title, o2.title) + } + SortOrder.ArtistSongSortOrder.SONG_Z_A -> { o1, o2 -> + collator.compare(o2.title, o1.title) + } + SortOrder.ArtistSongSortOrder.SONG_ALBUM -> { o1, o2 -> + collator.compare(o1.albumName, o2.albumName) + } + SortOrder.ArtistSongSortOrder.SONG_YEAR -> { o1, o2 -> + o2.year.compareTo( + o1.year + ) + } + SortOrder.ArtistSongSortOrder.SONG_DURATION -> { o1, o2 -> + o1.duration.compareTo( + o2.duration + ) + } + else -> { + throw IllegalArgumentException("invalid ${PreferenceUtil.artistDetailSongSortOrder}") + } + }) + } fun safeGetFirstAlbum(): Album { return albums.firstOrNull() ?: Album.empty diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt index 9ac1d67b6..0456f93cc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt @@ -20,6 +20,7 @@ import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.util.PreferenceUtil +import java.text.Collator interface ArtistRepository { fun artists(): List @@ -103,7 +104,8 @@ class RealArtistRepository( getSongLoaderSortOrder() ) ) - return splitIntoArtists(albumRepository.splitIntoAlbums(songs)) + val artists = splitIntoArtists(albumRepository.splitIntoAlbums(songs)) + return sortArtists(artists) } override fun albumArtists(): List { @@ -115,7 +117,8 @@ class RealArtistRepository( if (PreferenceUtil.artistSortOrder == SortOrder.ArtistSortOrder.ARTIST_A_Z) "" else " DESC" ) ) - return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) + val artists = splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) + return sortArtists(artists) } override fun albumArtists(query: String): List { @@ -126,7 +129,8 @@ class RealArtistRepository( getSongLoaderSortOrder() ) ) - return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) + val artists = splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) + return sortArtists(artists) } override fun artists(query: String): List { @@ -137,7 +141,8 @@ class RealArtistRepository( getSongLoaderSortOrder() ) ) - return splitIntoArtists(albumRepository.splitIntoAlbums(songs)) + val artists = splitIntoArtists(albumRepository.splitIntoAlbums(songs)) + return sortArtists(artists) } @@ -165,4 +170,18 @@ class RealArtistRepository( return albums.groupBy { it.artistId } .map { Artist(it.key, it.value) } } + + private fun sortArtists(artists: List): List { + return when (PreferenceUtil.artistSortOrder) { + SortOrder.ArtistSortOrder.ARTIST_A_Z -> { + val collator = Collator.getInstance() + artists.sortedWith{ a1, a2 -> collator.compare(a1.name, a2.name) } + } + SortOrder.ArtistSortOrder.ARTIST_Z_A -> { + val collator = Collator.getInstance() + artists.sortedWith{ a1, a2 -> collator.compare(a2.name, a1.name) } + } + else -> artists + } + } } \ No newline at end of file