funkwhale-app-android/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistsAdapter.kt

106 lines
3.3 KiB
Kotlin
Raw Normal View History

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.core.content.ContextCompat
2019-08-19 16:50:33 +02:00
import androidx.recyclerview.widget.RecyclerView
import audio.funkwhale.ffa.R
2021-07-16 10:03:52 +02:00
import audio.funkwhale.ffa.databinding.RowPlaylistBinding
import audio.funkwhale.ffa.fragments.FFAAdapter
import audio.funkwhale.ffa.model.Playlist
import audio.funkwhale.ffa.utils.CoverArt
import audio.funkwhale.ffa.utils.toDurationString
2020-06-14 00:42:45 +02:00
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation
2019-08-19 16:50:33 +02:00
2021-07-16 10:03:52 +02:00
class PlaylistsAdapter(
private val layoutInflater: LayoutInflater,
private val context: Context?,
private val listener: OnPlaylistClickListener
) : FFAAdapter<Playlist, PlaylistsAdapter.ViewHolder>() {
init {
this.stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY
}
2019-08-19 16:50:33 +02:00
interface OnPlaylistClickListener {
fun onClick(holder: View?, playlist: Playlist)
}
2021-07-16 10:03:52 +02:00
private lateinit var binding: RowPlaylistBinding
2019-08-19 16:50:33 +02:00
override fun getItemCount() = data.size
override fun getItemId(position: Int) = data[position].id.toLong()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
2021-07-16 10:03:52 +02:00
binding = RowPlaylistBinding.inflate(layoutInflater, parent, false)
2019-08-19 16:50:33 +02:00
2021-07-16 10:03:52 +02:00
return ViewHolder(binding, listener).also {
binding.root.setOnClickListener(it)
2019-08-19 16:50:33 +02:00
}
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val playlist = data[position]
holder.name.text = playlist.name
2021-07-16 10:03:52 +02:00
holder.summary.text = context?.resources?.getQuantityString(
R.plurals.playlist_description,
playlist.tracks_count,
playlist.tracks_count,
toDurationString(playlist.duration.toLong())
) ?: ""
2019-08-19 16:50:33 +02:00
context?.let {
ContextCompat.getDrawable(context, R.drawable.cover).let {
2021-07-16 10:03:52 +02:00
holder.coverTopLeft.setImageDrawable(it)
holder.covertTopRight.setImageDrawable(it)
holder.coverBottomLeft.setImageDrawable(it)
holder.coverBottomRight.setImageDrawable(it)
}
}
2019-08-19 16:50:33 +02:00
playlist.album_covers.shuffled().take(4).forEachIndexed { index, url ->
val imageView = when (index) {
2021-07-16 10:03:52 +02:00
0 -> holder.coverTopLeft
1 -> holder.covertTopRight
2 -> holder.coverBottomLeft
3 -> holder.coverBottomRight
else -> holder.coverTopLeft
2019-08-19 16:50:33 +02:00
}
2020-06-14 00:42:45 +02:00
val corner = when (index) {
0 -> RoundedCornersTransformation.CornerType.TOP_LEFT
1 -> RoundedCornersTransformation.CornerType.TOP_RIGHT
2 -> RoundedCornersTransformation.CornerType.BOTTOM_LEFT
3 -> RoundedCornersTransformation.CornerType.BOTTOM_RIGHT
else -> RoundedCornersTransformation.CornerType.TOP_LEFT
}
CoverArt.requestCreator(url)
2020-06-14 00:42:45 +02:00
.transform(RoundedCornersTransformation(32, 0, corner))
2019-08-19 16:50:33 +02:00
.into(imageView)
}
}
2021-07-16 10:03:52 +02:00
inner class ViewHolder(
binding: RowPlaylistBinding,
private val listener: OnPlaylistClickListener
) :
RecyclerView.ViewHolder(binding.root), View.OnClickListener {
val name = binding.name
val summary = binding.summary
2019-08-19 16:50:33 +02:00
2021-07-16 10:03:52 +02:00
val coverTopLeft = binding.coverTopLeft
val covertTopRight = binding.coverTopRight
val coverBottomLeft = binding.coverBottomLeft
val coverBottomRight = binding.coverBottomRight
2019-08-19 16:50:33 +02:00
override fun onClick(view: View?) {
listener.onClick(view, data[layoutPosition])
}
}
2021-07-02 13:55:49 +02:00
}