Snap for 10162339 from 13c67402d17a3dc3597634fc8795c55e433cd110 to udc-release am: 0ddb9a9b8e

Original change: https://googleplex-android-review.googlesource.com/c/platform/external/robolectric-shadows/+/23339043

Change-Id: Id6378188927b6ae990e40fdc601fbf2ad264a421
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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 534a0ee..83ed5a7 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 @@
 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 @@
       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 fbe48ac..b7efad5 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 @@
     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 @@
     boolean isNinePatch() {
       return ninePatch;
     }
+
+    String getMimeType() {
+      return mimeType;
+    }
   }
 
   private static final class CppImageDecoder {
@@ -80,6 +86,9 @@
       this.imgStream = imgStream;
     }
 
+    public String getMimeType() {
+      return imgStream.getMimeType();
+    }
   }
 
   private static final NativeObjRegistry<CppImageDecoder> NATIVE_IMAGE_DECODER_REGISTRY =
@@ -238,8 +247,7 @@
 
   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 @@
     // auto colorType = codec.computeOutputColorType(codec.getInfo().colorType());
     // sk_sp<SkColorSpace> colorSpace = codec.computeOutputColorSpace(colorType);
     // return GraphicsJNI.getColorSpace(colorSpace, colorType);
-    throw new UnsupportedOperationException();
+    return null;
   }