# Architecture `sample` and `samplePlus` depend on `library`. The library exports AndroidX RecyclerView through an `api` dependency because its public types include RecyclerView adapters, holders and layout managers. AppCompat is confined to the sample apps. `HeaderAndFooterRecyclerViewAdapter` wraps a data adapter. Its visible rows are headers, data rows, then footers. Data binding and notifications must translate inner positions by the current header count. Header/footer rows are actual View instances, not data models. `RecyclerViewUtils` attaches/removes the first header/footer and translates holder positions into data positions. An unattached or invalid holder must keep `RecyclerView.NO_POSITION`. `HeaderSpanSizeLookup` expands header/footer rows across a grid. `ExStaggeredGridLayoutManager` is the legacy staggered-grid extension; check it together with the adapter's full-span handling when changing layouts. `EndlessRecyclerOnScrollListener` detects scroll-to-end for supported layout managers and calls `OnListLoadNextPageListener`. It does not fetch data or own pagination state. `samplePlus` owns loading/retry/end state and simulated data loading through `LoadingFooter` and `RecyclerViewStateUtils`. Library regression tests use Robolectric at API 28 for deterministic host coverage. They exercise wrapping and notification contracts. They do not prove every layout, lifecycle, multiple-header/view-type combination, or newest-platform behavior; use the manual smoke checklist in CONTRIBUTING.md for UI changes. `ConcatExampleActivity` is the native AndroidX grid example in `samplePlus`: independent header/data/footer ListAdapters combined by ConcatAdapter, with explicit grid spans and binding-adapter click positions. It does not call the legacy library. `BaseSampleActivity` applies system-bar/cutout insets for target SDK 36; the tiny base is duplicated across the independent sample apps to keep UI scaffolding out of the library. `samplePlus/src/test/` exercises the real modern page under Robolectric at API 35, including layout/click position contracts and activity recreation. These are host UI tests, not device/emulator instrumentation tests. The legacy wrapper assumes the simple header/footer and view-type patterns in its demos. Multiple decorations, arbitrary view types, stable IDs and nested adapter lifecycle/state restoration are not fully supported or covered by tests. Its no-argument constructor requires setting a non-null inner adapter before use.