/* * Copyright 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package androidx.paging import androidx.arch.core.util.Function @Suppress("DEPRECATION") internal class WrapperPageKeyedDataSource( private val source: PageKeyedDataSource, private val listFunction: Function, List> ) : PageKeyedDataSource() { override val isInvalid get() = source.isInvalid override fun addInvalidatedCallback(onInvalidatedCallback: InvalidatedCallback) { source.addInvalidatedCallback(onInvalidatedCallback) } override fun removeInvalidatedCallback(onInvalidatedCallback: InvalidatedCallback) { source.removeInvalidatedCallback(onInvalidatedCallback) } override fun invalidate() = source.invalidate() override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback) { source.loadInitial( params, object : LoadInitialCallback() { override fun onResult( data: List, position: Int, totalCount: Int, previousPageKey: K?, nextPageKey: K? ) { val convertedData = convert(listFunction, data) callback.onResult( convertedData, position, totalCount, previousPageKey, nextPageKey ) } override fun onResult(data: List, previousPageKey: K?, nextPageKey: K?) { val convertedData = convert(listFunction, data) callback.onResult(convertedData, previousPageKey, nextPageKey) } } ) } override fun loadBefore(params: LoadParams, callback: LoadCallback) { source.loadBefore( params, object : LoadCallback() { override fun onResult(data: List, adjacentPageKey: K?) = callback.onResult(convert(listFunction, data), adjacentPageKey) } ) } override fun loadAfter(params: LoadParams, callback: LoadCallback) { source.loadAfter( params, object : LoadCallback() { override fun onResult(data: List, adjacentPageKey: K?) = callback.onResult(convert(listFunction, data), adjacentPageKey) } ) } }