@@ -43,7 +43,7 @@ class ViewPagerMediaAdapter(
43
43
private val currentMediaItemsAndIndexes: ArrayDeque <Pair <MediaItem , Int >> = ArrayDeque ()
44
44
private var playerPool: PlayerPool
45
45
private val holderMap: MutableMap <Int , ViewPagerMediaHolder >
46
- private var currentPlayingIndex : Int = C . INDEX_UNSET
46
+ private val preloadControl : DefaultPreloadControl
47
47
48
48
companion object {
49
49
private const val TAG = " ViewPagerMediaAdapter"
@@ -65,8 +65,10 @@ class ViewPagerMediaAdapter(
65
65
)
66
66
.setPrioritizeTimeOverSizeThresholds(true )
67
67
.build()
68
+ preloadControl = DefaultPreloadControl ()
68
69
val preloadManagerBuilder =
69
- DefaultPreloadManager .Builder (context, DefaultPreloadControl ()).setLoadControl(loadControl)
70
+ DefaultPreloadManager .Builder (context.applicationContext, preloadControl)
71
+ .setLoadControl(loadControl)
70
72
playerPool = PlayerPool (numberOfPlayers, preloadManagerBuilder)
71
73
holderMap = mutableMapOf ()
72
74
preloadManager = preloadManagerBuilder.build()
@@ -76,6 +78,13 @@ class ViewPagerMediaAdapter(
76
78
preloadManager.invalidate()
77
79
}
78
80
81
+ override fun onDetachedFromRecyclerView (recyclerView : RecyclerView ) {
82
+ playerPool.destroyPlayers()
83
+ preloadManager.release()
84
+ holderMap.clear()
85
+ super .onDetachedFromRecyclerView(recyclerView)
86
+ }
87
+
79
88
override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): ViewPagerMediaHolder {
80
89
val view =
81
90
LayoutInflater .from(parent.context).inflate(R .layout.media_item_view_pager, parent, false )
@@ -128,14 +137,9 @@ class ViewPagerMediaAdapter(
128
137
return Int .MAX_VALUE
129
138
}
130
139
131
- fun onDestroy () {
132
- playerPool.destroyPlayers()
133
- preloadManager.release()
134
- }
135
-
136
140
fun onPageSelected (position : Int ) {
137
- currentPlayingIndex = position
138
141
holderMap[position]?.playIfPossible()
142
+ preloadControl.currentPlayingIndex = position
139
143
preloadManager.setCurrentPlayingIndex(position)
140
144
preloadManager.invalidate()
141
145
}
@@ -168,7 +172,9 @@ class ViewPagerMediaAdapter(
168
172
preloadManager.remove(itemAndIndex.first)
169
173
}
170
174
171
- inner class DefaultPreloadControl : TargetPreloadStatusControl <Int > {
175
+ inner class DefaultPreloadControl (var currentPlayingIndex : Int = C .INDEX_UNSET ) :
176
+ TargetPreloadStatusControl <Int > {
177
+
172
178
override fun getTargetPreloadStatus (rankingData : Int ): DefaultPreloadManager .Status ? {
173
179
if (abs(rankingData - currentPlayingIndex) == 2 ) {
174
180
return DefaultPreloadManager .Status (STAGE_LOADED_FOR_DURATION_MS , 500L )
0 commit comments