2021-07-12 10:14:26 +02:00
|
|
|
package audio.funkwhale.ffa.adapters
|
2019-08-19 16:50:33 +02:00
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.view.View
|
|
|
|
import android.view.ViewGroup
|
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
2021-07-12 10:14:26 +02:00
|
|
|
import audio.funkwhale.ffa.R
|
2021-07-16 10:03:52 +02:00
|
|
|
import audio.funkwhale.ffa.databinding.RowArtistBinding
|
|
|
|
import audio.funkwhale.ffa.fragments.FFAAdapter
|
2021-08-22 09:48:33 +02:00
|
|
|
import audio.funkwhale.ffa.model.Artist
|
2021-07-12 10:14:26 +02:00
|
|
|
import audio.funkwhale.ffa.utils.maybeLoad
|
|
|
|
import audio.funkwhale.ffa.utils.maybeNormalizeUrl
|
2019-08-19 16:50:33 +02:00
|
|
|
import com.squareup.picasso.Picasso
|
|
|
|
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation
|
|
|
|
|
2021-07-16 10:03:52 +02:00
|
|
|
class ArtistsAdapter(
|
|
|
|
private val layoutInflater: LayoutInflater,
|
|
|
|
private val context: Context?,
|
|
|
|
private val listener: OnArtistClickListener
|
|
|
|
) : FFAAdapter<Artist, ArtistsAdapter.ViewHolder>() {
|
|
|
|
|
|
|
|
private lateinit var binding: RowArtistBinding
|
|
|
|
|
2020-07-08 14:09:48 +02:00
|
|
|
private var active: List<Artist> = mutableListOf()
|
|
|
|
|
2019-08-19 16:50:33 +02:00
|
|
|
interface OnArtistClickListener {
|
|
|
|
fun onClick(holder: View?, artist: Artist)
|
|
|
|
}
|
|
|
|
|
2020-07-08 14:09:48 +02:00
|
|
|
init {
|
|
|
|
registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
|
|
|
|
override fun onChanged() {
|
|
|
|
active = data.filter { it.albums?.isNotEmpty() ?: false }
|
|
|
|
|
|
|
|
super.onChanged()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
|
|
|
|
active = data.filter { it.albums?.isNotEmpty() ?: false }
|
|
|
|
|
|
|
|
super.onItemRangeInserted(positionStart, itemCount)
|
|
|
|
}
|
|
|
|
})
|
2021-09-10 09:44:36 +02:00
|
|
|
|
|
|
|
this.stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY
|
2020-07-08 14:09:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun getItemCount() = active.size
|
2019-08-19 16:50:33 +02:00
|
|
|
|
2020-07-08 14:09:48 +02:00
|
|
|
override fun getItemId(position: Int) = active[position].id.toLong()
|
2019-08-19 16:50:33 +02:00
|
|
|
|
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
|
|
|
|
2021-07-16 10:03:52 +02:00
|
|
|
binding = RowArtistBinding.inflate(layoutInflater, parent, false)
|
|
|
|
|
|
|
|
return ViewHolder(binding, listener).also {
|
|
|
|
binding.root.setOnClickListener(it)
|
2019-08-19 16:50:33 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
2020-07-08 14:09:48 +02:00
|
|
|
val artist = active[position]
|
2019-08-19 16:50:33 +02:00
|
|
|
|
|
|
|
artist.albums?.let { albums ->
|
|
|
|
if (albums.isNotEmpty()) {
|
|
|
|
Picasso.get()
|
2020-08-08 14:51:39 +02:00
|
|
|
.maybeLoad(maybeNormalizeUrl(albums[0].cover?.urls?.original))
|
2019-08-19 16:50:33 +02:00
|
|
|
.fit()
|
2020-05-29 21:40:01 +02:00
|
|
|
.transform(RoundedCornersTransformation(8, 0))
|
2019-08-19 16:50:33 +02:00
|
|
|
.into(holder.art)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
holder.name.text = artist.name
|
|
|
|
|
|
|
|
artist.albums?.let {
|
|
|
|
context?.let {
|
2021-07-16 10:03:52 +02:00
|
|
|
holder.albums.text = context.resources.getQuantityString(
|
|
|
|
R.plurals.album_count,
|
|
|
|
artist.albums.size,
|
|
|
|
artist.albums.size
|
|
|
|
)
|
2019-08-19 16:50:33 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-16 10:03:52 +02:00
|
|
|
inner class ViewHolder(binding: RowArtistBinding, private val listener: OnArtistClickListener) :
|
|
|
|
RecyclerView.ViewHolder(binding.root),
|
|
|
|
View.OnClickListener {
|
|
|
|
|
|
|
|
val art = binding.art
|
|
|
|
val name = binding.name
|
|
|
|
val albums = binding.albums
|
2019-08-19 16:50:33 +02:00
|
|
|
|
|
|
|
override fun onClick(view: View?) {
|
2020-07-08 14:09:48 +02:00
|
|
|
listener.onClick(view, active[layoutPosition])
|
2019-08-19 16:50:33 +02:00
|
|
|
}
|
|
|
|
}
|
2021-07-02 13:55:49 +02:00
|
|
|
}
|