Loading packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +21 −4 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.graphics.Color; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.os.Parcelable; Loading Loading @@ -83,8 +84,15 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi public static final int STATE_DOT = 1; public static final int STATE_HIDDEN = 2; /** Maximum allowed width or height for an icon drawable */ private static final int MAX_IMAGE_SIZE = 500; /** * Maximum allowed byte count for an icon bitmap * @see android.graphics.RecordingCanvas.MAX_BITMAP_SIZE */ private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB /** * Maximum allowed width or height for an icon drawable, if we can't get byte count */ private static final int MAX_IMAGE_SIZE = 5000; private static final String TAG = "StatusBarIconView"; private static final Property<StatusBarIconView, Float> ICON_APPEAR_AMOUNT Loading Loading @@ -382,9 +390,18 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi return false; } if (drawable.getIntrinsicWidth() > MAX_IMAGE_SIZE if (drawable instanceof BitmapDrawable && ((BitmapDrawable) drawable).getBitmap() != null) { // If it's a bitmap we can check the size directly int byteCount = ((BitmapDrawable) drawable).getBitmap().getByteCount(); if (byteCount > MAX_BITMAP_SIZE) { Log.w(TAG, "Drawable is too large (" + byteCount + " bytes) " + mIcon); return false; } } else if (drawable.getIntrinsicWidth() > MAX_IMAGE_SIZE || drawable.getIntrinsicHeight() > MAX_IMAGE_SIZE) { Log.w(TAG, "Drawable is too large " + mIcon); // Otherwise, check dimensions Log.w(TAG, "Drawable is too large (" + drawable.getIntrinsicWidth() + "x" + drawable.getIntrinsicHeight() + ") " + mIcon); return false; } Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -127,7 +127,7 @@ public class StatusBarIconViewTest extends SysuiTestCase { @Test public void testGiantImageNotAllowed() { Bitmap largeBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888); Bitmap largeBitmap = Bitmap.createBitmap(6000, 6000, Bitmap.Config.ARGB_8888); Icon icon = Icon.createWithBitmap(largeBitmap); StatusBarIcon largeIcon = new StatusBarIcon(UserHandle.ALL, "mockPackage", icon, 0, 0, ""); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +21 −4 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.graphics.Color; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.os.Parcelable; Loading Loading @@ -83,8 +84,15 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi public static final int STATE_DOT = 1; public static final int STATE_HIDDEN = 2; /** Maximum allowed width or height for an icon drawable */ private static final int MAX_IMAGE_SIZE = 500; /** * Maximum allowed byte count for an icon bitmap * @see android.graphics.RecordingCanvas.MAX_BITMAP_SIZE */ private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB /** * Maximum allowed width or height for an icon drawable, if we can't get byte count */ private static final int MAX_IMAGE_SIZE = 5000; private static final String TAG = "StatusBarIconView"; private static final Property<StatusBarIconView, Float> ICON_APPEAR_AMOUNT Loading Loading @@ -382,9 +390,18 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi return false; } if (drawable.getIntrinsicWidth() > MAX_IMAGE_SIZE if (drawable instanceof BitmapDrawable && ((BitmapDrawable) drawable).getBitmap() != null) { // If it's a bitmap we can check the size directly int byteCount = ((BitmapDrawable) drawable).getBitmap().getByteCount(); if (byteCount > MAX_BITMAP_SIZE) { Log.w(TAG, "Drawable is too large (" + byteCount + " bytes) " + mIcon); return false; } } else if (drawable.getIntrinsicWidth() > MAX_IMAGE_SIZE || drawable.getIntrinsicHeight() > MAX_IMAGE_SIZE) { Log.w(TAG, "Drawable is too large " + mIcon); // Otherwise, check dimensions Log.w(TAG, "Drawable is too large (" + drawable.getIntrinsicWidth() + "x" + drawable.getIntrinsicHeight() + ") " + mIcon); return false; } Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -127,7 +127,7 @@ public class StatusBarIconViewTest extends SysuiTestCase { @Test public void testGiantImageNotAllowed() { Bitmap largeBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888); Bitmap largeBitmap = Bitmap.createBitmap(6000, 6000, Bitmap.Config.ARGB_8888); Icon icon = Icon.createWithBitmap(largeBitmap); StatusBarIcon largeIcon = new StatusBarIcon(UserHandle.ALL, "mockPackage", icon, 0, 0, ""); Loading