2022-12-26 16:10:38 +01:00
package org.mosad.teapod.ui.activity.main.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
2022-12-26 19:43:40 +01:00
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
2022-12-26 16:10:38 +01:00
import kotlinx.coroutines.launch
2022-12-26 19:43:40 +01:00
import org.mosad.teapod.R
2022-12-26 16:10:38 +01:00
import org.mosad.teapod.databinding.FragmentMyListsBinding
import org.mosad.teapod.parser.crunchyroll.Crunchyroll
import org.mosad.teapod.util.toItemMediaList
class MyListsFragment : Fragment ( ) {
private lateinit var binding : FragmentMyListsBinding
2022-12-26 19:43:40 +01:00
private lateinit var pagerAdapter : FragmentStateAdapter
2022-12-26 16:10:38 +01:00
2022-12-26 19:43:40 +01:00
private val fragments = arrayListOf < Fragment > ( )
2022-12-26 16:10:38 +01:00
override fun onCreateView ( inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ) : View {
binding = FragmentMyListsBinding . inflate ( inflater , container , false )
return binding . root
}
override fun onViewCreated ( view : View , savedInstanceState : Bundle ? ) {
super . onViewCreated ( view , savedInstanceState )
2022-12-26 19:43:40 +01:00
// tab layout and pager
pagerAdapter = ScreenSlidePagerAdapter ( this )
binding . pagerMyLists . adapter = pagerAdapter
// TODO is position 0 always episodes? (and 1 always similar titles)
TabLayoutMediator ( binding . tabMyLists , binding . pagerMyLists ) { tab , position ->
tab . text = when ( position ) {
0 -> getString ( R . string . my _list )
1 -> getString ( R . string . crunchylists )
2 -> getString ( R . string . downloads )
else -> " "
}
} . attach ( )
2022-12-26 16:10:38 +01:00
lifecycleScope . launch {
2022-12-26 19:43:40 +01:00
val items = Crunchyroll . watchlist ( 50 ) . items
2022-12-26 16:10:38 +01:00
2022-12-26 19:43:40 +01:00
MediaFragmentSimilar ( items . toItemMediaList ( ) ) . also {
fragments . add ( it )
pagerAdapter . notifyItemInserted ( fragments . indexOf ( it ) )
2022-12-26 16:10:38 +01:00
}
}
2022-12-26 19:43:40 +01:00
}
2022-12-26 16:10:38 +01:00
2022-12-26 19:43:40 +01:00
/ * *
* A simple pager adapter
* TODO also present in MediaFragment
* /
private inner class ScreenSlidePagerAdapter ( fragment : Fragment ) : FragmentStateAdapter ( fragment ) {
override fun getItemCount ( ) : Int = fragments . size
2022-12-26 16:10:38 +01:00
2022-12-26 19:43:40 +01:00
override fun createFragment ( position : Int ) : Fragment = fragments [ position ]
2022-12-26 16:10:38 +01:00
}
}