├── .gitignore ├── .idea ├── .gitignore ├── .name ├── compiler.xml ├── copyright │ ├── compose_paging.xml │ └── profiles_settings.xml ├── deploymentTargetDropDown.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── kotlinc.xml ├── migrations.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── yusufarisoy │ │ └── composepaging │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── yusufarisoy │ │ │ └── composepagingapp │ │ │ ├── App.kt │ │ │ ├── data │ │ │ ├── api │ │ │ │ └── RickAndMortyServiceApi.kt │ │ │ ├── entity │ │ │ │ ├── BaseResponse.kt │ │ │ │ ├── Character.kt │ │ │ │ ├── CharacterUiModel.kt │ │ │ │ ├── CharactersUiModel.kt │ │ │ │ ├── HomeUiModel.kt │ │ │ │ ├── Info.kt │ │ │ │ ├── Location.kt │ │ │ │ ├── Origin.kt │ │ │ │ ├── SearchUiModel.kt │ │ │ │ └── mapper │ │ │ │ │ └── CharactersResponseToCharactersUiModelMapper.kt │ │ │ └── repository │ │ │ │ ├── CharactersRepository.kt │ │ │ │ └── datasource │ │ │ │ ├── CharacterDataSourceImpl.kt │ │ │ │ └── CharactersDataSource.kt │ │ │ ├── di │ │ │ └── NetworkModule.kt │ │ │ ├── domain │ │ │ ├── FetchCharactersUseCase.kt │ │ │ ├── HomePagingSource.kt │ │ │ └── SearchPagingSource.kt │ │ │ ├── ui │ │ │ ├── MainActivity.kt │ │ │ ├── home │ │ │ │ ├── HomeFragment.kt │ │ │ │ ├── HomeState.kt │ │ │ │ └── HomeViewModel.kt │ │ │ ├── search │ │ │ │ ├── SearchFragment.kt │ │ │ │ ├── SearchState.kt │ │ │ │ └── SearchViewModel.kt │ │ │ └── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Shape.kt │ │ │ │ ├── Theme.kt │ │ │ │ └── Typography.kt │ │ │ ├── util │ │ │ ├── BaseViewModel.kt │ │ │ ├── BaseViewModelExt.kt │ │ │ ├── FlowExt.kt │ │ │ ├── Mapper.kt │ │ │ ├── NetworkCall.kt │ │ │ ├── NetworkResponse.kt │ │ │ └── UseCase.kt │ │ │ └── view │ │ │ ├── common │ │ │ ├── Character.kt │ │ │ ├── Error.kt │ │ │ └── Loading.kt │ │ │ ├── home │ │ │ └── Home.kt │ │ │ └── search │ │ │ └── Search.kt │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── ic_circle.xml │ │ ├── ic_delete.xml │ │ ├── ic_favorite_fill.xml │ │ ├── ic_favorite_outline.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_search.xml │ │ ├── ic_swipe_to_delete.xml │ │ └── search_placeholder.png │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── values-night │ │ └── themes.xml │ │ ├── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── themes.xml │ │ └── xml │ │ ├── backup_rules.xml │ │ └── data_extraction_rules.xml │ └── test │ └── java │ └── com │ └── yusufarisoy │ └── composepaging │ └── ExampleUnitTest.kt ├── build.gradle ├── buildSrc ├── build.gradle.kts ├── build │ ├── classes │ │ └── kotlin │ │ │ └── main │ │ │ ├── Libs.class │ │ │ ├── META-INF │ │ │ └── buildSrc.kotlin_module │ │ │ └── Versions.class │ ├── kotlin │ │ ├── buildSrcjar-classes.txt │ │ └── compileKotlin │ │ │ ├── build-history.bin │ │ │ ├── caches-jvm │ │ │ ├── inputs │ │ │ │ ├── source-to-output.tab │ │ │ │ ├── source-to-output.tab.keystream │ │ │ │ ├── source-to-output.tab.keystream.len │ │ │ │ ├── source-to-output.tab.len │ │ │ │ ├── source-to-output.tab.values.at │ │ │ │ ├── source-to-output.tab_i │ │ │ │ └── source-to-output.tab_i.len │ │ │ ├── jvm │ │ │ │ └── kotlin │ │ │ │ │ ├── class-attributes.tab │ │ │ │ │ ├── class-attributes.tab.keystream │ │ │ │ │ ├── class-attributes.tab.keystream.len │ │ │ │ │ ├── class-attributes.tab.len │ │ │ │ │ ├── class-attributes.tab.values.at │ │ │ │ │ ├── class-attributes.tab_i │ │ │ │ │ ├── class-attributes.tab_i.len │ │ │ │ │ ├── class-fq-name-to-source.tab │ │ │ │ │ ├── class-fq-name-to-source.tab.keystream │ │ │ │ │ ├── class-fq-name-to-source.tab.keystream.len │ │ │ │ │ ├── class-fq-name-to-source.tab.len │ │ │ │ │ ├── class-fq-name-to-source.tab.values.at │ │ │ │ │ ├── class-fq-name-to-source.tab_i │ │ │ │ │ ├── class-fq-name-to-source.tab_i.len │ │ │ │ │ ├── constants.tab │ │ │ │ │ ├── constants.tab.keystream │ │ │ │ │ ├── constants.tab.keystream.len │ │ │ │ │ ├── constants.tab.len │ │ │ │ │ ├── constants.tab.values │ │ │ │ │ ├── constants.tab.values.at │ │ │ │ │ ├── constants.tab.values.s │ │ │ │ │ ├── constants.tab_i │ │ │ │ │ ├── constants.tab_i.len │ │ │ │ │ ├── internal-name-to-source.tab │ │ │ │ │ ├── internal-name-to-source.tab.keystream │ │ │ │ │ ├── internal-name-to-source.tab.keystream.len │ │ │ │ │ ├── internal-name-to-source.tab.len │ │ │ │ │ ├── internal-name-to-source.tab.values.at │ │ │ │ │ ├── internal-name-to-source.tab_i │ │ │ │ │ ├── internal-name-to-source.tab_i.len │ │ │ │ │ ├── proto.tab │ │ │ │ │ ├── proto.tab.keystream │ │ │ │ │ ├── proto.tab.keystream.len │ │ │ │ │ ├── proto.tab.len │ │ │ │ │ ├── proto.tab.values.at │ │ │ │ │ ├── proto.tab_i │ │ │ │ │ ├── proto.tab_i.len │ │ │ │ │ ├── source-to-classes.tab │ │ │ │ │ ├── source-to-classes.tab.keystream │ │ │ │ │ ├── source-to-classes.tab.keystream.len │ │ │ │ │ ├── source-to-classes.tab.len │ │ │ │ │ ├── source-to-classes.tab.values.at │ │ │ │ │ ├── source-to-classes.tab_i │ │ │ │ │ └── source-to-classes.tab_i.len │ │ │ └── lookups │ │ │ │ ├── counters.tab │ │ │ │ ├── file-to-id.tab │ │ │ │ ├── file-to-id.tab.keystream │ │ │ │ ├── file-to-id.tab.keystream.len │ │ │ │ ├── file-to-id.tab.len │ │ │ │ ├── file-to-id.tab.values.at │ │ │ │ ├── file-to-id.tab_i │ │ │ │ ├── file-to-id.tab_i.len │ │ │ │ ├── id-to-file.tab │ │ │ │ ├── id-to-file.tab.keystream │ │ │ │ ├── id-to-file.tab.keystream.len │ │ │ │ ├── id-to-file.tab.len │ │ │ │ ├── id-to-file.tab.values.at │ │ │ │ ├── id-to-file.tab_i │ │ │ │ ├── id-to-file.tab_i.len │ │ │ │ ├── lookups.tab │ │ │ │ ├── lookups.tab.keystream │ │ │ │ ├── lookups.tab.keystream.len │ │ │ │ ├── lookups.tab.len │ │ │ │ ├── lookups.tab.values.at │ │ │ │ ├── lookups.tab_i │ │ │ │ └── lookups.tab_i.len │ │ │ └── last-build.bin │ ├── libs │ │ └── buildSrc.jar │ ├── pluginUnderTestMetadata │ │ └── plugin-under-test-metadata.properties │ ├── reports │ │ └── plugin-development │ │ │ └── validation-report.txt │ └── tmp │ │ └── jar │ │ └── MANIFEST.MF └── src │ └── main │ └── java │ └── Dependencies.kt ├── composepaging ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── yusufarisoy │ │ └── composepaging │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── yusufarisoy │ │ └── composepaging │ │ ├── BasePager.kt │ │ ├── ComposePager.kt │ │ ├── ComposePagerWithQuery.kt │ │ ├── ComposePagingExt.kt │ │ ├── pagingdata │ │ └── ComposePagingData.kt │ │ └── pagingsource │ │ ├── ComposePagingSource.kt │ │ └── ComposePagingSourceWithQuery.kt │ └── test │ └── java │ └── com │ └── yusufarisoy │ └── composepaging │ └── ExampleUnitTest.kt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | ComposePagingApp -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/copyright/compose_paging.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/deploymentTargetDropDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 32 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ComposePaging 2 | ComposePaging library for [Jetpack Compose](https://developer.android.com/jetpack/compose). 3 | 4 | ## About 5 | ComposePaging is a paging library for Compose. ComposePaging makes it possible to use dynamic Composables as **`skippable`** for **better performance** like it should be. 6 | 7 | ## Metrics 8 | Metrics is the way of measuring the performance of composables. Ideally a composable method should be `restartable` and `skipabble` for the compiler to work with best performance. 9 |

10 | 11 | Besides being lazy, `ComposePaging` Feed items are easy to maintain and it's easy to make them `restartable` and `skipabble` while being updatable for better performance for your Android application. 12 | 13 | ## Attributes 14 | | Attribute | Description | 15 | |----- | --| 16 | | `prefetchDistance` | Defines the item distance to request the next page before reaching the bottom | 17 | | `initialPage` | Defines the initial page for the first request | 18 | 19 | ## Demo 20 | Composables items in the pages are updated without having any performance issues. 21 | | ComposePager | ComposePagerWithQuery | 22 | | ------ | ------ | 23 | |