commit
d8d1cff659
5 changed files with 106 additions and 55 deletions
|
@ -80,6 +80,7 @@ import kotlinx.coroutines.withContext
|
||||||
import org.koin.android.ext.android.get
|
import org.koin.android.ext.android.get
|
||||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||||
import org.koin.core.parameter.parametersOf
|
import org.koin.core.parameter.parametersOf
|
||||||
|
import java.text.Collator
|
||||||
|
|
||||||
class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_details),
|
class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_details),
|
||||||
IAlbumClickListener, ICabHolder {
|
IAlbumClickListener, ICabHolder {
|
||||||
|
@ -437,15 +438,13 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
|
||||||
o2.trackNumber
|
o2.trackNumber
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
SONG_A_Z -> album.songs.sortedWith { o1, o2 ->
|
SONG_A_Z -> {
|
||||||
o1.title.compareTo(
|
val collator = Collator.getInstance()
|
||||||
o2.title
|
album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) }
|
||||||
)
|
|
||||||
}
|
}
|
||||||
SONG_Z_A -> album.songs.sortedWith { o1, o2 ->
|
SONG_Z_A -> {
|
||||||
o2.title.compareTo(
|
val collator = Collator.getInstance()
|
||||||
o1.title
|
album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) }
|
||||||
)
|
|
||||||
}
|
}
|
||||||
SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
|
SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
|
||||||
o1.duration.compareTo(
|
o1.duration.compareTo(
|
||||||
|
|
|
@ -17,6 +17,7 @@ package code.name.monkey.retromusic.model
|
||||||
import code.name.monkey.retromusic.helper.SortOrder
|
import code.name.monkey.retromusic.helper.SortOrder
|
||||||
import code.name.monkey.retromusic.util.MusicUtil
|
import code.name.monkey.retromusic.util.MusicUtil
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
|
import java.text.Collator
|
||||||
|
|
||||||
data class Artist(
|
data class Artist(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
|
@ -60,37 +61,34 @@ data class Artist(
|
||||||
get() = albums.flatMap { it.songs }
|
get() = albums.flatMap { it.songs }
|
||||||
|
|
||||||
val sortedSongs: List<Song>
|
val sortedSongs: List<Song>
|
||||||
get() = songs.sortedWith(
|
get() {
|
||||||
when (PreferenceUtil.artistDetailSongSortOrder) {
|
val collator = Collator.getInstance()
|
||||||
SortOrder.ArtistSongSortOrder.SONG_A_Z -> { o1, o2 ->
|
return songs.sortedWith(
|
||||||
o1.title.compareTo(
|
when (PreferenceUtil.artistDetailSongSortOrder) {
|
||||||
o2.title
|
SortOrder.ArtistSongSortOrder.SONG_A_Z -> { o1, o2 ->
|
||||||
)
|
collator.compare(o1.title, o2.title)
|
||||||
}
|
}
|
||||||
SortOrder.ArtistSongSortOrder.SONG_Z_A -> { o1, o2 ->
|
SortOrder.ArtistSongSortOrder.SONG_Z_A -> { o1, o2 ->
|
||||||
o2.title.compareTo(
|
collator.compare(o2.title, o1.title)
|
||||||
o1.title
|
}
|
||||||
)
|
SortOrder.ArtistSongSortOrder.SONG_ALBUM -> { o1, o2 ->
|
||||||
}
|
collator.compare(o1.albumName, o2.albumName)
|
||||||
SortOrder.ArtistSongSortOrder.SONG_ALBUM -> { o1, o2 ->
|
}
|
||||||
o1.albumName.compareTo(
|
SortOrder.ArtistSongSortOrder.SONG_YEAR -> { o1, o2 ->
|
||||||
o2.albumName
|
o2.year.compareTo(
|
||||||
)
|
o1.year
|
||||||
}
|
)
|
||||||
SortOrder.ArtistSongSortOrder.SONG_YEAR -> { o1, o2 ->
|
}
|
||||||
o2.year.compareTo(
|
SortOrder.ArtistSongSortOrder.SONG_DURATION -> { o1, o2 ->
|
||||||
o1.year
|
o1.duration.compareTo(
|
||||||
)
|
o2.duration
|
||||||
}
|
)
|
||||||
SortOrder.ArtistSongSortOrder.SONG_DURATION -> { o1, o2 ->
|
}
|
||||||
o1.duration.compareTo(
|
else -> {
|
||||||
o2.duration
|
throw IllegalArgumentException("invalid ${PreferenceUtil.artistDetailSongSortOrder}")
|
||||||
)
|
}
|
||||||
}
|
})
|
||||||
else -> {
|
}
|
||||||
throw IllegalArgumentException("invalid ${PreferenceUtil.artistDetailSongSortOrder}")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
fun safeGetFirstAlbum(): Album {
|
fun safeGetFirstAlbum(): Album {
|
||||||
return albums.firstOrNull() ?: Album.empty
|
return albums.firstOrNull() ?: Album.empty
|
||||||
|
|
|
@ -19,6 +19,7 @@ import code.name.monkey.retromusic.helper.SortOrder
|
||||||
import code.name.monkey.retromusic.model.Album
|
import code.name.monkey.retromusic.model.Album
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
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 songs = songRepository.songs(cursor)
|
||||||
val album = Album(albumId, songs)
|
val album = Album(albumId, songs)
|
||||||
sortAlbumSongs(album)
|
return sortAlbumSongs(album)
|
||||||
return album
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't need sorted list of songs (with sortAlbumSongs())
|
// We don't need sorted list of songs (with sortAlbumSongs())
|
||||||
|
@ -74,23 +74,36 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) :
|
||||||
fun splitIntoAlbums(
|
fun splitIntoAlbums(
|
||||||
songs: List<Song>
|
songs: List<Song>
|
||||||
): List<Album> {
|
): List<Album> {
|
||||||
return if (PreferenceUtil.albumSortOrder != SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS) songs.groupBy { it.albumId }
|
val grouped = songs.groupBy { it.albumId }.map { Album(it.key, it.value) }
|
||||||
.map { Album(it.key, it.value) }
|
val collator = Collator.getInstance()
|
||||||
// We can't sort Album with the help of MediaStore so a hack
|
return when (PreferenceUtil.albumSortOrder) {
|
||||||
else songs.groupBy { it.albumId }.map { Album(it.key, it.value) }
|
SortOrder.AlbumSortOrder.ALBUM_A_Z -> {
|
||||||
.sortedByDescending { it.songCount }
|
grouped.sortedWith { a1, a2 -> collator.compare(a1.title, a2.title) }
|
||||||
|
}
|
||||||
|
SortOrder.AlbumSortOrder.ALBUM_Z_A -> {
|
||||||
|
grouped.sortedWith { a1, a2 -> collator.compare(a2.title, a1.title) }
|
||||||
|
}
|
||||||
|
SortOrder.AlbumSortOrder.ALBUM_ARTIST -> {
|
||||||
|
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 {
|
private fun sortAlbumSongs(album: Album): Album {
|
||||||
|
val collator = Collator.getInstance()
|
||||||
val songs = when (PreferenceUtil.albumDetailSongSortOrder) {
|
val songs = when (PreferenceUtil.albumDetailSongSortOrder) {
|
||||||
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 ->
|
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 ->
|
||||||
o1.trackNumber.compareTo(o2.trackNumber)
|
o1.trackNumber.compareTo(o2.trackNumber)
|
||||||
}
|
}
|
||||||
SortOrder.AlbumSongSortOrder.SONG_A_Z -> album.songs.sortedWith { o1, o2 ->
|
SortOrder.AlbumSongSortOrder.SONG_A_Z -> {
|
||||||
o1.title.compareTo(o2.title)
|
album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) }
|
||||||
}
|
}
|
||||||
SortOrder.AlbumSongSortOrder.SONG_Z_A -> album.songs.sortedWith { o1, o2 ->
|
SortOrder.AlbumSongSortOrder.SONG_Z_A -> {
|
||||||
o2.title.compareTo(o1.title)
|
album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) }
|
||||||
}
|
}
|
||||||
SortOrder.AlbumSongSortOrder.SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
|
SortOrder.AlbumSongSortOrder.SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
|
||||||
o1.duration.compareTo(o2.duration)
|
o1.duration.compareTo(o2.duration)
|
||||||
|
|
|
@ -20,6 +20,7 @@ import code.name.monkey.retromusic.helper.SortOrder
|
||||||
import code.name.monkey.retromusic.model.Album
|
import code.name.monkey.retromusic.model.Album
|
||||||
import code.name.monkey.retromusic.model.Artist
|
import code.name.monkey.retromusic.model.Artist
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
|
import java.text.Collator
|
||||||
|
|
||||||
interface ArtistRepository {
|
interface ArtistRepository {
|
||||||
fun artists(): List<Artist>
|
fun artists(): List<Artist>
|
||||||
|
@ -103,7 +104,8 @@ class RealArtistRepository(
|
||||||
getSongLoaderSortOrder()
|
getSongLoaderSortOrder()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return splitIntoArtists(albumRepository.splitIntoAlbums(songs))
|
val artists = splitIntoArtists(albumRepository.splitIntoAlbums(songs))
|
||||||
|
return sortArtists(artists)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun albumArtists(): List<Artist> {
|
override fun albumArtists(): List<Artist> {
|
||||||
|
@ -115,7 +117,8 @@ class RealArtistRepository(
|
||||||
if (PreferenceUtil.artistSortOrder == SortOrder.ArtistSortOrder.ARTIST_A_Z) "" else " DESC"
|
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<Artist> {
|
override fun albumArtists(query: String): List<Artist> {
|
||||||
|
@ -126,7 +129,8 @@ class RealArtistRepository(
|
||||||
getSongLoaderSortOrder()
|
getSongLoaderSortOrder()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
|
val artists = splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
|
||||||
|
return sortArtists(artists)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun artists(query: String): List<Artist> {
|
override fun artists(query: String): List<Artist> {
|
||||||
|
@ -137,7 +141,8 @@ class RealArtistRepository(
|
||||||
getSongLoaderSortOrder()
|
getSongLoaderSortOrder()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return splitIntoArtists(albumRepository.splitIntoAlbums(songs))
|
val artists = splitIntoArtists(albumRepository.splitIntoAlbums(songs))
|
||||||
|
return sortArtists(artists)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -165,4 +170,17 @@ class RealArtistRepository(
|
||||||
return albums.groupBy { it.artistId }
|
return albums.groupBy { it.artistId }
|
||||||
.map { Artist(it.key, it.value) }
|
.map { Artist(it.key, it.value) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun sortArtists(artists: List<Artist>): List<Artist> {
|
||||||
|
val collator = Collator.getInstance()
|
||||||
|
return when (PreferenceUtil.artistSortOrder) {
|
||||||
|
SortOrder.ArtistSortOrder.ARTIST_A_Z -> {
|
||||||
|
artists.sortedWith { a1, a2 -> collator.compare(a1.name, a2.name) }
|
||||||
|
}
|
||||||
|
SortOrder.ArtistSortOrder.ARTIST_Z_A -> {
|
||||||
|
artists.sortedWith { a1, a2 -> collator.compare(a2.name, a1.name) }
|
||||||
|
}
|
||||||
|
else -> artists
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -28,9 +28,11 @@ import code.name.monkey.retromusic.extensions.getInt
|
||||||
import code.name.monkey.retromusic.extensions.getLong
|
import code.name.monkey.retromusic.extensions.getLong
|
||||||
import code.name.monkey.retromusic.extensions.getString
|
import code.name.monkey.retromusic.extensions.getString
|
||||||
import code.name.monkey.retromusic.extensions.getStringOrNull
|
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.model.Song
|
||||||
import code.name.monkey.retromusic.providers.BlacklistStore
|
import code.name.monkey.retromusic.providers.BlacklistStore
|
||||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
|
import java.text.Collator
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hemanths on 10/08/17.
|
* Created by hemanths on 10/08/17.
|
||||||
|
@ -66,7 +68,28 @@ class RealSongRepository(private val context: Context) : SongRepository {
|
||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
return songs
|
val collator = Collator.getInstance()
|
||||||
|
return when (PreferenceUtil.songSortOrder) {
|
||||||
|
SortOrder.SongSortOrder.SONG_A_Z -> {
|
||||||
|
songs.sortedWith{ s1, s2 -> collator.compare(s1.title, s2.title) }
|
||||||
|
}
|
||||||
|
SortOrder.SongSortOrder.SONG_Z_A -> {
|
||||||
|
songs.sortedWith{ s1, s2 -> collator.compare(s2.title, s1.title) }
|
||||||
|
}
|
||||||
|
SortOrder.SongSortOrder.SONG_ALBUM -> {
|
||||||
|
songs.sortedWith{ s1, s2 -> collator.compare(s1.albumName, s2.albumName) }
|
||||||
|
}
|
||||||
|
SortOrder.SongSortOrder.SONG_ALBUM_ARTIST -> {
|
||||||
|
songs.sortedWith{ s1, s2 -> collator.compare(s1.albumArtist, s2.albumArtist) }
|
||||||
|
}
|
||||||
|
SortOrder.SongSortOrder.SONG_ARTIST -> {
|
||||||
|
songs.sortedWith{ s1, s2 -> collator.compare(s1.artistName, s2.artistName) }
|
||||||
|
}
|
||||||
|
SortOrder.SongSortOrder.COMPOSER -> {
|
||||||
|
songs.sortedWith{ s1, s2 -> collator.compare(s1.composer, s2.composer) }
|
||||||
|
}
|
||||||
|
else -> songs
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun song(cursor: Cursor?): Song {
|
override fun song(cursor: Cursor?): Song {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue