Highlights
- Adds an encoded-image request transformation hook and makes disk-cache write producer creation overridable (58ac45f)
- Adds
EncodedImageDimensionsDecoderand a registry for custom image-dimension decoding (b0742d6) - Adds
MultiPostprocessorfor applying multiple postprocessors in sequence (ddc1db1) - Adds
EmptyImageSource.isExpectedEmptyso intentional empty Vito sources can retain their placeholders without reporting failures (0b0bc9d, d838034) - Lets custom producer-sequence factories handle decoded HTTP(S) requests and encoded network prefetches (793dabc, 6bcf6e3)
- Adds framework-neutral cache-key generation with
UnifiedCacheKeyGenerator(f650f5d) - Adds request creation from complete
SingleImageSourceinstances and request-based cache eviction that honors custom cache keys (7bf53df, 8366d27) - Adds opt-in streaming image decoding with byte- and time-based partial-result throttling (9e2b459, f2d88bb)
- Adds an option to keep the progress indicator visible while intermediate Vito images are displayed (624a167)
- Exposes the configured memory-chunk pool through
PoolFactory.getMemoryChunkPool(06140ac) - Adds
PrefetchDataand prefetch telemetry plumbing (9366996) - Reduces final-image latency by letting completed decode results bypass the progressive-decode interval (02414e4, e0ecb75)
- Supports building the OkHttp backend against both OkHttp 3.x and 4.x (288a34c, bc35d33)
- Fixes an Android 16 null dereference when creating the default Vito drawable factory (7b7b29a)
- Hardens native WebP decoding against invalid dimensions, oversized canvases, negative lengths, and unsafe byte-array ranges (a160b3b, 1566dd8)
- Fixes recycled-bitmap rendering in Vito (41905be)
- Fixes races and invalid-dimension handling in on-demand animations (762ed58, b57c874)
- Fixes concurrency-related null dereferences in request listeners and Vito image tracking (2baa5d4, c6620d7)
- Fixes source builds with JDK 25 and aligns the OSS Gradle build with Kotlin 2.2 (288cdbb, c90d7f0, 0209f24, 15df97e)
Breaking
Method signature changes:
- Changes
ProducerFactory.newDiskCacheWriteProducerto returnProducer<EncodedImage>instead ofDiskCacheWriteProducer(58ac45f)
Removed classes and options:
- Removes
EfficientPlatformDecoder,EfficientRawBitmapDecoder,DecodeValidationUtils, and thePlatformDecoderOptions.useEfficientDecoderanduseBitmapFactoryDecoderoptions (d7ed19a, 5bc48b6, d4f7393)
Kotlin migration changes:
- Makes
MatrixDrawableandRoundedBitmapDrawablefinal and makes several previously overridableFadeDrawablemethods final (f60d58d, dc82282, 9926a96) - Makes
StreamUtilandUriUtilsingletons; their static operations remain available, but construction and subclassing are no longer supported (e708aed, 5f2b04b) - Makes
NativeJpegTranscoderFactoryfinal andNativeJpegTranscoderSoLoadera singleton (f69ccbc) - Changes selected Kotlin getter calls on
FrameScheduler,GifFrame, andWebPFrameto property access (d30727c, 0f7acde, 0266179)
Behavioral changes:
- Cache-only decode misses now report errors;
cancelDecodeOnCacheMissno longer changes this behavior (0e7644e, 762ed58)
Full Changelog: v3.7.0...v3.8.0