2021-02-06 19:02:12 +01:00
package org.mosad.teapod.ui.activity.main.fragments
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
import androidx.fragment.app.Fragment
2021-06-06 17:54:19 +02:00
import androidx.lifecycle.lifecycleScope
2020-12-06 15:18:15 +01:00
import com.bumptech.glide.Glide
2020-10-15 21:00:31 +02:00
import kotlinx.coroutines.launch
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
2021-06-06 17:54:19 +02:00
import org.mosad.teapod.ui.activity.main.MainActivity
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
2021-01-21 18:22:53 +01:00
import org.mosad.teapod.util.setDrawableTop
2021-01-20 16:10:41 +01:00
import org.mosad.teapod.util.showFragment
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
2021-01-21 18:22:53 +01:00
private lateinit var adapterTopTen : 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 )
2021-06-06 17:54:19 +02:00
lifecycleScope . launch {
2020-12-06 15:18:15 +01:00
context ?. let {
initHighlight ( )
initRecyclerViews ( )
initActions ( )
}
}
}
2020-10-16 11:23:32 +02:00
2020-12-06 15:18:15 +01:00
private fun initHighlight ( ) {
2020-12-30 14:18:04 +01:00
if ( AoDParser . highlightsList . isNotEmpty ( ) ) {
highlightMedia = AoDParser . highlightsList [ 0 ]
2020-10-19 17:34:41 +02:00
2020-12-30 14:18:04 +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-30 14:18:04 +01:00
if ( StorageController . myList . contains ( highlightMedia . id ) ) {
2021-01-21 18:22:53 +01:00
binding . textHighlightMyList . setDrawableTop ( R . drawable . ic _baseline _check _24 )
2020-12-30 14:18:04 +01:00
} else {
2021-01-21 18:22:53 +01:00
binding . textHighlightMyList . setDrawableTop ( R . drawable . ic _baseline _add _24 )
2020-12-30 14:18:04 +01:00
}
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 ) )
2021-01-21 18:22:53 +01:00
binding . recyclerTopTen . addItemDecoration ( MediaItemDecoration ( 9 ) )
2020-12-06 15:18:15 +01:00
// my list
2021-07-03 13:36:15 +02:00
adapterMyList = MediaItemAdapter ( mapMyListToItemMedia ( ) )
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
2021-01-21 18:22:53 +01:00
// top ten
adapterTopTen = MediaItemAdapter ( AoDParser . topTenList )
binding . recyclerTopTen . adapter = adapterTopTen
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
2021-06-06 17:54:19 +02:00
lifecycleScope . launch {
2020-12-06 15:18:15 +01:00
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 )
2021-01-21 18:22:53 +01:00
binding . textHighlightMyList . setDrawableTop ( R . drawable . ic _baseline _add _24 )
2020-12-06 15:18:15 +01:00
} else {
StorageController . myList . add ( highlightMedia . id )
2021-01-21 18:22:53 +01:00
binding . textHighlightMyList . setDrawableTop ( R . drawable . ic _baseline _check _24 )
2020-12-06 15:18:15 +01:00
}
StorageController . saveMyList ( requireContext ( ) )
updateMyListMedia ( ) // update my list, since it has changed
}
binding . textHighlightInfo . setOnClickListener {
2021-01-20 16:10:41 +01:00
activity ?. showFragment ( MediaFragment ( highlightMedia . id ) )
}
adapterMyList . onItemClick = { mediaId , _ ->
activity ?. showFragment ( MediaFragment ( mediaId ) )
2020-12-06 15:18:15 +01:00
}
2020-10-19 17:34:41 +02:00
adapterNewEpisodes . onItemClick = { mediaId , _ ->
2021-01-20 16:10:41 +01:00
activity ?. showFragment ( MediaFragment ( mediaId ) )
2020-10-19 17:34:41 +02:00
}
2020-12-11 10:54:40 +01:00
adapterNewSimulcasts . onItemClick = { mediaId , _ ->
2021-01-20 16:10:41 +01:00
activity ?. showFragment ( MediaFragment ( mediaId ) )
2020-12-11 10:54:40 +01:00
}
adapterNewTitles . onItemClick = { mediaId , _ ->
2021-01-20 16:10:41 +01:00
activity ?. showFragment ( MediaFragment ( mediaId ) )
2020-12-11 10:54:40 +01:00
}
2021-01-21 18:22:53 +01:00
adapterTopTen . onItemClick = { mediaId , _ ->
activity ?. 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 ( ) {
2021-07-03 13:36:15 +02:00
adapterMyList . updateMediaList ( mapMyListToItemMedia ( ) )
adapterMyList . notifyDataSetChanged ( )
}
private fun mapMyListToItemMedia ( ) : List < ItemMedia > {
return StorageController . myList . mapNotNull { elementId ->
AoDParser . itemMediaList . firstOrNull { it . id == elementId } . also {
// it the my list entry wasn't found in itemMediaList Log it
if ( it == null ) {
Log . w ( javaClass . name , " The element with the id $elementId was not found. " )
}
2020-12-06 15:18:15 +01:00
}
}
}
2020-10-08 22:20:20 +02:00
}