Skip to content
CAI
Software that uses CAICheck a score

CymChad/BaseRecyclerViewAdapterHelper

51.9

Weak · 22 September 2026

7.3k

lines of production code

Kotlin

with Java

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Android demonstration application for the BaseRecyclerViewAdapterHelper (BRVAH) library, showcasing modern RecyclerView adapter patterns. It provides concrete examples of implementing efficient list updates, complex item interactions like drag-and-swipe, hierarchical node lists, and multi-type adapters using Kotlin and the new v4 adapter architecture. The app also illustrates utility features such as custom animations, empty states, and load-more behaviors.

How it got here

2016 — Modernization to Kotlin and Gradle Kotlin DSL

11 changes.

The project underwent a significant modernization of its build system and codebase, migrating from Java to Kotlin and from Groovy to Gradle Kotlin DSL. This period introduced a new v4 adapter architecture with modern Android features like AsyncListDiffer, while also cleaning up legacy code and dependencies.

2019–2022 — Demo app modernization and feature expansion

23 changes.

The project focused on modernizing the demo application by migrating code to Kotlin and integrating with the Adapter4 library. This period introduced comprehensive examples for new features including drag-and-swap, DiffUtil, animations, and header/footer management, while establishing a consistent UI foundation with base activities and toolbar widgets.

2023–2026 — multi-node list and build system updates

4 changes.

This period focused on introducing a new multi-node list feature, including a demo activity and adapter logic for hierarchical, expandable/collapsible node structures. Additionally, the project updated its build configuration to automatically provision JDK 21 via Gradle.

Features

Add BRVAHToolbar widget for consistent app header styling

A new BRVAHToolbar custom view has been added to the app module, providing a reusable header component with title display, back-action handling, and configurable height. This widget simplifies the creation of consistent navigation headers across the application.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/widget · high confidence

Add ItemClickAdapter for RecyclerView item and long-click interactions

A new ItemClickAdapter has been added to demonstrate item and long-click interactions using the BaseMultiItemAdapter. The adapter defines four view types (click, child, long-click, and long-click child) and registers their respective ViewHolders and binding logic, enabling the demo to handle different item types and their corresponding click events.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/itemclick/adapter · high confidence

A new Kotlin activity demonstrates how to use the QuickAdapterHelper to add header and footer views to a RecyclerView. The implementation includes window inset handling for edge-to-edge display and uses the new click event parameter definitions for better Kotlin code completion.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/headerfooter · high confidence

Add animation demo activity and adapter

The app now includes a new 'Animation Use' activity that demonstrates item animation effects. Users can select from various built-in animations (Alpha, Scale, Slide) or custom animations via a spinner, and toggle whether animations play only on the first load. The accompanying adapter renders list items with images and clickable text spans, supporting the animation features.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/animation · high confidence

Add demo activities for DataBinding and Drag & Swipe features

Added new demo activities to showcase library usage: DataBindingUseActivity demonstrates data binding integration with a RecyclerView, while DragAndSwipeUseActivity provides a navigation hub for various drag-and-swipe implementations. Both activities are updated to handle system bar insets for proper edge-to-edge display.

. · high confidence

Add drag-and-swipe adapter implementations for the demo app

The demo application now includes new adapter classes—DiffDragAndSwipeAdapter, DragAndSwipeAdapter, and HeaderDragAndSwipeAdapter—that demonstrate how to implement drag-and-swap functionality using the BaseQuickAdapter framework. These adapters handle item movement and removal callbacks, allowing users to interactively reorder and delete list items within the demo.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/adapter · high confidence

Add drag-and-swipe demo activities for RecyclerView

Added new demo activities in the dragswipe package to showcase drag-and-swipe functionality using the QuickDragAndSwipe library. This includes a default implementation (DefaultDragAndSwipeActivity), a diff-based implementation (DragAndSwipeDifferActivity), a header-integrated layout (HeaderDragAndSwipeActivity), and a manual control example (ManualDragAndSwipeUseActivity). These demos demonstrate how to attach drag and swipe listeners, handle item movement and removal, and integrate with RecyclerView adapters.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe · high confidence

Add home screen and data binding adapter demo

The app now includes a new home screen (HomeActivity) that serves as a navigation hub for various RecyclerView adapter demos, including a new DataBindingAdapter example. This change introduces the UI for browsing and launching different adapter use cases such as animation, header/footer, empty view, item click, and multi-node features.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/home · high confidence

Add load-more demo activities with edge-to-edge support and manual load-more control

Two new demo activities, AutoLoadMoreRefreshUseActivity and NoAutoAutoLoadMoreRefreshUseActivity, are added to the loadmore package. The auto-load example demonstrates automatic pagination triggered by scrolling, while the no-auto example shows manual load-more triggered by a custom adapter with a listener. Both activities use QuickAdapterHelper with TrailingLoadStateAdapter and support edge-to-edge layout via ViewCompat window insets. The no-auto demo also illustrates adding a load state listener for observing state changes.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore · medium confidence

Add multi-level node list support with expanded/collapsed state logic

A new NodeAdapter implementation is introduced to support a three-level hierarchical node structure (Level 1, 2, and 3). This change enables users to view and interact with nested node lists, where each level can be expanded or collapsed. The adapter defines specific view types and holders for each level, implements logic to determine which nodes are initially open, and handles click events to toggle the open/close state of nodes. This allows for a more complex, tree-like UI structure within the application.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/node/adapter · high confidence

Add multi-node list demo activity

A new demo activity, NodeActivity, has been added to showcase the multi-node list functionality. This activity provides a user interface to interact with the node adapter, including buttons to close all expanded nodes and refresh the list while preserving or clearing open states.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/node · high confidence

Add utility classes for UI and device features

The app module now includes several new utility classes: ClickableMovementMethod for handling touch events on clickable text spans, a Kotlin extension for status bar light mode and dp-to-px conversion, a custom styled Toast implementation (Tips), and a Context extension for device vibration (VibratorUtils).

app/src/main/java/com/chad/baserecyclerviewadapterhelper/utils · high confidence

Added DiffUtil demo activity with edge-to-edge support

A new demo activity, DifferActivity, was added to showcase DiffUtil usage. The activity implements edge-to-edge layout handling via window insets and configures a DiffUtilAdapter with a state view for empty/loading states.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/differ · high confidence

Added DiffUtil-based adapter for efficient list updates

The app now includes a new DiffUtil-based adapter implementation in the differ/adapter package. Specifically, DiffEntityCallback defines item comparison logic (by ID, title, content, and date), and DiffUtilAdapter extends BaseQuickAdapter to utilize this callback. This change enables the application to perform efficient, granular updates to RecyclerView lists using Android's DiffUtil, rather than full list refreshes.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/differ/adapter · high confidence

Added EmptyViewAdapter for RecyclerView empty state

A new Kotlin adapter, EmptyViewAdapter, has been added to the empty view module. It extends BaseQuickAdapter to bind Status items into a RecyclerView, specifically handling the display of user avatars, names, and text in the empty state layout.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/emptyview/adapter · high confidence

Added GridItemDecoration for grid layout dividers

Introduced a new \GridItemDecoration\ class that allows users to easily add dividers to RecyclerViews using a Drawable. The implementation handles both vertical and horizontal orientations, calculating offsets and drawing dividers between items. Additionally, the existing \GridSectionAverageGapItemDecoration\ was updated to handle header views, ensuring that headers are excluded from the spacing calculations for grid items.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration · high confidence

Added Group scene demo using ConcatAdapter

A new 'Group Scene' demo activity was added to the app's scene directory, demonstrating how to use ConcatAdapter to manage multiple adapters for grouped data. The implementation includes a new GroupAdapter and GroupDemoActivity that parses JSON data into a list of groups, each bound to its own adapter within a ConcatAdapter, simplifying the display of nested list structures.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/scene · high confidence

Added UpFetchUseActivity for up-fetching list data

A new activity, UpFetchUseActivity, was added to demonstrate up-fetching (loading previous items) in a RecyclerView. It uses QuickAdapterHelper with a LeadingLoadStateAdapter to handle loading states and preloading, allowing users to scroll up to load older data. The activity also handles window insets for proper title bar spacing.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/upfetch · high confidence

Added base activity classes for standard and view-binding layouts

Two new base classes, BaseActivity and BaseViewBindingActivity, have been introduced to the application's base package. BaseActivity provides a standard Android Activity implementation that configures edge-to-edge display and sets the status bar color. BaseViewBindingActivity extends this to support ViewBinding, requiring subclasses to implement initBinding() to provide their specific ViewBinding instance, which is then used as the content view. These changes streamline the creation of activities with consistent theming and binding initialization.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/base · high confidence

Introduce BaseQuickAdapter v4 with modernized adapter architecture

The library introduces a new v4 adapter architecture centered on BaseQuickAdapter, which leverages Android's AsyncListDiffer for efficient, asynchronous diffing. This update brings a suite of new adapter types including BaseMultiItemAdapter for handling multiple item types, BaseNodeAdapter for tree-like hierarchical data, and BaseSingleItemAdapter for single-item scenarios. Additionally, the library now provides a QuickAdapterHelper to manage ConcatAdapter compositions for complex layouts, and includes built-in support for drag-and-drop and swipe-to-delete interactions via the QuickDragAndSwipe class.

library · high confidence

New custom item animations for RecyclerView

Three new custom item animations have been added to the library: CustomAnimation1 (fade-in with scale), CustomAnimation2 (slide-in from left with a custom sine-wave interpolation), and CustomAnimation3 (fade-in with slide-up). These classes implement the ItemAnimator interface, allowing users to apply these specific animation effects to list items.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/animator · high confidence

New load-more and list adapters for the demo app

Added CustomLoadMoreAdapter, a custom trailing load-state adapter that displays loading, error, and end-of-list states using a custom layout, and RecyclerViewAdapter, a base adapter for displaying status items with clickable text spans. These new adapter classes provide the UI logic for the load-more and list views in the demo application.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore/adapter · high confidence

Removals

Removed legacy adapter implementations from the demo app

The demo application no longer includes the custom \DefAdpater\ and \QuickAdapter\ classes, which previously demonstrated standard and quick-write adapter patterns. This removes the specific examples of how to implement RecyclerView adapters in the demo, likely to streamline the demo or replace them with other examples.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter · high confidence

Behavioural changes

4 commits (0 fixes) modifying demo

A change to existing behaviour in demo — 4 commits, 1 file.

demo · medium confidence · unverified

Added Gradle JVM toolchain configuration for automatic JDK provisioning

A new file, gradle/gradle-daemon-jvm.properties, has been added to the project. This file configures Gradle's JVM toolchain to automatically download and use JDK 21 for various operating systems (FreeBSD, Linux, macOS, Windows) and architectures (AARCH64, X86\_64). This change enables Gradle to manage the Java Development Kit (JDK) version, ensuring consistent builds across different environments without requiring manual JDK installation.

gradle · high confidence

Added debounced click handlers to the item click demo activity

The ItemClickActivity demo now includes new extension methods for handling clicks without triggering multiple rapid-fire events. Specifically, the activity now uses setOnDebouncedItemClick and addOnDebouncedChildClick to prevent duplicate click triggers, alongside the standard setOnItemClickListener and addOnItemChildClickListener methods.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/itemclick · high confidence

Added new entity classes and refactored Status

The entity package now includes new data models for the demo application: ClickEntity defines constants for click and long-click item types; DiffEntity provides a data class with equality checks for diffing; Movie and MoviePresenter support a ticket-buying demo; and Status has been refactored to use an integer resource ID for the avatar instead of a String URL, with getter/setter methods reordered.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity · medium confidence

Empty view demo activity migrated to Kotlin with edge-to-edge support

The empty view demo activity has been converted from Java to Kotlin and updated to support edge-to-edge layout, ensuring the header bar respects system bars. The activity now demonstrates the new \isUseStateViewSize\ property and the renamed \stateView\ property for managing empty, error, and loading states in the RecyclerView adapter.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/emptyview · medium confidence

Home screen adapters migrated to Adapter4

The home screen now uses new adapter classes (HomeAdapter and HomeTopHeaderAdapter) that extend BaseMultiItemAdapter and BaseSingleItemAdapter from the Adapter4 library. This change replaces the previous implementation, enabling support for multiple item types (header and item views) and full-span headers in the home layout.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/home/adapter · high confidence

Migrate demo data source from Java to Kotlin

The application's demo data source has been migrated from a Java class (DataServer.java) to a Kotlin object (DataServer.kt). This change updates the internal data generation logic for the demo, including the structure of sample data and the addition of new data types such as DiffEntity and NodeEntity, which support features like DiffUtil animations and expandable node lists.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/data · high confidence

The header and footer demo adapters have been rewritten in Kotlin and updated to use the adapter4 library (extending BaseSingleItemAdapter and BaseQuickAdapter). This change improves Kotlin code hinting and aligns the demo code with the BRVAH 3+ API, replacing the previous Java implementations with idiomatic Kotlin classes (FooterAdapter, HeaderAdapter, HeaderAndFooterAdapter) that demonstrate header/footer usage in the RecyclerView.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/headerfooter/adapter · medium confidence

Migrated MainActivity from Java to Kotlin

The main activity for the RecyclerView adapter helper demo has been converted from Java to Kotlin, as evidenced by the deletion of the Java source file. This change updates the implementation language for the primary entry point of the application.

app/src/main/java/com/chad/baserecyclerviewadapterhelper · medium confidence

Migrated UpFetchAdapter to Kotlin for BRVAH 3 compatibility

The UpFetchAdapter has been rewritten in Kotlin to align with the BRVAH 3 API, replacing the previous Java implementation. This change updates the adapter to use Kotlin-specific features and the new BaseQuickAdapter interface, ensuring compatibility with the latest library version.

app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/upfetch/adapter · high confidence

Updated app build configuration and ProGuard rules

The app's .gitignore file has been expanded to exclude additional build artifacts, IDE files, and local configuration files. Additionally, a ProGuard rule was added to preserve the BaseRecyclerViewAdapterHelper library, ensuring that the library's classes are not obfuscated or removed during the build process.

app · medium confidence

Test coverage

Removed ExampleUnitTest.java test file; Removed obsolete Android application test.

Dependencies

Gradle wrapper upgraded to version 9.4.1

The Gradle wrapper has been updated to use Gradle 9.4.1, replacing the previous version 2.8. This upgrade brings modern build tooling improvements and ensures compatibility with newer Java and Android development standards.

gradle/wrapper · high confidence

Migrated build system to Gradle Kotlin DSL and version catalogs

The project's build configuration has been modernized by migrating from the legacy Groovy-based build scripts to Gradle Kotlin DSL (build.gradle.kts). This change introduces a centralized dependency management system using Gradle version catalogs (gradle/libs.versions.toml), which explicitly defines versions for the Android Gradle Plugin, Kotlin, KSP, and all AndroidX and third-party libraries. The migration also updates the minimum supported Android SDK version to 23 and enables ViewBinding and DataBinding features in the app module.

(dependencies) · 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 52 → 52 (+0.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 98 → 98 (+0.9)
  • Architecture 100 → 92 (-8.0)
  • Maturity 53 → 53 (-0.1)
  • Readiness 33 → 31 (-1.6)
  • Security 71 → 81 (+10.1)

Resolved (14)

  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (11 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/node/adapter/NodeAdapter.kt)
  • Duplicated block (12 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/HeaderDragAndSwipeActivity.kt)
  • Duplicated block (13 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore/AutoLoadMoreRefreshUseActivity.kt)
  • Duplicated block (15 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore/AutoLoadMoreRefreshUseActivity.kt)
  • Duplicated block (17 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/DefaultDragAndSwipeActivity.kt)
  • Duplicated block (19 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/DefaultDragAndSwipeActivity.kt)
  • Duplicated block (24 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore/AutoLoadMoreRefreshUseActivity.kt)
  • Duplicated block (9 lines × 9) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/animation/AnimationUseActivity.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • Off-boarding risk: anonymized user #1

New (20)

  • ClassTooLong: BaseQuickAdapter (library/src/main/java/com/chad/library/adapter4/BaseQuickAdapter.kt)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/HeaderDragAndSwipeActivity.kt)
  • Duplicated block (11 lines × 3) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/DefaultDragAndSwipeActivity.kt)
  • Duplicated block (13 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/node/adapter/NodeAdapter.kt)
  • Duplicated block (17–18 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/DefaultDragAndSwipeActivity.kt)
  • Duplicated block (24 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore/AutoLoadMoreRefreshUseActivity.kt)
  • Duplicated block (31–32 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/DefaultDragAndSwipeActivity.kt)
  • Duplicated block (37–41 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore/AutoLoadMoreRefreshUseActivity.kt)
  • Duplicated block (7 lines × 2) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/loadmore/AutoLoadMoreRefreshUseActivity.kt)
  • Duplicated block (8 lines × 4) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/dragswipe/DragAndSwipeDifferActivity.kt)
  • Duplicated block (8 lines × 9) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/animation/AnimationUseActivity.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Members sharing a duplicated core (9 members, 50+ identical tokens) (app/src/main/java/com/chad/baserecyclerviewadapterhelper/activity/animation/AnimationUseActivity.kt)
  • No ADRs found
  • No dependency advisory monitoring
  • Off-boarding risk: anonymized user #1

Architecture

  • Containers 0 added · 0 removed · contexts 1 added · 1 removed · edges 1 added · 0 removed

Added bounded contexts (1)

  • app

Removed bounded contexts (1)

  • .

Added dependency edges (1)

  • app → library (coupling)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

CymChad/BaseRecyclerViewAdapterHelper 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 22 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 9948068cd95d5386cdb7f3e03d85fe2aede307cd — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-821afab8930d.