Skip to content

Instantly share code, notes, and snippets.

@adrianhall
Last active May 15, 2018 20:41
Show Gist options
  • Save adrianhall/dd610ee3d2af484c98edcf790e289052 to your computer and use it in GitHub Desktop.
Save adrianhall/dd610ee3d2af484c98edcf790e289052 to your computer and use it in GitHub Desktop.
/**
* Load the initial items
*/
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Note>) {
Log.d(TAG, "loadInitial: key=${params.requestedInitialKey ?: "undefined"}, size=${params.requestedLoadSize}")
val pageSize = minOf(MAX_PAGE_SIZE, params.requestedLoadSize)
val firstItem = inRange(params.requestedInitialKey ?: 0,0, items.size)
val lastItem = inRange(firstItem + pageSize, 0, items.size)
Log.d(TAG, "loadInitial: firstItem = $firstItem, lastItem = $lastItem")
val data = if (firstItem == lastItem) emptyList<Note>() else items.subList(firstItem, lastItem)
if (params.placeholdersEnabled) {
callback.onResult(data, firstItem, items.size)
} else {
callback.onResult(data)
}
}
/**
* Load the next page
*/
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Note>) {
Log.d(TAG, "loadAfter: key=${params.key}, size=${params.requestedLoadSize}")
val pageSize = minOf(MAX_PAGE_SIZE, params.requestedLoadSize)
val firstItem = inRange(params.key + 1, 0, items.size)
val lastItem = inRange(firstItem + pageSize, 0, items.size)
Log.d(TAG, "loadAfter: firstItem = $firstItem, lastItem = $lastItem")
val data = if (firstItem == lastItem) emptyList<Note>() else items.subList(firstItem, lastItem)
callback.onResult(data)
}
/**
* Load the previous page
*/
override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Note>) {
Log.d(TAG, "loadAfter: key=${params.key}, size=${params.requestedLoadSize}")
val pageSize = minOf(MAX_PAGE_SIZE, params.requestedLoadSize)
val lastItem = inRange(params.key - 1, 0, items.size)
val firstItem = inRange(lastItem - pageSize, 0, items.size)
Log.d(TAG, "loadBefore: firstItem = $firstItem, lastItem = $lastItem")
val data = if (firstItem == lastItem) emptyList<Note>() else items.subList(firstItem, lastItem)
callback.onResult(data)
}
/**
* Obtain an item based on the position
*/
override fun getKey(item: Note): Int
= items.indexOfFirst { it.noteId == item.noteId }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment