fork of https://github.com/sourcegraph/zoekt
1package com.airbnb.epoxy.preload
2// ^^^ reference com/
3// ^^^^^^ reference com/airbnb/
4// ^^^^^ reference com/airbnb/epoxy/
5// ^^^^^^^ reference com/airbnb/epoxy/preload/
6
7import android.content.Context
8import android.view.View
9import android.widget.ImageView
10import androidx.annotation.IdRes
11// ^^^^^^^^ reference androidx/
12// ^^^^^^^^^^ reference androidx/annotation/
13// ^^^^^ reference androidx/annotation/IdRes#
14import androidx.annotation.Px
15// ^^^^^^^^ reference androidx/
16// ^^^^^^^^^^ reference androidx/annotation/
17// ^^ reference androidx/annotation/Px#
18import androidx.recyclerview.widget.LinearLayoutManager
19// ^^^^^^^^ reference androidx/
20import androidx.recyclerview.widget.RecyclerView
21// ^^^^^^^^ reference androidx/
22import com.airbnb.epoxy.BaseEpoxyAdapter
23// ^^^ reference com/
24// ^^^^^^ reference com/airbnb/
25// ^^^^^ reference com/airbnb/epoxy/
26import com.airbnb.epoxy.EpoxyAdapter
27// ^^^ reference com/
28// ^^^^^^ reference com/airbnb/
29// ^^^^^ reference com/airbnb/epoxy/
30import com.airbnb.epoxy.EpoxyController
31// ^^^ reference com/
32// ^^^^^^ reference com/airbnb/
33// ^^^^^ reference com/airbnb/epoxy/
34import com.airbnb.epoxy.EpoxyModel
35// ^^^ reference com/
36// ^^^^^^ reference com/airbnb/
37// ^^^^^ reference com/airbnb/epoxy/
38import com.airbnb.epoxy.getModelForPositionInternal
39// ^^^ reference com/
40// ^^^^^^ reference com/airbnb/
41// ^^^^^ reference com/airbnb/epoxy/
42// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/InternalExposerKt#getModelForPositionInternal().
43import kotlin.math.max
44// ^^^^^^ reference kotlin/
45// ^^^^ reference kotlin/math/
46import kotlin.math.min
47// ^^^^^^ reference kotlin/
48// ^^^^ reference kotlin/math/
49
50/**
51 * A scroll listener that prefetches view content.
52 *
53 * To use this, create implementations of [EpoxyModelPreloader] for each EpoxyModel class that you want to preload.
54 * Then, use the [EpoxyPreloader.with] methods to create an instance that preloads models of that type.
55 * Finally, add the resulting scroll listener to your RecyclerView.
56 *
57 * If you are using [com.airbnb.epoxy.EpoxyRecyclerView] then use [com.airbnb.epoxy.EpoxyRecyclerView.addPreloader]
58 * to setup the preloader as a listener.
59 *
60 * Otherwise there is a [RecyclerView.addEpoxyPreloader] extension for easy usage.
61 */
62class EpoxyPreloader<P : PreloadRequestHolder> private constructor(
63// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader# public final class EpoxyPreloader<P : com.airbnb.epoxy.preload.PreloadRequestHolder>
64// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#[P] <P : com.airbnb.epoxy.preload.PreloadRequestHolder>
65// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder#
66// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(). private constructor EpoxyPreloader<P : com.airbnb.epoxy.preload.PreloadRequestHolder>(adapter: [ERROR : BaseEpoxyAdapter], preloadTargetFactory: () -> P, errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */, maxItemsToPreload: kotlin.Int, modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>)
67 private val adapter: BaseEpoxyAdapter,
68// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#adapter. private final val adapter: [ERROR : BaseEpoxyAdapter]
69// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getAdapter(). private final val adapter: [ERROR : BaseEpoxyAdapter]
70// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(adapter) value-parameter adapter: [ERROR : BaseEpoxyAdapter]
71 preloadTargetFactory: () -> P,
72// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(preloadTargetFactory) value-parameter preloadTargetFactory: () -> P
73// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
74 errorHandler: PreloadErrorHandler,
75// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(errorHandler) value-parameter errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */
76// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler#
77 private val maxItemsToPreload: Int,
78// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload. private final val maxItemsToPreload: kotlin.Int
79// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload(). private final val maxItemsToPreload: kotlin.Int
80// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(maxItemsToPreload) value-parameter maxItemsToPreload: kotlin.Int
81// ^^^ reference kotlin/Int#
82 modelPreloaders: List<EpoxyModelPreloader<*, *, out P>>
83// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(modelPreloaders) value-parameter modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>
84// ^^^^ reference kotlin/collections/List#
85// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
86// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
87) : RecyclerView.OnScrollListener() {
88
89 private var lastVisibleRange: IntRange = IntRange.EMPTY
90// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange. private final var lastVisibleRange: kotlin.ranges.IntRange
91// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange(). private final var lastVisibleRange: kotlin.ranges.IntRange
92// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange(). private final var lastVisibleRange: kotlin.ranges.IntRange
93// ^^^^^^^^ reference kotlin/ranges/IntRange#
94// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion#
95// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY.
96// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY().
97 private var lastPreloadRange: IntProgression = IntRange.EMPTY
98// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange. private final var lastPreloadRange: kotlin.ranges.IntProgression
99// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange(). private final var lastPreloadRange: kotlin.ranges.IntProgression
100// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange(). private final var lastPreloadRange: kotlin.ranges.IntProgression
101// ^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression#
102// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion#
103// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY.
104// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY().
105 private var totalItemCount = -1
106// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount. private final var totalItemCount: kotlin.Int
107// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount(). private final var totalItemCount: kotlin.Int
108// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount(). private final var totalItemCount: kotlin.Int
109// ^ reference kotlin/Int#unaryMinus().
110 private var scrollState: Int = RecyclerView.SCROLL_STATE_IDLE
111// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#scrollState. private final var scrollState: kotlin.Int
112// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getScrollState(). private final var scrollState: kotlin.Int
113// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#setScrollState(). private final var scrollState: kotlin.Int
114// ^^^ reference kotlin/Int#
115
116 private val modelPreloaders: Map<Class<out EpoxyModel<*>>, EpoxyModelPreloader<*, *, out P>> =
117// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#modelPreloaders. private final val modelPreloaders: kotlin.collections.Map<java.lang.Class<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>>, com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>
118// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getModelPreloaders(). private final val modelPreloaders: kotlin.collections.Map<java.lang.Class<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>>, com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>
119// ^^^ reference kotlin/collections/Map#
120// ^^^^^ reference java/lang/Class#
121// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
122// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
123 modelPreloaders.associateBy { it.modelType }
124// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(modelPreloaders)
125// ^^^^^^^^^^^ reference kotlin/collections/CollectionsKt#associateBy(+18).
126// ^^ reference local0
127// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#modelType.
128// ^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#getModelType().
129
130 private val requestHolderFactory =
131// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#requestHolderFactory. private final val requestHolderFactory: com.airbnb.epoxy.preload.PreloadTargetProvider<P>
132// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getRequestHolderFactory(). private final val requestHolderFactory: com.airbnb.epoxy.preload.PreloadTargetProvider<P>
133 PreloadTargetProvider(maxItemsToPreload, preloadTargetFactory)
134// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#`<init>`().
135// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload.
136// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload().
137// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(preloadTargetFactory)
138
139 private val viewDataCache = PreloadableViewDataProvider(adapter, errorHandler)
140// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#viewDataCache. private final val viewDataCache: com.airbnb.epoxy.preload.PreloadableViewDataProvider
141// ^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#getViewDataCache(). private final val viewDataCache: com.airbnb.epoxy.preload.PreloadableViewDataProvider
142// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#`<init>`().
143// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#adapter.
144// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getAdapter().
145// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`().(errorHandler)
146
147 constructor(
148// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1). public constructor EpoxyPreloader<P : com.airbnb.epoxy.preload.PreloadRequestHolder>(epoxyController: [ERROR : EpoxyController], requestHolderFactory: () -> P, errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */, maxItemsToPreload: kotlin.Int, modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>)
149 epoxyController: EpoxyController,
150// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(epoxyController) value-parameter epoxyController: [ERROR : EpoxyController]
151 requestHolderFactory: () -> P,
152// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(requestHolderFactory) value-parameter requestHolderFactory: () -> P
153// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
154 errorHandler: PreloadErrorHandler,
155// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(errorHandler) value-parameter errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */
156// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler#
157 maxItemsToPreload: Int,
158// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(maxItemsToPreload) value-parameter maxItemsToPreload: kotlin.Int
159// ^^^ reference kotlin/Int#
160 modelPreloaders: List<EpoxyModelPreloader<*, *, out P>>
161// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(modelPreloaders) value-parameter modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>
162// ^^^^ reference kotlin/collections/List#
163// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
164// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
165 ) : this(
166 epoxyController.adapter,
167// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(epoxyController)
168 requestHolderFactory,
169// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(requestHolderFactory)
170 errorHandler,
171// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(errorHandler)
172 maxItemsToPreload,
173// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(maxItemsToPreload)
174 modelPreloaders
175// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+1).(modelPreloaders)
176 )
177
178 constructor(
179// ^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2). public constructor EpoxyPreloader<P : com.airbnb.epoxy.preload.PreloadRequestHolder>(adapter: [ERROR : EpoxyAdapter], requestHolderFactory: () -> P, errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */, maxItemsToPreload: kotlin.Int, modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>)
180 adapter: EpoxyAdapter,
181// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(adapter) value-parameter adapter: [ERROR : EpoxyAdapter]
182 requestHolderFactory: () -> P,
183// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(requestHolderFactory) value-parameter requestHolderFactory: () -> P
184// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
185 errorHandler: PreloadErrorHandler,
186// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(errorHandler) value-parameter errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */
187// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler#
188 maxItemsToPreload: Int,
189// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(maxItemsToPreload) value-parameter maxItemsToPreload: kotlin.Int
190// ^^^ reference kotlin/Int#
191 modelPreloaders: List<EpoxyModelPreloader<*, *, out P>>
192// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(modelPreloaders) value-parameter modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<*, *, out P>>
193// ^^^^ reference kotlin/collections/List#
194// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
195// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
196 ) : this(
197 adapter as BaseEpoxyAdapter,
198// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(adapter)
199 requestHolderFactory,
200// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(requestHolderFactory)
201 errorHandler,
202// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(errorHandler)
203 maxItemsToPreload,
204// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(maxItemsToPreload)
205 modelPreloaders
206// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#`<init>`(+2).(modelPreloaders)
207 )
208
209 init {
210 require(maxItemsToPreload > 0) {
211// ^^^^^^^ reference kotlin/PreconditionsKt#require(+1).
212// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload.
213// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload().
214// ^ reference kotlin/Int#compareTo(+3).
215 "maxItemsToPreload must be greater than 0. Was $maxItemsToPreload"
216// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload.
217// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload().
218 }
219 }
220
221 override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
222// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged(). public open fun onScrollStateChanged(recyclerView: [ERROR : RecyclerView], newState: kotlin.Int)
223// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged().(recyclerView) value-parameter recyclerView: [ERROR : RecyclerView]
224// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged().(newState) value-parameter newState: kotlin.Int
225// ^^^ reference kotlin/Int#
226 scrollState = newState
227// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#scrollState.
228// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getScrollState().
229// ^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setScrollState().
230// ^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrollStateChanged().(newState)
231 }
232
233 override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
234// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled(). public open fun onScrolled(recyclerView: [ERROR : RecyclerView], dx: kotlin.Int, dy: kotlin.Int)
235// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(recyclerView) value-parameter recyclerView: [ERROR : RecyclerView]
236// ^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dx) value-parameter dx: kotlin.Int
237// ^^^ reference kotlin/Int#
238// ^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dy) value-parameter dy: kotlin.Int
239// ^^^ reference kotlin/Int#
240 if (dx == 0 && dy == 0) {
241// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dx)
242// ^^ reference kotlin/Int#equals().
243// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dy)
244// ^^ reference kotlin/Int#equals().
245 // Sometimes flings register a bunch of 0 dx/dy scroll events. To avoid redundant prefetching we just skip these
246 // Additionally, the first RecyclerView layout notifies a scroll of 0, since that can be an important time for
247 // performance (eg page load) we avoid prefetching at the same time.
248 return
249 }
250
251 if (dx.isFling() || dy.isFling()) {
252// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dx)
253// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isFling().
254// ^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(dy)
255// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isFling().
256 // We avoid preloading during flings for two reasons
257 // 1. Image requests are expensive and we don't want to drop frames on fling
258 // 2. We'll likely scroll past the preloading item anyway
259 return
260 }
261
262 // Update item count before anything else because validations depend on it
263 totalItemCount = recyclerView.adapter?.itemCount ?: 0
264// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount.
265// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount().
266// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount().
267// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(recyclerView)
268
269 val layoutManager = recyclerView.layoutManager as LinearLayoutManager
270// ^^^^^^^^^^^^^ definition local1 val layoutManager: [ERROR : LinearLayoutManager]
271// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#onScrolled().(recyclerView)
272 val firstVisiblePosition = layoutManager.findFirstVisibleItemPosition()
273// ^^^^^^^^^^^^^^^^^^^^ definition local2 val firstVisiblePosition: [ERROR : <ERROR FUNCTION RETURN TYPE>]
274// ^^^^^^^^^^^^^ reference local1
275 val lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
276// ^^^^^^^^^^^^^^^^^^^ definition local3 val lastVisiblePosition: [ERROR : <ERROR FUNCTION RETURN TYPE>]
277// ^^^^^^^^^^^^^ reference local1
278
279 if (firstVisiblePosition.isInvalid() || lastVisiblePosition.isInvalid()) {
280// ^^^^^^^^^^^^^^^^^^^^ reference local2
281// ^^^^^^^^^^^^^^^^^^^ reference local3
282 lastVisibleRange = IntRange.EMPTY
283// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange.
284// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange().
285// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange().
286// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion#
287// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY.
288// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY().
289 lastPreloadRange = IntRange.EMPTY
290// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange.
291// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange().
292// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange().
293// ^^^^^^^^ reference kotlin/ranges/IntRange#Companion#
294// ^^^^^ reference kotlin/ranges/IntRange#Companion#EMPTY.
295// ^^^^^ reference kotlin/ranges/IntRange#Companion#getEMPTY().
296 return
297 }
298
299 val visibleRange = IntRange(firstVisiblePosition, lastVisiblePosition)
300// ^^^^^^^^^^^^ definition local4 val visibleRange: kotlin.ranges.IntRange
301// ^^^^^^^^ reference kotlin/ranges/IntRange#`<init>`().
302// ^^^^^^^^^^^^^^^^^^^^ reference local2
303// ^^^^^^^^^^^^^^^^^^^ reference local3
304 if (visibleRange == lastVisibleRange) {
305// ^^^^^^^^^^^^ reference local4
306// ^^ reference kotlin/ranges/IntRange#equals().
307// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange.
308// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange().
309// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange().
310 return
311 }
312
313 val isIncreasing =
314// ^^^^^^^^^^^^ definition local5 val isIncreasing: kotlin.Boolean
315 visibleRange.first > lastVisibleRange.first || visibleRange.last > lastVisibleRange.last
316// ^^^^^^^^^^^^ reference local4
317// ^^^^^ reference kotlin/ranges/IntRange#first.
318// ^^^^^ reference kotlin/ranges/IntRange#getFirst().
319// ^ reference kotlin/Int#compareTo(+3).
320// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange.
321// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange().
322// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange().
323// ^^^^^ reference kotlin/ranges/IntRange#first.
324// ^^^^^ reference kotlin/ranges/IntRange#getFirst().
325// ^^^^^^^^^^^^ reference local4
326// ^^^^ reference kotlin/ranges/IntRange#last.
327// ^^^^ reference kotlin/ranges/IntRange#getLast().
328// ^ reference kotlin/Int#compareTo(+3).
329// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange.
330// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange().
331// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange().
332// ^^^^ reference kotlin/ranges/IntRange#last.
333// ^^^^ reference kotlin/ranges/IntRange#getLast().
334
335 val preloadRange =
336// ^^^^^^^^^^^^ definition local6 val preloadRange: kotlin.ranges.IntProgression
337 calculatePreloadRange(firstVisiblePosition, lastVisiblePosition, isIncreasing)
338// ^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().
339// ^^^^^^^^^^^^^^^^^^^^ reference local2
340// ^^^^^^^^^^^^^^^^^^^ reference local3
341// ^^^^^^^^^^^^ reference local5
342
343 // Start preload for any items that weren't already preloaded
344 preloadRange
345// ^^^^^^^^^^^^ reference local6
346 .subtract(lastPreloadRange)
347// ^^^^^^^^ reference kotlin/collections/CollectionsKt#subtract(+9).
348// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange.
349// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange().
350// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange().
351 .forEach { preloadAdapterPosition(it) }
352// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10).
353// ^^^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition().
354// ^^ reference local7
355
356 lastVisibleRange = visibleRange
357// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastVisibleRange.
358// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastVisibleRange().
359// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastVisibleRange().
360// ^^^^^^^^^^^^ reference local4
361 lastPreloadRange = preloadRange
362// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#lastPreloadRange.
363// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getLastPreloadRange().
364// ^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setLastPreloadRange().
365// ^^^^^^^^^^^^ reference local6
366 }
367
368 /**
369 * @receiver The number of pixels scrolled.
370 * @return True if this distance is large enough to be considered a fast fling.
371 */
372 private fun Int.isFling() = Math.abs(this) > FLING_THRESHOLD_PX
373// ^^^ reference kotlin/Int#
374// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#isFling(). private final fun kotlin.Int.isFling(): kotlin.Boolean
375// ^^^^ reference java/lang/Math#
376// ^^^ reference java/lang/Math#abs().
377// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isFling().
378// ^ reference kotlin/Int#compareTo(+3).
379// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#FLING_THRESHOLD_PX.
380// ^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#getFLING_THRESHOLD_PX().
381
382 private fun calculatePreloadRange(
383// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange(). private final fun calculatePreloadRange(firstVisiblePosition: kotlin.Int, lastVisiblePosition: kotlin.Int, isIncreasing: kotlin.Boolean): kotlin.ranges.IntProgression
384 firstVisiblePosition: Int,
385// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(firstVisiblePosition) value-parameter firstVisiblePosition: kotlin.Int
386// ^^^ reference kotlin/Int#
387 lastVisiblePosition: Int,
388// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(lastVisiblePosition) value-parameter lastVisiblePosition: kotlin.Int
389// ^^^ reference kotlin/Int#
390 isIncreasing: Boolean
391// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing) value-parameter isIncreasing: kotlin.Boolean
392// ^^^^^^^ reference kotlin/Boolean#
393 ): IntProgression {
394// ^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression#
395 val from = if (isIncreasing) lastVisiblePosition + 1 else firstVisiblePosition - 1
396// ^^^^ definition local8 val from: kotlin.Int
397// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing)
398// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(lastVisiblePosition)
399// ^ reference kotlin/Int#plus(+3).
400// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(firstVisiblePosition)
401// ^ reference kotlin/Int#minus(+3).
402 val to = from + if (isIncreasing) maxItemsToPreload - 1 else 1 - maxItemsToPreload
403// ^^ definition local9 val to: kotlin.Int
404// ^^^^ reference local8
405// ^ reference kotlin/Int#plus(+3).
406// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing)
407// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload.
408// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload().
409// ^ reference kotlin/Int#minus(+3).
410// ^ reference kotlin/Int#minus(+3).
411// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#maxItemsToPreload.
412// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getMaxItemsToPreload().
413
414 return IntProgression.fromClosedRange(
415// ^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression#Companion#
416// ^^^^^^^^^^^^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange().
417 rangeStart = from.clampToAdapterRange(),
418// ^^^^^^^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange().(rangeStart)
419// ^^^^ reference local8
420// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange().
421 rangeEnd = to.clampToAdapterRange(),
422// ^^^^^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange().(rangeEnd)
423// ^^ reference local9
424// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange().
425 step = if (isIncreasing) 1 else -1
426// ^^^^ reference kotlin/ranges/IntProgression#Companion#fromClosedRange().(step)
427// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#calculatePreloadRange().(isIncreasing)
428// ^ reference kotlin/Int#unaryMinus().
429 )
430 }
431
432 /** Check if an item index is valid. It may not be if the adapter is empty, or if adapter changes have been dispatched since the last layout pass. */
433 private fun Int.isInvalid() = this == RecyclerView.NO_POSITION || this >= totalItemCount
434// ^^^ reference kotlin/Int#
435// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#isInvalid(). private final fun kotlin.Int.isInvalid(): kotlin.Boolean
436// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isInvalid().
437// ^^ reference kotlin/Int#equals().
438// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#isInvalid().
439// ^^ reference kotlin/Int#compareTo(+3).
440// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount.
441// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount().
442// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount().
443
444 private fun Int.clampToAdapterRange() = min(totalItemCount - 1, max(this, 0))
445// ^^^ reference kotlin/Int#
446// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange(). private final fun kotlin.Int.clampToAdapterRange(): kotlin.Int
447// ^^^ reference kotlin/math/MathKt#min(+2).
448// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#totalItemCount.
449// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getTotalItemCount().
450// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#setTotalItemCount().
451// ^ reference kotlin/Int#minus(+3).
452// ^^^ reference kotlin/math/MathKt#max(+2).
453// ^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#clampToAdapterRange().
454
455 private fun preloadAdapterPosition(position: Int) {
456// ^^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition(). private final fun preloadAdapterPosition(position: kotlin.Int)
457// ^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition().(position) value-parameter position: kotlin.Int
458// ^^^ reference kotlin/Int#
459 @Suppress("UNCHECKED_CAST")
460// ^^^^^^^^ reference kotlin/Suppress#`<init>`().
461 val epoxyModel = adapter.getModelForPositionInternal(position) as? EpoxyModel<Any>
462// ^^^^^^^^^^ definition local10 val epoxyModel: kotlin.Nothing
463// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#adapter.
464// ^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getAdapter().
465// ^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition().(position)
466// ^^^ reference kotlin/Any#
467 ?: return
468
469 @Suppress("UNCHECKED_CAST")
470// ^^^^^^^^ reference kotlin/Suppress#`<init>`().
471 val preloader =
472// ^^^^^^^^^ definition local11 val preloader: com.airbnb.epoxy.preload.EpoxyModelPreloader<[ERROR : EpoxyModel<*>]<out [ERROR : *]>, com.airbnb.epoxy.preload.ViewMetadata?, P>
473 modelPreloaders[epoxyModel::class.java] as? EpoxyModelPreloader<EpoxyModel<*>, ViewMetadata?, P>
474// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#modelPreloaders.
475// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getModelPreloaders().
476// ^^^^^^^^^^ reference local10
477// ^^^^ reference kotlin/jvm/JvmClassMappingKt#java.
478// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
479// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#
480// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#[P]
481 ?: return
482
483 viewDataCache
484// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#viewDataCache.
485// ^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getViewDataCache().
486 .dataForModel(preloader, epoxyModel, position)
487// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadableViewDataProvider#dataForModel().
488// ^^^^^^^^^ reference local11
489// ^^^^^^^^^^ reference local10
490// ^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#preloadAdapterPosition().(position)
491 .forEach { viewData ->
492// ^^^^^^^ reference kotlin/collections/CollectionsKt#forEach(+10).
493// ^^^^^^^^ definition local12 value-parameter viewData: com.airbnb.epoxy.preload.ViewData<com.airbnb.epoxy.preload.ViewMetadata?>
494 val preloadTarget = requestHolderFactory.next()
495// ^^^^^^^^^^^^^ definition local13 val preloadTarget: P
496// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#requestHolderFactory.
497// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getRequestHolderFactory().
498// ^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#next().
499 preloader.startPreload(epoxyModel, preloadTarget, viewData)
500// ^^^^^^^^^ reference local11
501// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#startPreload().
502// ^^^^^^^^^^ reference local10
503// ^^^^^^^^^^^^^ reference local13
504// ^^^^^^^^ reference local12
505 }
506 }
507
508 /**
509 * Cancels all current preload requests in progress.
510 */
511 fun cancelPreloadRequests() {
512// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#cancelPreloadRequests(). public final fun cancelPreloadRequests()
513 requestHolderFactory.clearAll()
514// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#requestHolderFactory.
515// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#getRequestHolderFactory().
516// ^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadTargetProvider#clearAll().
517 }
518
519 companion object {
520// ^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion# public companion object
521
522 /**
523 *
524 * Represents a threshold for fast scrolling.
525 * This is a bit arbitrary and was determined by looking at values while flinging vs slow scrolling.
526 * Ideally it would be based on DP, but this is simpler.
527 */
528 private const val FLING_THRESHOLD_PX = 75
529// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#FLING_THRESHOLD_PX. private const final val FLING_THRESHOLD_PX: kotlin.Int
530// ^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#getFLING_THRESHOLD_PX(). private const final val FLING_THRESHOLD_PX: kotlin.Int
531
532 /**
533 * Helper to create a preload scroll listener. Add the result to your RecyclerView.
534 * for different models or content types.
535 *
536 * @param maxItemsToPreload How many items to prefetch ahead of the last bound item
537 * @param errorHandler Called when the preloader encounters an exception. By default this throws only
538 * if the app is not in a debuggle model
539 * @param modelPreloader Describes how view content for the EpoxyModel should be preloaded
540 * @param requestHolderFactory Should create and return a new [PreloadRequestHolder] each time it is invoked
541 */
542 fun <P : PreloadRequestHolder> with(
543// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P] <P : com.airbnb.epoxy.preload.PreloadRequestHolder>
544// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder#
545// ^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(). public final fun <P : com.airbnb.epoxy.preload.PreloadRequestHolder> with(epoxyController: [ERROR : EpoxyController], requestHolderFactory: () -> P, errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */, maxItemsToPreload: kotlin.Int, modelPreloader: com.airbnb.epoxy.preload.EpoxyModelPreloader<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>, out com.airbnb.epoxy.preload.ViewMetadata?, out P>): com.airbnb.epoxy.preload.EpoxyPreloader<P>
546 epoxyController: EpoxyController,
547// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(epoxyController) value-parameter epoxyController: [ERROR : EpoxyController]
548 requestHolderFactory: () -> P,
549// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(requestHolderFactory) value-parameter requestHolderFactory: () -> P
550// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P]
551 errorHandler: PreloadErrorHandler,
552// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(errorHandler) value-parameter errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */
553// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler#
554 maxItemsToPreload: Int,
555// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(maxItemsToPreload) value-parameter maxItemsToPreload: kotlin.Int
556// ^^^ reference kotlin/Int#
557 modelPreloader: EpoxyModelPreloader<out EpoxyModel<*>, out ViewMetadata?, out P>
558// ^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(modelPreloader) value-parameter modelPreloader: com.airbnb.epoxy.preload.EpoxyModelPreloader<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>, out com.airbnb.epoxy.preload.ViewMetadata?, out P>
559// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
560// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#
561// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P]
562 ): EpoxyPreloader<P> =
563// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#
564// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().[P]
565 with(
566 epoxyController,
567// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(epoxyController)
568 requestHolderFactory,
569// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(requestHolderFactory)
570 errorHandler,
571// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(errorHandler)
572 maxItemsToPreload,
573// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(maxItemsToPreload)
574 listOf(modelPreloader)
575// ^^^^^^ reference kotlin/collections/CollectionsKt#listOf().
576// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with().(modelPreloader)
577 )
578
579 fun <P : PreloadRequestHolder> with(
580// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P] <P : com.airbnb.epoxy.preload.PreloadRequestHolder>
581// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder#
582// ^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1). public final fun <P : com.airbnb.epoxy.preload.PreloadRequestHolder> with(epoxyController: [ERROR : EpoxyController], requestHolderFactory: () -> P, errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */, maxItemsToPreload: kotlin.Int, modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>, out com.airbnb.epoxy.preload.ViewMetadata?, out P>>): com.airbnb.epoxy.preload.EpoxyPreloader<P>
583 epoxyController: EpoxyController,
584// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(epoxyController) value-parameter epoxyController: [ERROR : EpoxyController]
585 requestHolderFactory: () -> P,
586// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(requestHolderFactory) value-parameter requestHolderFactory: () -> P
587// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P]
588 errorHandler: PreloadErrorHandler,
589// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(errorHandler) value-parameter errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */
590// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler#
591 maxItemsToPreload: Int,
592// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(maxItemsToPreload) value-parameter maxItemsToPreload: kotlin.Int
593// ^^^ reference kotlin/Int#
594 modelPreloaders: List<EpoxyModelPreloader<out EpoxyModel<*>, out ViewMetadata?, out P>>
595// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(modelPreloaders) value-parameter modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>, out com.airbnb.epoxy.preload.ViewMetadata?, out P>>
596// ^^^^ reference kotlin/collections/List#
597// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
598// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#
599// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P]
600 ): EpoxyPreloader<P> {
601// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#
602// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).[P]
603
604 return EpoxyPreloader(
605 epoxyController,
606// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(epoxyController)
607 requestHolderFactory,
608// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(requestHolderFactory)
609 errorHandler,
610// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(errorHandler)
611 maxItemsToPreload,
612// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(maxItemsToPreload)
613 modelPreloaders
614// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+1).(modelPreloaders)
615 )
616 }
617
618 /** Helper to create a preload scroll listener. Add the result to your RecyclerView. */
619 fun <P : PreloadRequestHolder> with(
620// ^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P] <P : com.airbnb.epoxy.preload.PreloadRequestHolder>
621// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadRequestHolder#
622// ^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2). public final fun <P : com.airbnb.epoxy.preload.PreloadRequestHolder> with(epoxyAdapter: [ERROR : EpoxyAdapter], requestHolderFactory: () -> P, errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */, maxItemsToPreload: kotlin.Int, modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>, out com.airbnb.epoxy.preload.ViewMetadata?, out P>>): com.airbnb.epoxy.preload.EpoxyPreloader<P>
623 epoxyAdapter: EpoxyAdapter,
624// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(epoxyAdapter) value-parameter epoxyAdapter: [ERROR : EpoxyAdapter]
625 requestHolderFactory: () -> P,
626// ^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(requestHolderFactory) value-parameter requestHolderFactory: () -> P
627// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P]
628 errorHandler: PreloadErrorHandler,
629// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(errorHandler) value-parameter errorHandler: com.airbnb.epoxy.preload.PreloadErrorHandler /* = ([ERROR : Context], kotlin.RuntimeException /* = java.lang.RuntimeException */) -> kotlin.Unit */
630// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/PreloadErrorHandler#
631 maxItemsToPreload: Int,
632// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(maxItemsToPreload) value-parameter maxItemsToPreload: kotlin.Int
633// ^^^ reference kotlin/Int#
634 modelPreloaders: List<EpoxyModelPreloader<out EpoxyModel<*>, out ViewMetadata?, out P>>
635// ^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(modelPreloaders) value-parameter modelPreloaders: kotlin.collections.List<com.airbnb.epoxy.preload.EpoxyModelPreloader<out [ERROR : EpoxyModel<*>]<out [ERROR : *]>, out com.airbnb.epoxy.preload.ViewMetadata?, out P>>
636// ^^^^ reference kotlin/collections/List#
637// ^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyModelPreloader#
638// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#
639// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P]
640 ): EpoxyPreloader<P> {
641// ^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#
642// ^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).[P]
643
644 return EpoxyPreloader(
645 epoxyAdapter,
646// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(epoxyAdapter)
647 requestHolderFactory,
648// ^^^^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(requestHolderFactory)
649 errorHandler,
650// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(errorHandler)
651 maxItemsToPreload,
652// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(maxItemsToPreload)
653 modelPreloaders
654// ^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloader#Companion#with(+2).(modelPreloaders)
655 )
656 }
657 }
658}
659
660class EpoxyPreloadException(errorMessage: String) : RuntimeException(errorMessage)
661// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloadException# public final class EpoxyPreloadException : kotlin.RuntimeException /* = java.lang.RuntimeException */
662// ^^^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloadException#`<init>`(). public constructor EpoxyPreloadException(errorMessage: kotlin.String)
663// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloadException#`<init>`().(errorMessage) value-parameter errorMessage: kotlin.String
664// ^^^^^^ reference kotlin/String#
665// ^^^^^^^^^^^^^^^^ reference kotlin/RuntimeException#`<init>`(+1).
666// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/EpoxyPreloadException#`<init>`().(errorMessage)
667
668typealias PreloadErrorHandler = (Context, RuntimeException) -> Unit
669// ^^^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/PreloadErrorHandler# public typealias PreloadErrorHandler = ([ERROR : Context], kotlin.RuntimeException) -> kotlin.Unit
670// ^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloaderKt#`<no name provided>`. val <no name provided>: kotlin.RuntimeException
671// ^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/EpoxyPreloaderKt#`<no name provided>`. val <no name provided>: kotlin.RuntimeException
672// ^^^^^^^^^^^^^^^^ reference kotlin/RuntimeException#
673// ^^^^ reference kotlin/Unit#
674
675/**
676 * Data about an image view to be preloaded. This data is used to construct a Glide image request.
677 *
678 * @param metadata Any custom, additional data that the [EpoxyModelPreloader] chooses to provide that may be necessary to create the image request.
679 */
680class ViewData<out U : ViewMetadata?>(
681// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData# public final class ViewData<out U : com.airbnb.epoxy.preload.ViewMetadata?>
682// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#`<init>`(). public constructor ViewData<out U : com.airbnb.epoxy.preload.ViewMetadata?>(viewId: kotlin.Int, width: kotlin.Int, height: kotlin.Int, metadata: U)
683// ^ definition com/airbnb/epoxy/preload/ViewData#[U] <out U : com.airbnb.epoxy.preload.ViewMetadata?>
684// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#
685 @IdRes val viewId: Int,
686// ^^^^^ reference androidx/annotation/IdRes#`<init>`().
687// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#viewId. public final val viewId: kotlin.Int
688// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#getViewId(). public final val viewId: kotlin.Int
689// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#`<init>`().(viewId) value-parameter viewId: kotlin.Int
690// ^^^ reference kotlin/Int#
691 @Px val width: Int,
692// ^^ reference androidx/annotation/Px#`<init>`().
693// ^^^^^ definition com/airbnb/epoxy/preload/ViewData#width. public final val width: kotlin.Int
694// ^^^^^ definition com/airbnb/epoxy/preload/ViewData#getWidth(). public final val width: kotlin.Int
695// ^^^^^ definition com/airbnb/epoxy/preload/ViewData#`<init>`().(width) value-parameter width: kotlin.Int
696// ^^^ reference kotlin/Int#
697 @Px val height: Int,
698// ^^ reference androidx/annotation/Px#`<init>`().
699// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#height. public final val height: kotlin.Int
700// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#getHeight(). public final val height: kotlin.Int
701// ^^^^^^ definition com/airbnb/epoxy/preload/ViewData#`<init>`().(height) value-parameter height: kotlin.Int
702// ^^^ reference kotlin/Int#
703 val metadata: U
704// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#metadata. public final val metadata: U
705// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#getMetadata(). public final val metadata: U
706// ^^^^^^^^ definition com/airbnb/epoxy/preload/ViewData#`<init>`().(metadata) value-parameter metadata: U
707// ^ reference com/airbnb/epoxy/preload/ViewData#[U]
708)
709
710interface ViewMetadata {
711// ^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/ViewMetadata# public interface ViewMetadata
712 companion object {
713// ^^^^^^^^^ definition com/airbnb/epoxy/preload/ViewMetadata#Companion# public companion object
714 fun getDefault(view: View): ViewMetadata? {
715// ^^^^^^^^^^ definition com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault(). public final fun getDefault(view: [ERROR : View]): com.airbnb.epoxy.preload.ViewMetadata?
716// ^^^^ definition com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault().(view) value-parameter view: [ERROR : View]
717// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#
718 return when (view) {
719// ^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault().(view)
720 is ImageView -> ImageViewMetadata(view.scaleType)
721// ^^^^^^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ImageViewMetadata#`<init>`().
722// ^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#Companion#getDefault().(view)
723 else -> null
724 }
725 }
726 }
727}
728
729/**
730 * Default implementation of [ViewMetadata] for an ImageView.
731 * This data can help the preload request know how to configure itself.
732 */
733open class ImageViewMetadata(
734// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata# public open class ImageViewMetadata : com.airbnb.epoxy.preload.ViewMetadata
735// ^^^^^^^^^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#`<init>`(). public constructor ImageViewMetadata(scaleType: [ERROR : ImageView.ScaleType])
736 val scaleType: ImageView.ScaleType
737// ^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#scaleType. public final val scaleType: [ERROR : ImageView.ScaleType]
738// ^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#getScaleType(). public final val scaleType: [ERROR : ImageView.ScaleType]
739// ^^^^^^^^^ definition com/airbnb/epoxy/preload/ImageViewMetadata#`<init>`().(scaleType) value-parameter scaleType: [ERROR : ImageView.ScaleType]
740) : ViewMetadata
741// ^^^^^^^^^^^^ reference com/airbnb/epoxy/preload/ViewMetadata#