- Fix: Fix decoding GIFs on pre-API 19. Thanks @mario.
- Fix: Fix rasterized vector drawables not being marked as sampled.
- Fix: Throw exception if Movie dimensions are <= 0.
- Fix: Fix CrossfadeTransition not being resumed for a memory cache event.
- Fix: Prevent returning hardware bitmaps to all target methods if disallowed.
- Fix: Fix MovieDrawable not positioning itself in the center of its bounds.
- Remove automatic scaling from CrossfadeDrawable.
- Make
BitmapPool.trimMemory
public. - Wrap AnimatedImageDrawable in a ScaleDrawable to ensure it fills its bounds.
- Add @JvmOverloads to RequestBuilder.setParameter.
- Set an SVG's view box to its size if the view box is not set.
- Pass state and level changes to CrossfadeDrawable children.
- Update OkHttp to 3.12.8.
- Fix: Fix crash when calling
LoadRequestBuilder.crossfade(false)
.
- Breaking:
Transformation.transform
now includes aSize
parameter. This is to support transformations that change the size of the outputBitmap
based on the size of theTarget
. Requests with transformations are now also exempt from image sampling. - Breaking:
Transformation
s are now applied to any type ofDrawable
. Before,Transformation
s would be skipped if the inputDrawable
was not aBitmapDrawable
. Now,Drawable
s are rendered to aBitmap
before applying theTransformation
s. - Breaking: Passing
null
data toImageLoader.load
is now treated as an error and callsTarget.onError
andRequest.Listener.onError
with aNullRequestDataException
. This change was made to support setting afallback
drawable if data isnull
. Previously the request was silently ignored. - Breaking:
RequestDisposable.isDisposed
is now aval
.
- New: Support for custom transitions. See here for more info. Transitions are marked as experimental as the API is incubating.
- New: Add
RequestDisposable.await
to support suspending while aLoadRequest
is in progress. - New: Support setting a
fallback
drawable when request data is null. - New: Add
Precision
. This makes the size of the outputDrawable
exact while enabling scaling optimizations for targets that support scaling (e.g.ImageViewTarget
). See its documentation for more information. - New: Add
RequestBuilder.aliasKeys
to support matching multiple cache keys.
- Fix: Make RequestDisposable thread safe.
- Fix:
RoundedCornersTransformation
now crops to the size of the target then rounds the corners. - Fix:
CircleCropTransformation
now crops from the center. - Fix: Add several devices to the hardware bitmap blacklist.
- Fix: Preserve aspect ratio when converting a Drawable to a Bitmap.
- Fix: Fix possible memory cache miss with
Scale.FIT
. - Fix: Ensure Parameters iteration order is deterministic.
- Fix: Defensive copy when creating Parameters and ComponentRegistry.
- Fix: Ensure RealBitmapPool's maxSize >= 0.
- Fix: Show the start drawable if CrossfadeDrawable is not animating or done.
- Fix: Adjust CrossfadeDrawable to account for children with undefined intrinsic size.
- Fix: Fix
MovieDrawable
not scaling properly.
- Update Kotlin to 1.3.61.
- Update Kotlin Coroutines to 1.3.3.
- Update Okio to 2.4.3.
- Update AndroidX dependencies:
androidx.exifinterface:exifinterface
-> 1.1.0
- Breaking:
SvgDrawable
has been removed. Instead, SVGs are now prerendered toBitmapDrawable
s bySvgDecoder
. This makes SVGs significantly less expensive to render on the main thread. AlsoSvgDecoder
now requires aContext
in its constructor. - Breaking:
SparseIntArraySet
extension functions have moved to thecoil.extension
package.
- New: Support setting per-request network headers. See here for more info.
- New: Add new
Parameters
API to support passing custom data through the image pipeline. - New: Support individual corner radii in RoundedCornersTransformation. Thanks @khatv911.
- New: Add
ImageView.clear()
to support proactively freeing resources. - New: Support loading resources from other packages.
- New: Add
subtractPadding
attribute to ViewSizeResolver to enable/disable subtracting a view's padding when measuring. - New: Improve HttpUrlFetcher MIME type detection.
- New: Add Animatable2Compat support to MovieDrawable and CrossfadeDrawable.
- New: Add
RequestBuilder<*>.repeatCount
to set the repeat count for a GIF. - New: Add BitmapPool creation to the public API.
- New: Annotate Request.Listener methods with
@MainThread
.
- Fix: Make CoilContentProvider visible for testing.
- Fix: Include night mode in the resource cache key.
- Fix: Work around ImageDecoder native crash by temporarily writing the source to disk.
- Fix: Correctly handle contact display photo uris.
- Fix: Pass tint to CrossfadeDrawable's children.
- Fix: Fix several instances of not closing sources.
- Fix: Add a blacklist of devices with broken/incomplete hardware bitmap implementations.
- Compile against SDK 29.
- Update Kotlin Coroutines to 1.3.2.
- Update OkHttp to 3.12.6.
- Update Okio to 2.4.1.
- Change
appcompat-resources
fromcompileOnly
toimplementation
forcoil-base
.
- Breaking:
ImageLoaderBuilder.okHttpClient(OkHttpClient.Builder.() -> Unit)
is nowImageLoaderBuilder.okHttpClient(() -> OkHttpClient)
. The initializer is also now called lazily on a background thread. If you set a customOkHttpClient
you must setOkHttpClient.cache
to enable disk caching. If you don't set a customOkHttpClient
, Coil will create the defaultOkHttpClient
which has disk caching enabled. The default Coil cache can be created usingCoilUtils.createDefaultCache(context)
. e.g.:
val imageLoader = ImageLoader(context) {
okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(context))
.build()
}
}
- Breaking:
Fetcher.key
no longer has a default implementation. - Breaking: Previously, only the first applicable
Mapper
would be called. Now, all applicableMapper
s will be called. No API changes. - Breaking: Minor named parameter renaming:
url
->uri
,factory
->initializer
.
- New:
coil-svg
artifact, which has anSvgDecoder
that supports automatically decoding SVGs. Powered by AndroidSVG. Thanks @rharter. - New:
load(String)
andget(String)
now accept any of the supported Uri schemes. e.g. You can now doimageView.load("file:///path/to/file.jpg")
. - New: Refactor ImageLoader to use
Call.Factory
instead ofOkHttpClient
. This allows lazy initialization of the networking resources usingImageLoaderBuilder.okHttpClient { OkHttpClient() }
. Thanks @ZacSweers. - New:
RequestBuilder.decoder
to explicitly set the decoder for a request. - New:
ImageLoaderBuilder.allowHardware
to enable/disable hardware bitmaps by default for an ImageLoader. - New: Support software rendering in ImageDecoderDecoder.
- Fix: Multiple bugs with loading vector drawables.
- Fix: Support WRAP_CONTENT View dimensions.
- Fix: Support parsing EXIF data longer than 8192 bytes.
- Fix: Don't stretch drawables with different aspect ratios when crossfading.
- Fix: Guard against network observer failing to register due to exception.
- Fix: Fix divide by zero error in MovieDrawable. Thanks @R12rus.
- Fix: Support nested Android asset files. Thanks @JaCzekanski.
- Fix: Guard against running out of file descriptors on Android O and O_MR1.
- Fix: Don't crash when disabling memory cache. Thanks @hansenji.
- Fix: Ensure Target.cancel is always called from the main thread.
- Update Kotlin to 1.3.50.
- Update Kotlin Coroutines to 1.3.0.
- Update OkHttp to 3.12.4.
- Update Okio to 2.4.0.
- Update AndroidX dependencies to the latest stable versions:
androidx.appcompat:appcompat
-> 1.1.0androidx.core:core-ktx
-> 1.1.0androidx.lifecycle:lifecycle-common-java8
-> 2.1.0
- Replace
appcompat
withappcompat-resources
as an optionalcompileOnly
dependency.appcompat-resources
is a much smaller artifact.
- New: Add
transformations(List<Transformation>)
to RequestBuilder. - Fix: Add the last modified date to the cache key for file uris.
- Fix: Ensure View dimensions are evaluated to at least 1px.
- Fix: Clear MovieDrawable's canvas between frames.
- Fix: Open assets correctly.
- Initial release.