diff options
| author | Leon Scroggins <scroggo@google.com> | 2018-02-16 11:25:23 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-02-16 11:25:23 +0000 |
| commit | 299b0e4b4eb330723be4fa4df3cfd2dcadb3be44 (patch) | |
| tree | e9220edd8f161f58474434fe0a90fc3e037f4076 /core/java/android | |
| parent | 1cfc06a1e501f60f2573306f48d6fcff3f85c237 (diff) | |
| parent | 513031d15b78579e39d59b71ab5a1b0afabc5544 (diff) | |
Merge "Reland "Call ImageDecoder directly in ResourcesImpl""
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/res/ResourcesImpl.java | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java index cf0145123b87..424fa833cd48 100644 --- a/core/java/android/content/res/ResourcesImpl.java +++ b/core/java/android/content/res/ResourcesImpl.java @@ -27,9 +27,11 @@ import android.annotation.StyleRes; import android.annotation.StyleableRes; import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo.Config; +import android.content.res.AssetManager.AssetInputStream; import android.content.res.Configuration.NativeConfig; import android.content.res.Resources.NotFoundException; import android.graphics.Bitmap; +import android.graphics.ImageDecoder; import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -752,6 +754,26 @@ public class ResourcesImpl { } /** + * Loads a Drawable from an encoded image stream, or null. + * + * This call will handle closing ais. + */ + private Drawable decodeImageDrawable(@NonNull AssetInputStream ais, + @NonNull Resources wrapper, @NonNull TypedValue value) { + ImageDecoder.Source src = new ImageDecoder.AssetInputStreamSource(ais, + wrapper, value); + try { + return ImageDecoder.decodeDrawable(src, (decoder, info, s) -> { + decoder.setAllocator(ImageDecoder.ALLOCATOR_SOFTWARE); + }); + } catch (IOException ioe) { + // This is okay. This may be something that ImageDecoder does not + // support, like SVG. + return null; + } + } + + /** * Loads a drawable from XML or resources stream. */ @NonNull @@ -811,8 +833,8 @@ public class ResourcesImpl { } else { final InputStream is = mAssets.openNonAsset( value.assetCookie, file, AssetManager.ACCESS_STREAMING); - dr = Drawable.createFromResourceStream(wrapper, value, is, file, null); - is.close(); + AssetInputStream ais = (AssetInputStream) is; + dr = decodeImageDrawable(ais, wrapper, value); } } finally { stack.pop(); |
