use recyclerview for episodes in media fragment

closes #3
This commit is contained in:
2020-10-12 09:54:32 +02:00
parent 7b708f5aa0
commit 0fc1d8b5c2
6 changed files with 162 additions and 73 deletions

View File

@ -6,18 +6,22 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.fragment_media.*
import org.mosad.teapod.MainActivity
import org.mosad.teapod.R
import org.mosad.teapod.util.DataTypes.MediaType
import org.mosad.teapod.util.EpisodesAdapter
import org.mosad.teapod.util.GUIMedia
import org.mosad.teapod.util.StreamMedia
class MediaFragment(private val guiMedia: GUIMedia, private val streamMedia: StreamMedia) : Fragment() {
private lateinit var adapterEpisodes: ArrayAdapter<String>
private lateinit var adapterRecEpisodes: EpisodesAdapter
private lateinit var viewManager: RecyclerView.LayoutManager
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_media, container, false)
@ -37,11 +41,14 @@ class MediaFragment(private val guiMedia: GUIMedia, private val streamMedia: Str
"${guiMedia.title} - Ep. ${index + 1}"
}
adapterEpisodes = ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, episodes)
list_episodes.adapter = adapterEpisodes
adapterRecEpisodes = EpisodesAdapter(episodes)
viewManager = LinearLayoutManager(context)
recycler_episodes.layoutManager = viewManager
recycler_episodes.adapter = adapterRecEpisodes
} else if (streamMedia.type == MediaType.MOVIE) {
list_episodes.visibility = View.GONE
recycler_episodes.visibility = View.GONE
}
@ -55,8 +62,11 @@ class MediaFragment(private val guiMedia: GUIMedia, private val streamMedia: Str
onClickButtonPlay()
}
list_episodes.setOnItemClickListener { _, _, position, _ ->
playStream(streamMedia.streams[position])
// set onItemClick only in adapter is initialized
if (this::adapterRecEpisodes.isInitialized) {
adapterRecEpisodes.onItemClick = { item, position ->
playStream(streamMedia.streams[position])
}
}
}

View File

@ -8,6 +8,7 @@ class DataTypes {
}
}
// TODO rework: add type, episodes list with episode title, if type == MOVIE the first episode will be the movie stream
data class GUIMedia(val title: String, val posterLink: String, val shortDesc : String, val link: String) {
override fun toString(): String {
return title

View File

@ -0,0 +1,35 @@
package org.mosad.teapod.util
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.component_episode.view.*
import org.mosad.teapod.R
class EpisodesAdapter(private val data: List<String>) : RecyclerView.Adapter<EpisodesAdapter.MyViewHolder>() {
var onItemClick: ((String, Int) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.component_episode, parent, false)
return MyViewHolder(view)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.view .text_episode_title.text = data[position]
}
override fun getItemCount(): Int {
return data.size
}
inner class MyViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
init {
view.setOnClickListener {
onItemClick?.invoke(data[adapterPosition], adapterPosition)
}
}
}
}