funkwhale-app-android/app/src/main/java/org/funkwhale/ffa/adapters/ArtistsAdapter.kt

84 lines
2.6 KiB
Kotlin
Raw Normal View History

2021-07-02 13:55:49 +02:00
package org.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-02 13:55:49 +02:00
import org.funkwhale.ffa.R
import org.funkwhale.ffa.fragments.OtterAdapter
import org.funkwhale.ffa.utils.Artist
import org.funkwhale.ffa.utils.maybeLoad
import org.funkwhale.ffa.utils.maybeNormalizeUrl
2019-08-19 16:50:33 +02:00
import com.squareup.picasso.Picasso
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation
import kotlinx.android.synthetic.main.row_artist.view.*
class ArtistsAdapter(val context: Context?, private val listener: OnArtistClickListener) : OtterAdapter<Artist, ArtistsAdapter.ViewHolder>() {
private var active: List<Artist> = mutableListOf()
2019-08-19 16:50:33 +02:00
interface OnArtistClickListener {
fun onClick(holder: View?, artist: Artist)
}
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)
}
})
}
override fun getItemCount() = active.size
2019-08-19 16:50:33 +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 {
val view = LayoutInflater.from(context).inflate(R.layout.row_artist, parent, false)
return ViewHolder(view, listener).also {
view.setOnClickListener(it)
}
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
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()
.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 {
holder.albums.text = context.resources.getQuantityString(R.plurals.album_count, artist.albums.size, artist.albums.size)
}
}
}
2019-10-21 11:51:32 +02:00
inner class ViewHolder(view: View, private val listener: OnArtistClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
2019-08-19 16:50:33 +02:00
val art = view.art
val name = view.name
val albums = view.albums
override fun onClick(view: View?) {
listener.onClick(view, active[layoutPosition])
2019-08-19 16:50:33 +02:00
}
}
2021-07-02 13:55:49 +02:00
}