- Fix: Ensure a view is attached before checking if it is hardware accelerated. This fixes a case where requesting a hardware bitmap could miss the memory cache.
- Update AndroidX dependencies:
androidx.core:core-ktx
-> 1.2.0
- Fix: Respect aspect ratio when downsampling in ImageDecoderDecoder. Thanks @zhanghai.
- Previously bitmaps would be returned from the memory cache as long as their config was greater than or equal to the config specified in the request. For example, if you requested an
ARGB_8888
bitmap, it would be possible to have aRGBA_F16
bitmap returned to you from the memory cache. Now, the cached config and the requested config must be equal. - Make
scale
anddurationMillis
public inCrossfadeDrawable
andCrossfadeTransition
.
- Fix: Translate child drawable inside
ScaleDrawable
to ensure it is centered. - Fix: Fix case where GIFs and SVGs would not fill bounds completely.
- Defer calling
HttpUrl.get()
to background thread. - Improve BitmapFactory null bitmap error message.
- Add 3 devices to hardware bitmap blacklist. (#264)
- Update AndroidX dependencies:
androidx.lifecycle:lifecycle-common-java8
-> 2.2.0
- 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.