2020-10-15 19:01:37 +02:00
package org.mosad.teapod.ui.fragments
2020-10-08 22:20:20 +02:00
2020-12-06 15:18:15 +01:00
import android.graphics.drawable.Drawable
2020-10-08 22:20:20 +02:00
import android.os.Bundle
2020-12-06 15:18:15 +01:00
import android.util.Log
2020-10-08 22:20:20 +02:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2020-12-06 15:18:15 +01:00
import android.widget.TextView
2020-10-08 22:20:20 +02:00
import androidx.fragment.app.Fragment
2020-12-06 15:18:15 +01:00
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
2020-10-15 21:00:31 +02:00
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.mosad.teapod.MainActivity
2020-12-06 15:18:15 +01:00
import org.mosad.teapod.R
2020-11-25 22:35:55 +01:00
import org.mosad.teapod.databinding.FragmentHomeBinding
2020-10-15 21:00:31 +02:00
import org.mosad.teapod.parser.AoDParser
2020-12-06 15:18:15 +01:00
import org.mosad.teapod.util.ItemMedia
2020-10-16 11:23:32 +02:00
import org.mosad.teapod.util.StorageController
2020-10-15 21:00:31 +02:00
import org.mosad.teapod.util.adapter.MediaItemAdapter
import org.mosad.teapod.util.decoration.MediaItemDecoration
2020-10-08 22:20:20 +02:00
class HomeFragment : Fragment ( ) {
2020-11-25 22:35:55 +01:00
private lateinit var binding : FragmentHomeBinding
2020-10-19 17:34:41 +02:00
private lateinit var adapterMyList : MediaItemAdapter
private lateinit var adapterNewEpisodes : MediaItemAdapter
2020-12-11 10:54:40 +01:00
private lateinit var adapterNewSimulcasts : MediaItemAdapter
private lateinit var adapterNewTitles : MediaItemAdapter
2020-10-08 22:20:20 +02:00
2020-12-06 15:18:15 +01:00
private lateinit var highlightMedia : ItemMedia
2020-11-25 22:35:55 +01:00
override fun onCreateView ( inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ) : View {
binding = FragmentHomeBinding . inflate ( inflater , container , false )
return binding . root
2020-10-08 22:20:20 +02:00
}
override fun onViewCreated ( view : View , savedInstanceState : Bundle ? ) {
super . onViewCreated ( view , savedInstanceState )
2020-12-06 15:18:15 +01:00
GlobalScope . launch ( Dispatchers . Main ) {
context ?. let {
initHighlight ( )
initRecyclerViews ( )
initActions ( )
}
}
}
2020-10-16 11:23:32 +02:00
2020-12-06 15:18:15 +01:00
private fun initHighlight ( ) {
highlightMedia = AoDParser . highlightsList [ 0 ]
2020-10-19 17:34:41 +02:00
2020-12-06 15:18:15 +01:00
binding . textHighlightTitle . text = highlightMedia . title
Glide . with ( requireContext ( ) ) . load ( highlightMedia . posterUrl )
. into ( binding . imageHighlight )
2020-10-19 17:34:41 +02:00
2020-12-06 15:18:15 +01:00
if ( StorageController . myList . contains ( highlightMedia . id ) ) {
loadIntoCompoundDrawable ( R . drawable . ic _baseline _check _24 , binding . textHighlightMyList )
} else {
loadIntoCompoundDrawable ( R . drawable . ic _baseline _add _24 , binding . textHighlightMyList )
2020-10-15 21:00:31 +02:00
}
2020-10-16 11:23:32 +02:00
}
2020-12-06 15:18:15 +01:00
private fun initRecyclerViews ( ) {
binding . recyclerMyList . addItemDecoration ( MediaItemDecoration ( 9 ) )
binding . recyclerNewEpisodes . addItemDecoration ( MediaItemDecoration ( 9 ) )
2020-12-11 10:54:40 +01:00
binding . recyclerNewSimulcasts . addItemDecoration ( MediaItemDecoration ( 9 ) )
binding . recyclerNewTitles . addItemDecoration ( MediaItemDecoration ( 9 ) )
2020-12-06 15:18:15 +01:00
// my list
2020-10-16 19:56:08 +02:00
val myListMedia = StorageController . myList . map { elementId ->
AoDParser . itemMediaList . first {
elementId == it . id
2020-10-16 11:23:32 +02:00
}
}
2020-10-19 17:34:41 +02:00
adapterMyList = MediaItemAdapter ( myListMedia )
adapterMyList . onItemClick = { mediaId , _ ->
2020-12-05 21:51:12 +01:00
( activity as MainActivity ) . showFragment ( MediaFragment ( mediaId ) )
2020-10-16 11:23:32 +02:00
}
2020-11-25 22:35:55 +01:00
binding . recyclerMyList . adapter = adapterMyList
2020-12-06 15:18:15 +01:00
// new episodes
adapterNewEpisodes = MediaItemAdapter ( AoDParser . newEpisodesList )
binding . recyclerNewEpisodes . adapter = adapterNewEpisodes
2020-12-11 10:54:40 +01:00
// new simulcasts
adapterNewSimulcasts = MediaItemAdapter ( AoDParser . newSimulcastsList )
binding . recyclerNewSimulcasts . adapter = adapterNewSimulcasts
// new titles
adapterNewTitles = MediaItemAdapter ( AoDParser . newTitlesList )
binding . recyclerNewTitles . adapter = adapterNewTitles
2020-10-19 17:34:41 +02:00
}
private fun initActions ( ) {
2020-12-06 15:18:15 +01:00
binding . buttonPlayHighlight . setOnClickListener {
// TODO get next episode
GlobalScope . launch {
val media = AoDParser . getMediaById ( highlightMedia . id )
Log . d ( javaClass . name , " Starting Player with mediaId: ${media.id} " )
( activity as MainActivity ) . startPlayer ( media . id , media . episodes . first ( ) . id )
}
}
binding . textHighlightMyList . setOnClickListener {
if ( StorageController . myList . contains ( highlightMedia . id ) ) {
StorageController . myList . remove ( highlightMedia . id )
loadIntoCompoundDrawable ( R . drawable . ic _baseline _add _24 , binding . textHighlightMyList )
} else {
StorageController . myList . add ( highlightMedia . id )
loadIntoCompoundDrawable ( R . drawable . ic _baseline _check _24 , binding . textHighlightMyList )
}
StorageController . saveMyList ( requireContext ( ) )
updateMyListMedia ( ) // update my list, since it has changed
}
binding . textHighlightInfo . setOnClickListener {
( activity as MainActivity ) . showFragment ( MediaFragment ( highlightMedia . id ) )
}
2020-10-19 17:34:41 +02:00
adapterNewEpisodes . onItemClick = { mediaId , _ ->
2020-12-05 21:51:12 +01:00
( activity as MainActivity ) . showFragment ( MediaFragment ( mediaId ) )
2020-10-19 17:34:41 +02:00
}
2020-12-11 10:54:40 +01:00
adapterNewSimulcasts . onItemClick = { mediaId , _ ->
( activity as MainActivity ) . showFragment ( MediaFragment ( mediaId ) )
}
adapterNewTitles . onItemClick = { mediaId , _ ->
( activity as MainActivity ) . showFragment ( MediaFragment ( mediaId ) )
}
2020-10-08 22:20:20 +02:00
}
2020-12-06 15:18:15 +01:00
/ * *
* update my media list
* TODO
* * auto call when StorageController . myList is changed
* * only update actual change and not all data ( performance )
* /
fun updateMyListMedia ( ) {
val myListMedia = StorageController . myList . map { elementId ->
AoDParser . itemMediaList . first {
elementId == it . id
}
}
adapterMyList . updateMediaList ( myListMedia )
adapterMyList . notifyDataSetChanged ( )
}
private fun loadIntoCompoundDrawable ( drawable : Int , textView : TextView ) {
Glide . with ( requireContext ( ) )
. load ( drawable )
. into ( object : CustomTarget < Drawable > ( 48 , 48 ) {
override fun onLoadCleared ( drawable : Drawable ? ) {
textView . setCompoundDrawablesWithIntrinsicBounds ( null , drawable , null , null )
}
override fun onResourceReady ( res : Drawable , transition : Transition < in Drawable > ? ) {
textView . setCompoundDrawablesWithIntrinsicBounds ( null , res , null , null )
}
} )
}
2020-10-08 22:20:20 +02:00
}