This release swaps layoutlib's simplified window and render model for the framework's, so behavior follows the platform as it changes. Dialogs, popups and sheets are real windows with their own ViewRootImpl, giving z-order, dimming and per-window insets that match the device. Measure, layout and pre-draw run through ViewRootImpl.doTraversal(), and each render session owns its Looper.
Accessibility goldens, and goldens using the V_SCROLL, H_SCROLL and FULL_EXPAND rendering modes, change with this version and will need re-recording.
New
paparazzi.gif {
CircularProgressIndicator()
}- Add
app.cash.paparazzi.reportType=nativeto publish snapshot diffs as attachments on Gradle's test report instead of replacing Gradle's reporter. Requires Gradle 9.4+.legacystays the default for now, but will be removed in an upcoming release (#2436) - Add
app.cash.paparazzi.nativeReportFrameworksto choose which frameworks native mode supports:junit4(the default),junit5, or both, so a JUnit 4 project never pulls in the Jupiter engine (#2450) - [Gradle Plugin] Android Gradle Plugin 9.0.0 (#2198)
Fixed
AnimatedVectorDrawablenow advances with the snapshot offset instead of rendering at time zero (#2472)- Fix infinite loop when verifying single-frame goldens (#2379)
- Exclude blank text from merged accessibility labels (#2331, #2372)
- Prune hidden accessibility subtrees (#2383)
- Filter hidden Compose accessibility semantics (#2430)
- [Gradle Plugin] Fix
cleanRecordrace condition between snapshot recording and deletion under parallel builds (#2377) - [Gradle Plugin] Fix remote build cache misses caused by absolute paths in the test task's system properties (#1874, #2381, #2452)
- [Gradle Plugin]
cleanRecordPaparazzideletes the variant's own snapshots rather than every variant's (#2456)
Kudos to @geoff-powell, @colinmarsch, @arpitagarwal1301, @FilippoVigani, @abeggsnf, @oldergod and others for contributions this release!