mikepenz/FastAdapter
65.3
Adequate · 28 September 2026
14k
lines of production code
Kotlin
primary language
2
measurements over time
What this system is
This system is the FastAdapter library, a Kotlin-based Android component designed to simplify the implementation of complex RecyclerViews. It provides core capabilities for managing item selection, drag-and-drop reordering, and swipe gestures, while offering specialized extensions for hierarchical expandable lists, infinite scrolling, and integration with AndroidX Paging. The project also includes utility modules for efficient list diffing, UI dialogs, and view binding to streamline adapter development.
How it got here
2015 — Initial repository setup and build configuration
4 changes.
The project was initialized with core documentation, build infrastructure, and a sample application structure. The development environment was configured using Gradle 7.5.1 and Android SDK 33, establishing the foundational modules and dependencies for the FastAdapter library.
2019–2022 — Extension modules and modernization
9 changes.
This period focused on expanding the FastAdapter library with a comprehensive suite of new extension modules, including support for expandable lists, paging, drag-and-drop, swipe gestures, and UI dialogs. The sample application was modernized to adopt Kotlin ViewBinding, Coil for image loading, and updated item base classes. These changes significantly broadened the library's capabilities for handling complex list interactions and improved developer ergonomics.
Features
Initial release of the Expandable extension for FastAdapter
This change introduces the \fastadapter-extensions-expandable\ module, providing a new \ExpandableExtension\ that enables hierarchical, expandable/collapsible lists within FastAdapter. The extension allows users to manage nested item structures, toggle expansion states, and enforce single-expanded-item behavior. It includes base item classes (\AbstractExpandableItem\, \ModelAbstractExpandableItem\) to simplify creating expandable nodes, utility classes for flattening item hierarchies and managing sub-item selections, and comprehensive test coverage for core expansion and collapse operations.
fastadapter-extensions-expandable · high confidence
Initial repository structure and documentation
The repository is initialized with core documentation files including a README detailing the FastAdapter library's features (selection, expandable items, drag & drop, paging), a comprehensive MIGRATION guide covering upgrades from v1 through v5, and a CONTRIBUTORS list. Additionally, standard build infrastructure files such as the Gradle wrapper scripts (gradlew, gradlew.bat), a release automation script, and a .gitignore are added to support the project's development workflow.
(repo-wide) · high confidence
Introduce swipe gesture extension for FastAdapter items
This release adds the \fastadapter-extensions-swipe\ module, enabling swipe-to-action behaviors on FastAdapter list items. It provides two callback implementations: \SimpleSwipeCallback\ for standard swipe actions (e.g., delete) with customizable background colors, leave-behind drawables, sensitivity, and surface thresholds; and \SimpleSwipeDrawerCallback\ for drawer-style swipes that expose underlying content up to a configurable width. The extension uses item IDs to track swipe states, supports directional constraints via the \ISwipeable\ interface, and includes a touch transmitter to ensure clicks on exposed drawer content are handled correctly.
fastadapter-extensions-swipe · high confidence
New FastAdapter extension modules for binding, diffing, and UI dialogs
This release introduces three new extension modules for the FastAdapter library. The \fastadapter-binding\ module adds Kotlin support for Android ViewBinding, providing abstract item classes and convenient extension functions for click, long-click, and touch event hooks. The \fastadapter-diff\ module integrates DiffUtil to enable efficient, animated list updates with a customizable callback interface. The \fastadapter-ui\ module provides ready-to-use UI components, including \FastAdapterDialog\ and \FastAdapterBottomSheetDialog\ for displaying item lists in dialogs, along with utility classes for handling images and drawable states.
fastadapter-extensions-binding, fastadapter-extensions-diff, fastadapter-extensions-ui · high confidence
New Kotlin extensions for scrolling, item wrapping, and list helpers
This release adds the \fastadapter-extensions-scroll\ and \fastadapter-extensions-utils\ modules, providing new Kotlin-based utilities for the FastAdapter library. The scroll extension introduces \EndlessRecyclerOnScrollListener\ and \EndlessRecyclerOnTopScrollListener\ to handle infinite scrolling and top-loading scenarios. The utils extension provides \AbstractWrapAdapter\ and \WrapAdapter\ for inserting custom items into existing adapters, \FastItemAdapter\ as a simplified Kotlin adapter, and helpers including \ActionModeHelper\ for contextual action bars, \HeaderHelper\ for sectioned lists, \RangeSelectorHelper\ for multi-select ranges, and \DragDropUtil\ for drag-and-drop operations.
fastadapter-extensions-scroll, fastadapter-extensions-utils · high confidence
New PagedModelAdapter extension for Android Paging support
This release introduces the fastadapter-extensions-paged module, providing a PagedModelAdapter and PagedItemListImpl that integrate with the AndroidX Paging library. This allows developers to bind PagedLists directly to FastAdapter RecyclerViews, handling asynchronous data loading and placeholder interception automatically. The extension is marked as experimental and includes necessary ProGuard rules and manifest definitions for the new artifact.
fastadapter-extensions-paged · high confidence
New sample activities added to showcase FastAdapter features
The sample application now includes several new activities demonstrating specific FastAdapter capabilities: AdvancedSampleActivity for sticky headers, CheckBoxSampleActivity for selection modes, DiffUtilActivity for efficient list updates, DragAndDropActivity for item reordering, EndlessScrollListActivity for infinite scrolling, ExpandableMultiselectDeleteSampleActivity for complex expandable selection, ExpandableSampleActivity for nested expandable lists, IconGridActivity for icon grids, and ImageListActivity for image lists. These samples provide concrete examples of how to integrate and configure FastAdapter for various common use cases.
app/src/main/java · high confidence
Behavioural changes
Configured Bundler to install gems in vendor/bundle
The project now configures Bundler to install Ruby gems into the local vendor/bundle directory instead of the global system path. This ensures that dependencies are isolated within the project directory, making the environment more portable and preventing conflicts with other projects or system-wide gems.
.bundle · high confidence
Refined drag-and-drop behavior and interface definitions
The drag extension now enforces that only items implementing the new IDraggable interface can be dragged, and it ensures the adapter position is only updated if a move is successful. Additionally, the callback mechanism for drag events has been restructured, introducing specific lifecycle hooks (start, stop, move, drop) via ItemTouchCallback to provide more granular control over drag interactions.
fastadapter-extensions-drag · high confidence
Sample app modernizes UI components and image loading
The sample application has been updated to use the new BaseItem and ModelBaseItem classes, replacing the deprecated AbstractItem and ModelAbstractItem. Additionally, image loading has been migrated from Glide to Coil, and the app now utilizes ViewBinding instead of Kotlin synthetic properties for view access.
fastadapter · high confidence
Dependencies
Upgrade Gradle wrapper to version 7.5.1
The project's Gradle wrapper has been updated to use Gradle 7.5.1. This change ensures that builds are executed with a specific, stable version of the Gradle build tool, improving consistency across different development environments and CI pipelines by removing reliance on whatever version of Gradle might be installed globally on a developer's machine.
gradle · high confidence
Upgrade to Gradle 7.5.1 and Android SDK 33 with updated library dependencies
The build environment has been upgraded to Gradle 7.5.1 and Android Gradle Plugin 7.3.0, targeting Android SDK 33 (compileSdk, targetSdk, buildTools). Key library dependencies have been updated, including Kotlin 1.7.20, Material Components 1.6.1, AppCompat 1.5.1, RecyclerView 1.2.1, Room 2.4.3, and MaterialDrawer 9.0.1. The sample app now uses ViewBinding and DataBinding, and the project structure includes dedicated modules for FastAdapter extensions (binding, diff, drag, expandable, paged, scroll, swipe, ui, utils).
(dependencies) · high confidence
Housekeeping
Initial project configuration and build rules
The app module now includes a .gitignore file to exclude the /build directory from version control and a proguard-rules.pro file to define code shrinking and obfuscation settings for the Android build process.
app · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 65 → 65 (+0.1)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 95 → 95 (+0.0)
- Architecture 100 → 95 (-5.3)
- Maturity 59 → 59 (+0.0)
- Readiness 65 → 68 (+2.5)
- Security 62 → 62 (+0.0)
Resolved (3)
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
New (5)
- Low cohesion: SimpleItem (LCOM4 5) (app/src/main/java/com/mikepenz/fastadapter/app/items/SimpleItem.kt)
- Low cohesion: SimpleSubItem (LCOM4 4) (app/src/main/java/com/mikepenz/fastadapter/app/items/expandable/SimpleSubItem.kt)
- Low cohesion: SwipeableDrawerItem (LCOM4 4) (app/src/main/java/com/mikepenz/fastadapter/app/items/SwipeableDrawerItem.kt)
- Low cohesion: SwipeableItem (LCOM4 4) (app/src/main/java/com/mikepenz/fastadapter/app/items/SwipeableItem.kt)
- No ADRs found
Architecture
- Containers 0 added · 0 removed · contexts 5 added · 0 removed · edges 10 added · 0 removed
Added bounded contexts (5)
- app
- fastadapter-extensions-expandable
- fastadapter-extensions-scroll
- fastadapter-extensions-ui
- fastadapter-extensions-utils
Added dependency edges (10)
- app → fastadapter
- app → fastadapter-extensions-expandable
- app → fastadapter-extensions-scroll
- app → fastadapter-extensions-ui
- app → fastadapter-extensions-utils
- fastadapter-extensions-expandable → fastadapter
- fastadapter-extensions-scroll → fastadapter
- fastadapter-extensions-ui → fastadapter
- fastadapter-extensions-utils → fastadapter
- fastadapter-extensions-utils → fastadapter-extensions-expandable
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
mikepenz/FastAdapter was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 98def5aa5e7a29ac3333625ee2e0f1722475fc9c — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.