11package com.brightcove.videolist
22
3+ import android.util.SparseArray
34import android.view.LayoutInflater
45import android.view.ViewGroup
56import androidx.recyclerview.widget.DiffUtil
@@ -8,29 +9,40 @@ import androidx.recyclerview.widget.RecyclerView
89import com.brightcove.player.event.EventType
910import com.brightcove.player.model.Video
1011import com.brightcove.player.view.BrightcoveExoPlayerVideoView
11- import com.brightcove.player.view.BrightcoveVideoView
1212import com.brightcove.videolist.databinding.ItemViewBinding
1313
1414class VideoListAdapter : ListAdapter <Video , VideoListAdapter .ViewHolder >(DIFF_CALLBACK ) {
1515
16+ // This is used to keep track of the playback position for each video; remove it and its associated logic to play from the start always
17+ private val playheadPositions = SparseArray <Long >()
18+
1619 override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): ViewHolder {
1720 val binding = ItemViewBinding .inflate(LayoutInflater .from(parent.context), parent, false )
1821 return ViewHolder (binding)
1922 }
2023
2124 override fun onBindViewHolder (holder : ViewHolder , position : Int ) {
2225 // Get Video information
23- holder.bind(getItem(position))
26+ val video = getItem(position)
27+ holder.video = video
28+ holder.binding.videoTitleText.text = video.getStringProperty(Video .Fields .NAME )
2429 }
2530
2631 override fun onViewAttachedToWindow (holder : ViewHolder ) {
2732 super .onViewAttachedToWindow(holder)
28- holder.videoView.start()
33+ holder.video?.let { video ->
34+ holder.videoView.add(video)
35+ holder.videoView.seekTo(playheadPositions.get(holder.absoluteAdapterPosition, 0L ))
36+ holder.videoView.start()
37+ }
2938 }
3039
3140 override fun onViewDetachedFromWindow (holder : ViewHolder ) {
3241 super .onViewDetachedFromWindow(holder)
42+ playheadPositions.put(holder.absoluteAdapterPosition, holder.videoView.currentPositionLong)
3343 holder.videoView.stopPlayback()
44+ holder.videoView.clear()
45+ holder.videoView.playback.destroyPlayer()
3446 }
3547
3648 override fun onDetachedFromRecyclerView (recyclerView : RecyclerView ) {
@@ -43,29 +55,20 @@ class VideoListAdapter : ListAdapter<Video, VideoListAdapter.ViewHolder>(DIFF_CA
4355 }
4456 }
4557
46- class ViewHolder (private val binding : ItemViewBinding
58+ class ViewHolder (val binding : ItemViewBinding
4759 ) : RecyclerView.ViewHolder(binding.root) {
4860
49- lateinit var videoView: BrightcoveVideoView
50-
51- fun bind (video : Video ){
61+ val videoView = BrightcoveExoPlayerVideoView (itemView.context)
62+ var video: Video ? = null
5263
53- binding.apply {
64+ init {
65+ binding.videoFrame.addView(videoView)
66+ videoView.finishInitialization()
5467
55- videoView = BrightcoveExoPlayerVideoView (itemView.context)
56- videoFrame.addView(videoView)
57- videoView.finishInitialization()
58-
59- val eventEmitter = videoView.eventEmitter
60- eventEmitter.on(EventType .ENTER_FULL_SCREEN ) {
61- // You can set listeners on each Video View
62- }
63-
64- videoTitleText.text = video.getStringProperty(Video .Fields .NAME )
65- videoView.clear()
66- videoView.add(video)
68+ val eventEmitter = videoView.eventEmitter
69+ eventEmitter.on(EventType .ENTER_FULL_SCREEN ) {
70+ // You can set listeners on each Video View
6771 }
68-
6972 }
7073 }
7174
0 commit comments