2020-10-11 10:02:00 +02:00
package org.mosad.teapod.ui
2020-10-12 22:43:42 +02:00
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
2020-10-11 10:02:00 +02:00
import android.os.Bundle
2020-10-11 23:16:47 +02:00
import android.util.Log
2020-10-11 10:02:00 +02:00
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2020-10-12 09:54:32 +02:00
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
2020-10-11 10:02:00 +02:00
import com.bumptech.glide.Glide
2020-10-12 22:43:42 +02:00
import com.bumptech.glide.request.RequestOptions
import jp.wasabeef.glide.transformations.BlurTransformation
2020-10-11 10:02:00 +02:00
import kotlinx.android.synthetic.main.fragment_media.*
2020-10-11 13:18:20 +02:00
import org.mosad.teapod.MainActivity
2020-10-11 10:02:00 +02:00
import org.mosad.teapod.R
2020-10-11 23:16:47 +02:00
import org.mosad.teapod.util.DataTypes.MediaType
2020-10-12 09:54:32 +02:00
import org.mosad.teapod.util.EpisodesAdapter
2020-10-12 17:52:24 +02:00
import org.mosad.teapod.util.Media
2020-10-12 20:30:45 +02:00
import org.mosad.teapod.util.TMDBResponse
2020-10-11 10:02:00 +02:00
2020-10-12 20:30:45 +02:00
class MediaFragment ( private val media : Media , private val tmdb : TMDBResponse ) : Fragment ( ) {
2020-10-11 23:16:47 +02:00
2020-10-12 09:54:32 +02:00
private lateinit var adapterRecEpisodes : EpisodesAdapter
private lateinit var viewManager : RecyclerView . LayoutManager
2020-10-11 10:02:00 +02:00
override fun onCreateView ( inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ) : View ? {
return inflater . inflate ( R . layout . fragment _media , container , false )
}
override fun onViewCreated ( view : View , savedInstanceState : Bundle ? ) {
super . onViewCreated ( view , savedInstanceState )
2020-10-12 22:43:42 +02:00
initGUI ( )
initActions ( )
}
/ * *
* if tmdb data is present , use it , else use the aod data
* /
private fun initGUI ( ) {
2020-10-11 23:16:47 +02:00
// generic gui
2020-10-13 16:30:23 +02:00
val backdropUrl = if ( tmdb . backdropUrl . isNotEmpty ( ) ) tmdb . backdropUrl else media . info . posterLink
val posterUrl = if ( tmdb . posterUrl . isNotEmpty ( ) ) tmdb . posterUrl else media . info . posterLink
2020-10-12 20:30:45 +02:00
2020-10-13 12:27:13 +02:00
Glide . with ( requireContext ( ) ) . load ( backdropUrl )
. apply ( RequestOptions . placeholderOf ( ColorDrawable ( Color . DKGRAY ) ) )
. apply ( RequestOptions . bitmapTransform ( BlurTransformation ( 25 , 3 ) ) )
. into ( image _backdrop )
2020-10-12 22:43:42 +02:00
2020-10-13 12:27:13 +02:00
Glide . with ( requireContext ( ) ) . load ( posterUrl )
. into ( image _poster )
2020-10-12 22:43:42 +02:00
2020-10-13 12:27:13 +02:00
text _title . text = media . title
2020-10-13 15:56:07 +02:00
text _year . text = media . info . year . toString ( )
text _age . text = media . info . age . toString ( )
2020-10-13 16:30:23 +02:00
text _overview . text = media . info . shortDesc //if (tmdb.overview.isNotEmpty()) tmdb.overview else media.shortDesc
2020-10-11 23:16:47 +02:00
// specific gui
2020-10-12 17:52:24 +02:00
if ( media . type == MediaType . TVSHOW ) {
2020-10-13 15:56:07 +02:00
adapterRecEpisodes = EpisodesAdapter ( media . episodes , requireContext ( ) )
2020-10-12 09:54:32 +02:00
viewManager = LinearLayoutManager ( context )
recycler _episodes . layoutManager = viewManager
recycler _episodes . adapter = adapterRecEpisodes
2020-10-11 23:16:47 +02:00
2020-10-13 15:56:07 +02:00
text _episodes _or _runtime . text = getString ( R . string . text _episodes _count , media . info . episodesCount )
2020-10-12 17:52:24 +02:00
} else if ( media . type == MediaType . MOVIE ) {
2020-10-12 09:54:32 +02:00
recycler _episodes . visibility = View . GONE
2020-10-13 15:56:07 +02:00
if ( tmdb . runtime > 0 ) {
text _episodes _or _runtime . text = getString ( R . string . text _runtime , tmdb . runtime )
} else {
text _episodes _or _runtime . visibility = View . GONE
}
2020-10-11 23:16:47 +02:00
}
2020-10-11 10:02:00 +02:00
}
private fun initActions ( ) {
2020-10-11 23:16:47 +02:00
button _play . setOnClickListener {
2020-10-12 17:52:24 +02:00
when ( media . type ) {
MediaType . MOVIE -> playStream ( media . episodes . first ( ) . streamUrl )
MediaType . TVSHOW -> playStream ( media . episodes . first ( ) . streamUrl )
2020-10-12 22:43:42 +02:00
else -> Log . e ( javaClass . name , " Wrong Type: $media .type " )
2020-10-12 17:52:24 +02:00
}
2020-10-11 23:16:47 +02:00
}
2020-10-12 09:54:32 +02:00
// set onItemClick only in adapter is initialized
if ( this :: adapterRecEpisodes . isInitialized ) {
2020-10-13 12:27:13 +02:00
adapterRecEpisodes . onItemClick = { _ , position ->
2020-10-12 17:52:24 +02:00
playStream ( media . episodes [ position ] . streamUrl )
2020-10-12 09:54:32 +02:00
}
2020-10-11 23:16:47 +02:00
}
2020-10-11 10:02:00 +02:00
}
2020-10-11 23:16:47 +02:00
private fun playStream ( url : String ) {
2020-10-11 13:18:20 +02:00
val mainActivity = activity as MainActivity
2020-10-11 23:16:47 +02:00
mainActivity . startPlayer ( url )
2020-10-11 10:02:00 +02:00
}
}