diff options
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/ImageUtil.java | 20 | ||||
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/ShadowImageDecoder.java | 20 |
2 files changed, 33 insertions, 7 deletions
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ImageUtil.java b/shadows/framework/src/main/java/org/robolectric/shadows/ImageUtil.java index 534a0eebc..83ed5a7b9 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ImageUtil.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ImageUtil.java @@ -21,7 +21,25 @@ import javax.imageio.stream.ImageOutputStream; public class ImageUtil { private static boolean initialized; + public static class ImageInfo { + + public final int width; + public final int height; + public final String mimeType; + + ImageInfo(int width, int height, String mimeType) { + this.width = width; + this.height = height; + this.mimeType = mimeType; + } + } + public static Point getImageSizeFromStream(InputStream is) { + ImageInfo info = getImageInfoFromStream(is); + return new Point(info.width, info.height); + } + + public static ImageInfo getImageInfoFromStream(InputStream is) { if (!initialized) { // Stops ImageIO from creating temp files when reading images // from input stream. @@ -37,7 +55,7 @@ public class ImageUtil { ImageReader reader = readers.next(); try { reader.setInput(imageStream); - return new Point(reader.getWidth(0), reader.getHeight(0)); + return new ImageInfo(reader.getWidth(0), reader.getHeight(0), "image/" + reader.getFormatName()); } finally { reader.dispose(); } diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowImageDecoder.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowImageDecoder.java index fbe48ac8b..b7efad575 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowImageDecoder.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowImageDecoder.java @@ -39,12 +39,14 @@ public class ShadowImageDecoder { private final int height; private final boolean animated = false; private final boolean ninePatch; + private final String mimeType; ImgStream() { InputStream inputStream = getInputStream(); - final Point size = ImageUtil.getImageSizeFromStream(inputStream); - this.width = size == null ? 10 : size.x; - this.height = size == null ? 10 : size.y; + final ImageUtil.ImageInfo info = ImageUtil.getImageInfoFromStream(inputStream); + this.width = info == null ? 10 : info.width; + this.height = info == null ? 10 : info.height; + this.mimeType = info == null ? "" : info.mimeType; if (inputStream instanceof AssetManager.AssetInputStream) { ShadowAssetInputStream sis = Shadow.extract(inputStream); this.ninePatch = sis.isNinePatch(); @@ -70,6 +72,10 @@ public class ShadowImageDecoder { boolean isNinePatch() { return ninePatch; } + + String getMimeType() { + return mimeType; + } } private static final class CppImageDecoder { @@ -80,6 +86,9 @@ public class ShadowImageDecoder { this.imgStream = imgStream; } + public String getMimeType() { + return imgStream.getMimeType(); + } } private static final NativeObjRegistry<CppImageDecoder> NATIVE_IMAGE_DECODER_REGISTRY = @@ -238,8 +247,7 @@ public class ShadowImageDecoder { static String ImageDecoder_nGetMimeType(long nativePtr) { CppImageDecoder decoder = NATIVE_IMAGE_DECODER_REGISTRY.getNativeObject(nativePtr); - // return encodedFormatToString(decoder.mCodec.getEncodedFormat()); - throw new UnsupportedOperationException(); + return decoder.getMimeType(); } static ColorSpace ImageDecoder_nGetColorSpace(long nativePtr) { @@ -247,7 +255,7 @@ public class ShadowImageDecoder { // auto colorType = codec.computeOutputColorType(codec.getInfo().colorType()); // sk_sp<SkColorSpace> colorSpace = codec.computeOutputColorSpace(colorType); // return GraphicsJNI.getColorSpace(colorSpace, colorType); - throw new UnsupportedOperationException(); + return null; } |