1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.paging
18 
19 import java.util.ArrayList
20 
21 @Suppress("DEPRECATION")
22 class TestPositionalDataSource<T : Any>(list: List<T>) : PositionalDataSource<T>() {
23     private val list: List<T> = ArrayList(list)
24 
loadInitialnull25     override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<T>) {
26         val totalCount = list.size
27         val position = computeInitialLoadPosition(params, totalCount)
28         val loadSize = computeInitialLoadSize(params, position, totalCount)
29 
30         // for simplicity, we could return everything immediately,
31         // but we tile here since it's expected behavior
32         val sublist = list.subList(position, position + loadSize)
33         callback.onResult(sublist, position, totalCount)
34     }
35 
loadRangenull36     override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<T>) {
37         val end = minOf(list.size, params.startPosition + params.loadSize)
38         callback.onResult(list.subList(params.startPosition, end))
39     }
40 }
41