diff options
author | Tony Wickham <twickham@google.com> | 2015-11-04 15:01:54 -0800 |
---|---|---|
committer | Arne Coucheron <arco68@gmail.com> | 2017-05-27 00:16:14 +0200 |
commit | 273db439991b7230f1adbf4502bc5f1ce01b211c (patch) | |
tree | ef2b7ef4eb13524005f80dd271be2107d9511363 | |
parent | 284667730dd0a640cd3dba4935f8fc0e7204032b (diff) | |
download | android_packages_apps_Trebuchet-273db439991b7230f1adbf4502bc5f1ce01b211c.tar.gz android_packages_apps_Trebuchet-273db439991b7230f1adbf4502bc5f1ce01b211c.tar.bz2 android_packages_apps_Trebuchet-273db439991b7230f1adbf4502bc5f1ce01b211c.zip |
Handle OutOfMemoryException gracefully in WallpaperCropActivity.
Now instead of crashing, it says "Couldn't load image."
Bug: 25326319
Change-Id: I6918b7b34e0a9b40036b1405fc449c10c2e1d40a
-rw-r--r-- | WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java b/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java index 2d496a5a6..6baac6a6b 100644 --- a/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java +++ b/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java @@ -159,6 +159,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { public enum State { NOT_LOADED, LOADED, ERROR_LOADING }; private State mState = State.NOT_LOADED; + /** Returns whether loading was successful. */ public boolean loadInBackground(InBitmapProvider bitmapProvider) { ExifInterface ei = new ExifInterface(); if (readExif(ei)) { @@ -193,7 +194,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { try { mPreview = loadPreviewBitmap(opts); } catch (IllegalArgumentException e) { - Log.d(TAG, "Unable to reusage bitmap", e); + Log.d(TAG, "Unable to reuse bitmap", e); opts.inBitmap = null; mPreview = null; } @@ -202,6 +203,10 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { if (mPreview == null) { mPreview = loadPreviewBitmap(opts); } + if (mPreview == null) { + mState = State.ERROR_LOADING; + return false; + } // Verify that the bitmap can be used on GL surface try { @@ -212,7 +217,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { Log.d(TAG, "Image cannot be rendered on a GL surface", e); mState = State.ERROR_LOADING; } - return true; + return mState == State.LOADED; } } @@ -310,7 +315,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { Bitmap b = BitmapFactory.decodeStream(is, null, options); Utils.closeSilently(is); return b; - } catch (FileNotFoundException e) { + } catch (FileNotFoundException | OutOfMemoryError e) { Log.e("BitmapRegionTileSource", "Failed to load URI " + mUri, e); return null; } @@ -412,7 +417,8 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { "Failed to create preview of apropriate size! " + " in: %dx%d, out: %dx%d", mWidth, mHeight, - preview.getWidth(), preview.getHeight())); + preview == null ? -1 : preview.getWidth(), + preview == null ? -1 : preview.getHeight())); } } } |