kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale-android
				
				
				
			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).
							rodzic
							
								
									b0d7ff393d
								
							
						
					
					
						commit
						37f4b1da9e
					
				|  | @ -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]) | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
|  |  | ||||||
|  | @ -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, | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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> | ||||||
|  | @ -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> | ||||||
		Ładowanie…
	
		Reference in New Issue
	
	 Antoine POPINEAU
						Antoine POPINEAU