2020-12-14 23:46:55 +01:00
package org.mosad.teapod.util.adapter
import android.view.LayoutInflater
2020-12-28 20:17:11 +01:00
import android.view.View
2020-12-14 23:46:55 +01:00
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import jp.wasabeef.glide.transformations.RoundedCornersTransformation
import org.mosad.teapod.R
import org.mosad.teapod.databinding.ItemEpisodePlayerBinding
2021-12-26 20:22:00 +01:00
import org.mosad.teapod.parser.crunchyroll.Episodes
2021-09-05 00:08:03 +02:00
import org.mosad.teapod.util.tmdb.TMDBTVEpisode
2020-12-14 23:46:55 +01:00
2022-03-20 14:29:32 +01:00
class PlayerEpisodeItemAdapter ( private val episodes : Episodes ) : RecyclerView . Adapter < PlayerEpisodeItemAdapter . EpisodeViewHolder > ( ) {
2020-12-14 23:46:55 +01:00
2021-12-26 20:22:00 +01:00
var onImageClick : ( ( seasonId : String , episodeId : String ) -> Unit ) ? = null
2020-12-28 20:17:11 +01:00
var currentSelected : Int = - 1 // -1, since position should never be < 0
2020-12-14 23:46:55 +01:00
override fun onCreateViewHolder ( parent : ViewGroup , viewType : Int ) : EpisodeViewHolder {
return EpisodeViewHolder ( ItemEpisodePlayerBinding . inflate ( LayoutInflater . from ( parent . context ) , parent , false ) )
}
override fun onBindViewHolder ( holder : EpisodeViewHolder , position : Int ) {
val context = holder . binding . root . context
2021-12-26 20:22:00 +01:00
val ep = episodes . items [ position ]
2020-12-14 23:46:55 +01:00
2021-12-29 20:51:53 +01:00
val titleText = if ( ep . episodeNumber != null ) {
// for tv shows add ep prefix and episode number
if ( ep . isDubbed ) {
context . getString ( R . string . component _episode _title , ep . episode , ep . title )
} else {
context . getString ( R . string . component _episode _title _sub , ep . episode , ep . title )
}
2020-12-26 14:39:35 +01:00
} else {
2021-12-29 20:51:53 +01:00
ep . title
2020-12-14 23:46:55 +01:00
}
holder . binding . textEpisodeTitle2 . text = titleText
2021-12-26 20:22:00 +01:00
holder . binding . textEpisodeDesc2 . text = if ( ep . description . isNotEmpty ( ) ) {
ep . description
2021-09-05 00:08:03 +02:00
} else {
" "
}
2020-12-14 23:46:55 +01:00
2021-12-26 20:22:00 +01:00
if ( ep . images . thumbnail [ 0 ] [ 0 ] . source . isNotEmpty ( ) ) {
Glide . with ( context ) . load ( ep . images . thumbnail [ 0 ] [ 0 ] . source )
2020-12-14 23:46:55 +01:00
. apply ( RequestOptions . bitmapTransform ( RoundedCornersTransformation ( 10 , 0 ) ) )
. into ( holder . binding . imageEpisode )
}
2020-12-28 20:17:11 +01:00
// hide the play icon, if it's the current episode
2020-12-31 13:12:37 +01:00
holder . binding . imageEpisodePlay . visibility = if ( currentSelected == position ) {
View . GONE
} else {
View . VISIBLE
2020-12-28 20:17:11 +01:00
}
2020-12-14 23:46:55 +01:00
}
override fun getItemCount ( ) : Int {
2021-12-26 20:22:00 +01:00
return episodes . items . size
2020-12-14 23:46:55 +01:00
}
inner class EpisodeViewHolder ( val binding : ItemEpisodePlayerBinding ) : RecyclerView . ViewHolder ( binding . root ) {
init {
binding . imageEpisode . setOnClickListener {
2020-12-28 20:17:11 +01:00
// don't execute, if it's the current episode
2021-12-26 20:22:00 +01:00
if ( currentSelected != bindingAdapterPosition ) {
onImageClick ?. invoke (
episodes . items [ bindingAdapterPosition ] . seasonId ,
episodes . items [ bindingAdapterPosition ] . id
)
2020-12-28 20:17:11 +01:00
}
2020-12-14 23:46:55 +01:00
}
}
}
}