diff --git a/coil-base/src/androidTest/java/coil/RealImageLoaderAndroidTest.kt b/coil-base/src/androidTest/java/coil/RealImageLoaderAndroidTest.kt index 09a6c17540..ebe83ff662 100644 --- a/coil-base/src/androidTest/java/coil/RealImageLoaderAndroidTest.kt +++ b/coil-base/src/androidTest/java/coil/RealImageLoaderAndroidTest.kt @@ -220,6 +220,13 @@ class RealImageLoaderAndroidTest { testExecute(data) } + @Test + fun byteArray() = runTest { + val data = context.resources.openRawResource(R.drawable.normal).readBytes() + testEnqueue(data) + testExecute(data) + } + // endregion @Test diff --git a/coil-base/src/main/java/coil/RealImageLoader.kt b/coil-base/src/main/java/coil/RealImageLoader.kt index 28adc0930d..25e21d39c0 100644 --- a/coil-base/src/main/java/coil/RealImageLoader.kt +++ b/coil-base/src/main/java/coil/RealImageLoader.kt @@ -17,6 +17,7 @@ import coil.intercept.EngineInterceptor import coil.intercept.RealInterceptorChain import coil.key.FileKeyer import coil.key.UriKeyer +import coil.map.ByteArrayMapper import coil.map.FileUriMapper import coil.map.HttpUrlMapper import coil.map.ResourceIntMapper @@ -86,6 +87,7 @@ internal class RealImageLoader( .add(FileUriMapper()) .add(ResourceUriMapper()) .add(ResourceIntMapper()) + .add(ByteArrayMapper()) // Keyers .add(UriKeyer()) .add(FileKeyer(options.addLastModifiedToFileCacheKey)) diff --git a/coil-base/src/main/java/coil/map/ByteArrayMapper.kt b/coil-base/src/main/java/coil/map/ByteArrayMapper.kt new file mode 100644 index 0000000000..ddf736a766 --- /dev/null +++ b/coil-base/src/main/java/coil/map/ByteArrayMapper.kt @@ -0,0 +1,9 @@ +package coil.map + +import coil.request.Options +import java.nio.ByteBuffer + +internal class ByteArrayMapper : Mapper { + + override fun map(data: ByteArray, options: Options): ByteBuffer = ByteBuffer.wrap(data) +} diff --git a/coil-base/src/main/java/coil/request/ImageRequest.kt b/coil-base/src/main/java/coil/request/ImageRequest.kt index bf77e684fd..24e8541b53 100644 --- a/coil-base/src/main/java/coil/request/ImageRequest.kt +++ b/coil-base/src/main/java/coil/request/ImageRequest.kt @@ -451,6 +451,7 @@ class ImageRequest private constructor( * - [DrawableRes] * - [Drawable] * - [Bitmap] + * - [ByteArray] * - [ByteBuffer] */ fun data(data: Any?) = apply { diff --git a/coil-singleton/src/main/java/coil/Extensions.kt b/coil-singleton/src/main/java/coil/Extensions.kt index 5ab47e41e9..9f021fdd83 100644 --- a/coil-singleton/src/main/java/coil/Extensions.kt +++ b/coil-singleton/src/main/java/coil/Extensions.kt @@ -43,6 +43,7 @@ inline val Context.imageLoader: ImageLoader * - [DrawableRes] [Int] * - [Drawable] * - [Bitmap] + * - [ByteArray] * - [ByteBuffer] * * @param data The data to load. diff --git a/docs/getting_started.md b/docs/getting_started.md index 99b934300c..04c2de3c15 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -106,6 +106,7 @@ The base data types that are supported by all `ImageLoader` instances are: * @DrawableRes Int * Drawable * Bitmap +* ByteArray * ByteBuffer ## Supported Image Formats