diff options
| author | 2018-08-21 21:30:01 +0000 | |
|---|---|---|
| committer | 2018-08-21 21:30:01 +0000 | |
| commit | 96d9c3f91ee27c0113614be95d9b588cc97dbb36 (patch) | |
| tree | 84f4559e9bbe5aad3a209044b0c7395e5ff243f3 | |
| parent | b2339319fb6db1e7305b647a2d95e31f9833b902 (diff) | |
| parent | d8e124422549d6b0b2bcb3407cc67e230192edc5 (diff) | |
Merge "Do not allow wallpapers that are too large"
| -rw-r--r-- | core/java/android/view/DisplayListCanvas.java | 2 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/ImageWallpaper.java | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java index a7755a288530..4b946d7f430f 100644 --- a/core/java/android/view/DisplayListCanvas.java +++ b/core/java/android/view/DisplayListCanvas.java @@ -40,7 +40,7 @@ public final class DisplayListCanvas extends RecordingCanvas { // view hierarchy because display lists are generated recursively. private static final int POOL_LIMIT = 25; - private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB + public static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB private static final SynchronizedPool<DisplayListCanvas> sPool = new SynchronizedPool<>(POOL_LIMIT); diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 50d862dee29c..39e315566daf 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -30,6 +30,7 @@ import android.service.wallpaper.WallpaperService; import android.util.Log; import android.view.Display; import android.view.DisplayInfo; +import android.view.DisplayListCanvas; import android.view.Surface; import android.view.SurfaceHolder; import android.view.WindowManager; @@ -366,7 +367,12 @@ public class ImageWallpaper extends WallpaperService { protected Bitmap doInBackground(Void... params) { Throwable exception; try { - return mWallpaperManager.getBitmap(true /* hardware */); + Bitmap wallpaper = mWallpaperManager.getBitmap(true /* hardware */); + if (wallpaper != null + && wallpaper.getByteCount() > DisplayListCanvas.MAX_BITMAP_SIZE) { + throw new RuntimeException("Wallpaper is too large to draw!"); + } + return wallpaper; } catch (RuntimeException | OutOfMemoryError e) { exception = e; } |