2022-04-10 17:39:30 +02:00
package org.mosad.teapod.util.adapter
import android.view.LayoutInflater
import android.view.ViewGroup
2022-04-10 20:15:13 +02:00
import androidx.core.view.isVisible
2022-04-10 17:39:30 +02:00
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
2022-12-04 14:48:25 +01:00
import org.mosad.teapod.R
2022-04-10 17:39:30 +02:00
import org.mosad.teapod.databinding.ItemMediaBinding
import org.mosad.teapod.util.ItemMedia
2022-12-04 13:51:29 +01:00
class MediaItemListAdapter ( private val onClickListener : OnClickListener , private val itemOffset : Int = 0 ) : ListAdapter < ItemMedia , MediaItemListAdapter . MediaViewHolder > ( DiffCallback ) {
2022-04-10 17:39:30 +02:00
override fun onCreateViewHolder ( parent : ViewGroup , viewType : Int ) : MediaViewHolder {
2022-12-04 13:51:29 +01:00
val binding = ItemMediaBinding . inflate (
LayoutInflater . from ( parent . context ) ,
parent ,
false
2022-04-10 17:39:30 +02:00
)
2022-12-04 13:51:29 +01:00
binding . root . layoutParams . apply {
2022-12-04 14:48:25 +01:00
width = ( parent . measuredWidth / parent . context . resources . getInteger ( R . integer . item _media _columns ) ) - itemOffset
2022-12-04 13:51:29 +01:00
}
return MediaViewHolder ( binding )
2022-04-10 17:39:30 +02:00
}
override fun onBindViewHolder ( holder : MediaViewHolder , position : Int ) {
val item = getItem ( position )
holder . binding . root . setOnClickListener {
onClickListener . onClick ( item )
}
holder . bind ( item )
}
inner class MediaViewHolder ( val binding : ItemMediaBinding ) :
RecyclerView . ViewHolder ( binding . root ) {
fun bind ( item : ItemMedia ) {
binding . textTitle . text = item . title
2022-04-10 20:15:13 +02:00
2022-12-03 00:05:57 +01:00
Glide . with ( binding . root . context )
2022-04-10 20:15:13 +02:00
. load ( item . posterUrl )
. into ( binding . imagePoster )
binding . imageEpisodePlay . isVisible = false
binding . progressPlayhead . isVisible = false
2022-04-10 17:39:30 +02:00
}
}
companion object DiffCallback : DiffUtil . ItemCallback < ItemMedia > ( ) {
override fun areItemsTheSame ( oldItem : ItemMedia , newItem : ItemMedia ) : Boolean {
return oldItem . id == newItem . id
}
override fun areContentsTheSame ( oldItem : ItemMedia , newItem : ItemMedia ) : Boolean {
return oldItem == newItem
}
}
class OnClickListener ( val clickListener : ( item : ItemMedia ) -> Unit ) {
fun onClick ( item : ItemMedia ) = clickListener ( item )
}
}