Loading core/java/android/content/res/ResourcesImpl.java +2 −9 Original line number Diff line number Diff line Loading @@ -27,11 +27,9 @@ 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; Loading Loading @@ -812,13 +810,8 @@ public class ResourcesImpl { } else { final InputStream is = mAssets.openNonAsset( value.assetCookie, file, AssetManager.ACCESS_STREAMING); AssetInputStream ais = (AssetInputStream) is; // ImageDecoder will close the input stream. ImageDecoder.Source src = new ImageDecoder.AssetInputStreamSource(ais, wrapper, value); dr = ImageDecoder.decodeDrawable(src, (decoder, info, s) -> { decoder.setAllocator(ImageDecoder.ALLOCATOR_SOFTWARE); }); dr = Drawable.createFromResourceStream(wrapper, value, is, file, null); is.close(); } } finally { stack.pop(); Loading graphics/java/android/graphics/ImageDecoder.java +6 −59 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import android.annotation.Nullable; import android.annotation.RawRes; import android.content.ContentResolver; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager.AssetInputStream; import android.content.res.AssetManager; import android.content.res.Resources; import android.graphics.drawable.AnimatedImageDrawable; import android.graphics.drawable.Drawable; Loading Loading @@ -263,63 +263,6 @@ public final class ImageDecoder implements AutoCloseable { } } /** * Takes ownership of the AssetInputStream. * * @hide */ public static class AssetInputStreamSource extends Source { public AssetInputStreamSource(@NonNull AssetInputStream ais, @NonNull Resources res, @NonNull TypedValue value) { mAssetInputStream = ais; mResources = res; if (value.density == TypedValue.DENSITY_DEFAULT) { mDensity = DisplayMetrics.DENSITY_DEFAULT; } else if (value.density != TypedValue.DENSITY_NONE) { mDensity = value.density; } else { mDensity = Bitmap.DENSITY_NONE; } } private AssetInputStream mAssetInputStream; private final Resources mResources; private final int mDensity; @Override public Resources getResources() { return mResources; } @Override public int getDensity() { return mDensity; } @Override public ImageDecoder createImageDecoder() throws IOException { ImageDecoder decoder = null; synchronized (this) { if (mAssetInputStream == null) { throw new IOException("Cannot reuse AssetInputStreamSource"); } AssetInputStream ais = mAssetInputStream; mAssetInputStream = null; try { long asset = ais.getNativeAsset(); decoder = nCreate(asset); } finally { if (decoder == null) { IoUtils.closeQuietly(ais); } else { decoder.mInputStream = ais; decoder.mOwnsInputStream = true; } } return decoder; } } } private static class ResourceSource extends Source { ResourceSource(@NonNull Resources res, int resId) { mResources = res; Loading Loading @@ -353,7 +296,11 @@ public final class ImageDecoder implements AutoCloseable { mResDensity = value.density; } long asset = ((AssetInputStream) is).getNativeAsset(); if (!(is instanceof AssetManager.AssetInputStream)) { // This should never happen. throw new RuntimeException("Resource is not an asset?"); } long asset = ((AssetManager.AssetInputStream) is).getNativeAsset(); decoder = nCreate(asset); } finally { if (decoder == null) { Loading Loading
core/java/android/content/res/ResourcesImpl.java +2 −9 Original line number Diff line number Diff line Loading @@ -27,11 +27,9 @@ 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; Loading Loading @@ -812,13 +810,8 @@ public class ResourcesImpl { } else { final InputStream is = mAssets.openNonAsset( value.assetCookie, file, AssetManager.ACCESS_STREAMING); AssetInputStream ais = (AssetInputStream) is; // ImageDecoder will close the input stream. ImageDecoder.Source src = new ImageDecoder.AssetInputStreamSource(ais, wrapper, value); dr = ImageDecoder.decodeDrawable(src, (decoder, info, s) -> { decoder.setAllocator(ImageDecoder.ALLOCATOR_SOFTWARE); }); dr = Drawable.createFromResourceStream(wrapper, value, is, file, null); is.close(); } } finally { stack.pop(); Loading
graphics/java/android/graphics/ImageDecoder.java +6 −59 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import android.annotation.Nullable; import android.annotation.RawRes; import android.content.ContentResolver; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager.AssetInputStream; import android.content.res.AssetManager; import android.content.res.Resources; import android.graphics.drawable.AnimatedImageDrawable; import android.graphics.drawable.Drawable; Loading Loading @@ -263,63 +263,6 @@ public final class ImageDecoder implements AutoCloseable { } } /** * Takes ownership of the AssetInputStream. * * @hide */ public static class AssetInputStreamSource extends Source { public AssetInputStreamSource(@NonNull AssetInputStream ais, @NonNull Resources res, @NonNull TypedValue value) { mAssetInputStream = ais; mResources = res; if (value.density == TypedValue.DENSITY_DEFAULT) { mDensity = DisplayMetrics.DENSITY_DEFAULT; } else if (value.density != TypedValue.DENSITY_NONE) { mDensity = value.density; } else { mDensity = Bitmap.DENSITY_NONE; } } private AssetInputStream mAssetInputStream; private final Resources mResources; private final int mDensity; @Override public Resources getResources() { return mResources; } @Override public int getDensity() { return mDensity; } @Override public ImageDecoder createImageDecoder() throws IOException { ImageDecoder decoder = null; synchronized (this) { if (mAssetInputStream == null) { throw new IOException("Cannot reuse AssetInputStreamSource"); } AssetInputStream ais = mAssetInputStream; mAssetInputStream = null; try { long asset = ais.getNativeAsset(); decoder = nCreate(asset); } finally { if (decoder == null) { IoUtils.closeQuietly(ais); } else { decoder.mInputStream = ais; decoder.mOwnsInputStream = true; } } return decoder; } } } private static class ResourceSource extends Source { ResourceSource(@NonNull Resources res, int resId) { mResources = res; Loading Loading @@ -353,7 +296,11 @@ public final class ImageDecoder implements AutoCloseable { mResDensity = value.density; } long asset = ((AssetInputStream) is).getNativeAsset(); if (!(is instanceof AssetManager.AssetInputStream)) { // This should never happen. throw new RuntimeException("Resource is not an asset?"); } long asset = ((AssetManager.AssetInputStream) is).getNativeAsset(); decoder = nCreate(asset); } finally { if (decoder == null) { Loading