Sort artists and global albums by name/title. Sort an artist's albums by release date. Display the release year in the albums view (#54).

This commit is contained in:
Antoine POPINEAU 2020-07-08 13:19:03 +02:00
parent b0d7ff393d
commit 37f4b1da9e
No known key found for this signature in database
GPG Key ID: A78AC64694F84063
7 changed files with 32 additions and 5 deletions

View File

@ -41,12 +41,21 @@ class AlbumsAdapter(val context: Context?, private val listener: OnAlbumClickLis
holder.title.text = album.title holder.title.text = album.title
holder.artist.text = album.artist.name holder.artist.text = album.artist.name
holder.release_date.visibility = View.GONE
album.release_date.split('-').getOrNull(0)?.let { year ->
if (year.isNotEmpty()) {
holder.release_date.visibility = View.VISIBLE
holder.release_date.text = year
}
}
} }
inner class ViewHolder(view: View, private val listener: OnAlbumClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener { inner class ViewHolder(view: View, private val listener: OnAlbumClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
val art = view.art val art = view.art
val title = view.title val title = view.title
val artist = view.artist val artist = view.artist
val release_date = view.release_date
override fun onClick(view: View?) { override fun onClick(view: View?) {
listener.onClick(view, data[layoutPosition]) listener.onClick(view, data[layoutPosition])

View File

@ -79,7 +79,7 @@ class DownloadsAdapter(private val context: Context, private val listener: OnDow
Download.STATE_QUEUED, Download.STATE_DOWNLOADING -> DownloadService.sendSetStopReason(context, PinService::class.java, download.contentId, 1, false) Download.STATE_QUEUED, Download.STATE_DOWNLOADING -> DownloadService.sendSetStopReason(context, PinService::class.java, download.contentId, 1, false)
Download.STATE_FAILED -> { Download.STATE_FAILED -> {
Track(download.id, download.title, Artist(0, download.artist, listOf()), Album(0, Album.Artist(""), "", Covers("")), 0, listOf(Track.Upload(download.contentId, 0, 0))).also { Track(download.id, download.title, Artist(0, download.artist, listOf()), Album(0, Album.Artist(""), "", Covers(""), ""), 0, listOf(Track.Upload(download.contentId, 0, 0))).also {
PinService.download(context, it) PinService.download(context, it)
} }
} }

View File

@ -17,8 +17,8 @@ class AlbumsRepository(override val context: Context?, artistId: Int? = null) :
override val upstream: Upstream<Album> by lazy { override val upstream: Upstream<Album> by lazy {
val url = val url =
if (artistId == null) "/api/v1/albums/?playable=true" if (artistId == null) "/api/v1/albums/?playable=true&ordering=title"
else "/api/v1/albums/?playable=true&artist=$artistId" else "/api/v1/albums/?playable=true&artist=$artistId&ordering=release_date"
HttpUpstream<Album, FunkwhaleResponse<Album>>( HttpUpstream<Album, FunkwhaleResponse<Album>>(
HttpUpstream.Behavior.Progressive, HttpUpstream.Behavior.Progressive,

View File

@ -11,7 +11,7 @@ import java.io.BufferedReader
class ArtistsRepository(override val context: Context?) : Repository<Artist, ArtistsCache>() { class ArtistsRepository(override val context: Context?) : Repository<Artist, ArtistsCache>() {
override val cacheId = "artists" override val cacheId = "artists"
override val upstream = HttpUpstream<Artist, FunkwhaleResponse<Artist>>(HttpUpstream.Behavior.Progressive, "/api/v1/artists/?playable=true", object : TypeToken<ArtistsResponse>() {}.type) override val upstream = HttpUpstream<Artist, FunkwhaleResponse<Artist>>(HttpUpstream.Behavior.Progressive, "/api/v1/artists/?playable=true&ordering=name", object : TypeToken<ArtistsResponse>() {}.type)
override fun cache(data: List<Artist>) = ArtistsCache(data) override fun cache(data: List<Artist>) = ArtistsCache(data)
override fun uncache(reader: BufferedReader) = gsonDeserializerOf(ArtistsCache::class.java).deserialize(reader) override fun uncache(reader: BufferedReader) = gsonDeserializerOf(ArtistsCache::class.java).deserialize(reader)

View File

@ -70,7 +70,8 @@ data class Album(
val id: Int, val id: Int,
val artist: Artist, val artist: Artist,
val title: String, val title: String,
val cover: Covers val cover: Covers,
val release_date: String
) : SearchResult { ) : SearchResult {
data class Artist(val name: String) data class Artist(val name: String)

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="3dp" />
<solid android:color="@color/ripple" />
<padding android:top="4dp" android:left="8dp" android:right="8dp" android:bottom="4dp" />
</shape>

View File

@ -22,6 +22,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
@ -44,4 +45,11 @@
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/release_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:background="@drawable/pill" />
</LinearLayout> </LinearLayout>