From 76be5a784a0433f02a7d9c04d94a57d781797cb0 Mon Sep 17 00:00:00 2001 From: "Huang, Zhaoquan" Date: Wed, 16 Mar 2022 11:52:41 +0800 Subject: [PATCH 1/4] Sort album repository in a localized way --- .../fragments/albums/AlbumDetailsFragment.kt | 15 ++++---- .../retromusic/repository/AlbumRepository.kt | 35 +++++++++++++------ 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt index 8698abc84..27d603d02 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt @@ -80,6 +80,7 @@ import kotlinx.coroutines.withContext import org.koin.android.ext.android.get import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.core.parameter.parametersOf +import java.text.Collator class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_details), IAlbumClickListener, ICabHolder { @@ -437,15 +438,13 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det o2.trackNumber ) } - SONG_A_Z -> album.songs.sortedWith { o1, o2 -> - o1.title.compareTo( - o2.title - ) + SONG_A_Z -> { + val collator = Collator.getInstance() + album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) } } - SONG_Z_A -> album.songs.sortedWith { o1, o2 -> - o2.title.compareTo( - o1.title - ) + SONG_Z_A -> { + val collator = Collator.getInstance() + album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) } } SONG_DURATION -> album.songs.sortedWith { o1, o2 -> o1.duration.compareTo( diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt index ce0232069..52396bcea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt @@ -19,6 +19,7 @@ import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil +import java.text.Collator /** @@ -65,8 +66,7 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) : ) val songs = songRepository.songs(cursor) val album = Album(albumId, songs) - sortAlbumSongs(album) - return album + return sortAlbumSongs(album) } // We don't need sorted list of songs (with sortAlbumSongs()) @@ -74,11 +74,22 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) : fun splitIntoAlbums( songs: List ): List { - return if (PreferenceUtil.albumSortOrder != SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS) songs.groupBy { it.albumId } - .map { Album(it.key, it.value) } - // We can't sort Album with the help of MediaStore so a hack - else songs.groupBy { it.albumId }.map { Album(it.key, it.value) } - .sortedByDescending { it.songCount } + val grouped = songs.groupBy { it.albumId }.map { Album(it.key, it.value) } + return when (PreferenceUtil.albumSortOrder) { + SortOrder.AlbumSortOrder.ALBUM_A_Z -> { + val collator = Collator.getInstance() + grouped.sortedWith { a1, a2 -> collator.compare(a1.title, a2.title) } + } + SortOrder.AlbumSortOrder.ALBUM_Z_A -> { + val collator = Collator.getInstance() + grouped.sortedWith { a1, a2 -> collator.compare(a2.title, a1.title) } + } + SortOrder.AlbumSortOrder.ALBUM_ARTIST -> { + val collator = Collator.getInstance() + grouped.sortedWith { a1, a2 -> collator.compare(a1.albumArtist, a2.albumArtist) } + } + else -> grouped + } } private fun sortAlbumSongs(album: Album): Album { @@ -86,11 +97,13 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) : SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 -> o1.trackNumber.compareTo(o2.trackNumber) } - SortOrder.AlbumSongSortOrder.SONG_A_Z -> album.songs.sortedWith { o1, o2 -> - o1.title.compareTo(o2.title) + SortOrder.AlbumSongSortOrder.SONG_A_Z -> { + val collator = Collator.getInstance() + album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) } } - SortOrder.AlbumSongSortOrder.SONG_Z_A -> album.songs.sortedWith { o1, o2 -> - o2.title.compareTo(o1.title) + SortOrder.AlbumSongSortOrder.SONG_Z_A -> { + val collator = Collator.getInstance() + album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) } } SortOrder.AlbumSongSortOrder.SONG_DURATION -> album.songs.sortedWith { o1, o2 -> o1.duration.compareTo(o2.duration) From 6b51eb84fa8962f59db2dc547d28b810b1cf50af Mon Sep 17 00:00:00 2001 From: "Huang, Zhaoquan" Date: Wed, 16 Mar 2022 12:21:50 +0800 Subject: [PATCH 2/4] Sort song repository in a localized way --- .../retromusic/repository/SongRepository.kt | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt index bfbfe62ab..7bf064e5c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt @@ -28,9 +28,11 @@ import code.name.monkey.retromusic.extensions.getInt import code.name.monkey.retromusic.extensions.getLong import code.name.monkey.retromusic.extensions.getString import code.name.monkey.retromusic.extensions.getStringOrNull +import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.providers.BlacklistStore import code.name.monkey.retromusic.util.PreferenceUtil +import java.text.Collator /** * Created by hemanths on 10/08/17. @@ -66,7 +68,33 @@ class RealSongRepository(private val context: Context) : SongRepository { } while (cursor.moveToNext()) } cursor?.close() - return songs + return when (PreferenceUtil.songSortOrder) { + SortOrder.SongSortOrder.SONG_A_Z -> { + val collator = Collator.getInstance() + songs.sortedWith{ s1, s2 -> collator.compare(s1.title, s2.title) } + } + SortOrder.SongSortOrder.SONG_Z_A -> { + val collator = Collator.getInstance() + songs.sortedWith{ s1, s2 -> collator.compare(s2.title, s1.title) } + } + SortOrder.SongSortOrder.SONG_ALBUM -> { + val collator = Collator.getInstance() + songs.sortedWith{ s1, s2 -> collator.compare(s1.albumName, s2.albumName) } + } + SortOrder.SongSortOrder.SONG_ALBUM_ARTIST -> { + val collator = Collator.getInstance() + songs.sortedWith{ s1, s2 -> collator.compare(s1.albumArtist, s2.albumArtist) } + } + SortOrder.SongSortOrder.SONG_ARTIST -> { + val collator = Collator.getInstance() + songs.sortedWith{ s1, s2 -> collator.compare(s1.artistName, s2.artistName) } + } + SortOrder.SongSortOrder.COMPOSER -> { + val collator = Collator.getInstance() + songs.sortedWith{ s1, s2 -> collator.compare(s1.composer, s2.composer) } + } + else -> songs + } } override fun song(cursor: Cursor?): Song { From 41039bcdd5650bab1ff0a9339b74af4b456c7d3b Mon Sep 17 00:00:00 2001 From: "Huang, Zhaoquan" Date: Wed, 16 Mar 2022 13:43:54 +0800 Subject: [PATCH 3/4] Sort artist repository in a localized way --- .../name/monkey/retromusic/model/Artist.kt | 60 +++++++++---------- .../retromusic/repository/ArtistRepository.kt | 27 +++++++-- 2 files changed, 52 insertions(+), 35 deletions(-) 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 From 21a45163a7bbd04fd13afb7b4bd6cead8e9af8e5 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 17 Mar 2022 22:11:40 +0530 Subject: [PATCH 4/4] Code Cleanup --- .../monkey/retromusic/repository/AlbumRepository.kt | 10 +++++----- .../monkey/retromusic/repository/ArtistRepository.kt | 7 +++---- .../monkey/retromusic/repository/SongRepository.kt | 7 +------ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt index 52396bcea..52e62db27 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt @@ -75,34 +75,34 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) : songs: List ): List { val grouped = songs.groupBy { it.albumId }.map { Album(it.key, it.value) } + val collator = Collator.getInstance() return when (PreferenceUtil.albumSortOrder) { SortOrder.AlbumSortOrder.ALBUM_A_Z -> { - val collator = Collator.getInstance() grouped.sortedWith { a1, a2 -> collator.compare(a1.title, a2.title) } } SortOrder.AlbumSortOrder.ALBUM_Z_A -> { - val collator = Collator.getInstance() grouped.sortedWith { a1, a2 -> collator.compare(a2.title, a1.title) } } SortOrder.AlbumSortOrder.ALBUM_ARTIST -> { - val collator = Collator.getInstance() grouped.sortedWith { a1, a2 -> collator.compare(a1.albumArtist, a2.albumArtist) } } + SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS -> { + grouped.sortedByDescending { it.songCount } + } else -> grouped } } private fun sortAlbumSongs(album: Album): Album { + val collator = Collator.getInstance() val songs = when (PreferenceUtil.albumDetailSongSortOrder) { SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 -> o1.trackNumber.compareTo(o2.trackNumber) } SortOrder.AlbumSongSortOrder.SONG_A_Z -> { - val collator = Collator.getInstance() album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) } } SortOrder.AlbumSongSortOrder.SONG_Z_A -> { - val collator = Collator.getInstance() album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) } } SortOrder.AlbumSongSortOrder.SONG_DURATION -> album.songs.sortedWith { o1, o2 -> 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 0456f93cc..8b11976ff 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 @@ -172,14 +172,13 @@ class RealArtistRepository( } private fun sortArtists(artists: List): List { + val collator = Collator.getInstance() return when (PreferenceUtil.artistSortOrder) { SortOrder.ArtistSortOrder.ARTIST_A_Z -> { - val collator = Collator.getInstance() - artists.sortedWith{ a1, a2 -> collator.compare(a1.name, a2.name) } + 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) } + artists.sortedWith { a1, a2 -> collator.compare(a2.name, a1.name) } } else -> artists } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt index 7bf064e5c..540cb51fd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt @@ -68,29 +68,24 @@ class RealSongRepository(private val context: Context) : SongRepository { } while (cursor.moveToNext()) } cursor?.close() + val collator = Collator.getInstance() return when (PreferenceUtil.songSortOrder) { SortOrder.SongSortOrder.SONG_A_Z -> { - val collator = Collator.getInstance() songs.sortedWith{ s1, s2 -> collator.compare(s1.title, s2.title) } } SortOrder.SongSortOrder.SONG_Z_A -> { - val collator = Collator.getInstance() songs.sortedWith{ s1, s2 -> collator.compare(s2.title, s1.title) } } SortOrder.SongSortOrder.SONG_ALBUM -> { - val collator = Collator.getInstance() songs.sortedWith{ s1, s2 -> collator.compare(s1.albumName, s2.albumName) } } SortOrder.SongSortOrder.SONG_ALBUM_ARTIST -> { - val collator = Collator.getInstance() songs.sortedWith{ s1, s2 -> collator.compare(s1.albumArtist, s2.albumArtist) } } SortOrder.SongSortOrder.SONG_ARTIST -> { - val collator = Collator.getInstance() songs.sortedWith{ s1, s2 -> collator.compare(s1.artistName, s2.artistName) } } SortOrder.SongSortOrder.COMPOSER -> { - val collator = Collator.getInstance() songs.sortedWith{ s1, s2 -> collator.compare(s1.composer, s2.composer) } } else -> songs