From c024c5886aaf4fc98c53a761398fac5c399de789 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Mon, 22 Feb 2021 15:58:57 -0500 Subject: [PATCH 1/7] Add pkg target to snoozing alarm Test: SnoozeHelperTest Bug: 174493336 Change-Id: I6aaf80a11dcae2eca41d4647411126ed41587027 (cherry picked from commit 6b5813b1f10181f3949386201c4a8f5e6ed4d00f) (cherry picked from commit 88854d15efbcce0a686745f7d392c87c41729452) --- .../android/server/notification/SnoozeHelper.java | 2 ++ .../server/notification/SnoozeHelperTest.java | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java index 9a9e733cb3900..da472be811568 100644 --- a/services/core/java/com/android/server/notification/SnoozeHelper.java +++ b/services/core/java/com/android/server/notification/SnoozeHelper.java @@ -37,6 +37,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.util.XmlUtils; +import com.android.server.pm.PackageManagerService; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -463,6 +464,7 @@ public class SnoozeHelper { return PendingIntent.getBroadcast(mContext, REQUEST_CODE_REPOST, new Intent(REPOST_ACTION) + .setPackage(PackageManagerService.PLATFORM_PACKAGE_NAME) .setData(new Uri.Builder().scheme(REPOST_SCHEME).appendPath(key).build()) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND) .putExtra(EXTRA_KEY, key) diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 3deeea2d45772..c2ead5f15ceb1 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -49,6 +49,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.util.FastXmlSerializer; import com.android.server.UiServiceTestCase; +import com.android.server.pm.PackageManagerService; import org.junit.Before; import org.junit.Test; @@ -256,6 +257,17 @@ public class SnoozeHelperTest extends UiServiceTestCase { UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey())); } + @Test + public void testSnoozeSentToAndroid() throws Exception { + NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); + mSnoozeHelper.snooze(r, 1000); + ArgumentCaptor captor = ArgumentCaptor.forClass(PendingIntent.class); + verify(mAm, times(1)).setExactAndAllowWhileIdle( + anyInt(), anyLong(), captor.capture()); + assertEquals(PackageManagerService.PLATFORM_PACKAGE_NAME, + captor.getValue().getIntent().getPackage()); + } + @Test public void testSnooze() throws Exception { NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); From c90fb352cdaab0fd5adaa8957694b726045c673c Mon Sep 17 00:00:00 2001 From: Jonathan Scott Date: Tue, 2 Feb 2021 18:14:42 +0000 Subject: [PATCH 2/7] [RESTRICT AUTOMERGE] Use userId instead of USER_CURRENT in shouldLockKeyguard. USER_CURRENT is not an acceptable input to isSecure(). The test has also been updated as the use of any() for the mock hid this bug. Test: atest LockTaskControllerTest Bug: 176801033 Change-Id: I8aa736bb7b8b60937ad4319e6127c356be5e9b55 (cherry picked from commit acb731f97842b95fc51cc0fc71a61b0f9156b789) --- .../java/com/android/server/wm/LockTaskController.java | 10 +++++----- .../com/android/server/wm/LockTaskControllerTest.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/wm/LockTaskController.java b/services/core/java/com/android/server/wm/LockTaskController.java index c4a42ab7e7be2..281d2c9ed9927 100644 --- a/services/core/java/com/android/server/wm/LockTaskController.java +++ b/services/core/java/com/android/server/wm/LockTaskController.java @@ -512,7 +512,7 @@ public class LockTaskController { setStatusBarState(mLockTaskModeState, userId); setKeyguardState(mLockTaskModeState, userId); if (oldLockTaskModeState == LOCK_TASK_MODE_PINNED) { - lockKeyguardIfNeeded(); + lockKeyguardIfNeeded(userId); } if (getDevicePolicyManager() != null) { getDevicePolicyManager().notifyLockTaskModeChanged(false, null, userId); @@ -824,15 +824,15 @@ public class LockTaskController { * Helper method for locking the device immediately. This may be necessary when the device * leaves the pinned mode. */ - private void lockKeyguardIfNeeded() { - if (shouldLockKeyguard()) { + private void lockKeyguardIfNeeded(int userId) { + if (shouldLockKeyguard(userId)) { mWindowManager.lockNow(null); mWindowManager.dismissKeyguard(null /* callback */, null /* message */); getLockPatternUtils().requireCredentialEntry(USER_ALL); } } - private boolean shouldLockKeyguard() { + private boolean shouldLockKeyguard(int userId) { // This functionality should be kept consistent with // com.android.settings.security.ScreenPinningSettings (see b/127605586) try { @@ -842,7 +842,7 @@ public class LockTaskController { } catch (Settings.SettingNotFoundException e) { // Log to SafetyNet for b/127605586 android.util.EventLog.writeEvent(0x534e4554, "127605586", -1, ""); - return getLockPatternUtils().isSecure(USER_CURRENT); + return getLockPatternUtils().isSecure(userId); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java index e345becf0499f..fdc01b48398f9 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java @@ -450,7 +450,7 @@ public class LockTaskControllerTest { Settings.Secure.clearProviderForTest(); // AND a password is set - when(mLockPatternUtils.isSecure(anyInt())) + when(mLockPatternUtils.isSecure(TEST_USER_ID)) .thenReturn(true); // AND there is a task record From 71f7f38f61cd8c97504c98cdb54d1407985450e0 Mon Sep 17 00:00:00 2001 From: Beth Thibodeau Date: Wed, 27 Jan 2021 13:33:34 -0500 Subject: [PATCH 3/7] Limit maximum allowed size for a status bar icon Bug: 169255797 Test: atest StatusBarIconViewTest Test: verified that app crashes instead of SysUI following repro steps Change-Id: I66e3bb873841b5babfd522c82cea7bed361fc14c (cherry picked from commit 4394595debfd3f625b45a8b2280cdbec61f8dc71) (cherry picked from commit 3a62e9ffaad2d81bf176decb7b60266bd6005301) --- .../android/systemui/statusbar/StatusBarIconView.java | 10 ++++++++++ .../systemui/statusbar/StatusBarIconViewTest.java | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 8cf8a22999220..25ae5c2dadef1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -83,6 +83,9 @@ 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; + private static final String TAG = "StatusBarIconView"; private static final Property ICON_APPEAR_AMOUNT = new FloatProperty("iconAppearAmount") { @@ -378,6 +381,13 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi Log.w(TAG, "No icon for slot " + mSlot + "; " + mIcon.icon); return false; } + + if (drawable.getIntrinsicWidth() > MAX_IMAGE_SIZE + || drawable.getIntrinsicHeight() > MAX_IMAGE_SIZE) { + Log.w(TAG, "Drawable is too large " + mIcon); + return false; + } + if (withClear) { setImageDrawable(null); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java index 9971e0cf81a32..daa805a8f6e6a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java @@ -35,6 +35,7 @@ import android.content.ContextWrapper; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Resources; +import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.Icon; import android.os.UserHandle; @@ -123,4 +124,13 @@ public class StatusBarIconViewTest extends SysuiTestCase { assertEquals("Transparent backgrounds should fallback to drawable color", color, mIconView.getStaticDrawableColor()); } + + @Test + public void testGiantImageNotAllowed() { + Bitmap largeBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888); + Icon icon = Icon.createWithBitmap(largeBitmap); + StatusBarIcon largeIcon = new StatusBarIcon(UserHandle.ALL, "mockPackage", + icon, 0, 0, ""); + assertFalse(mIconView.set(largeIcon)); + } } \ No newline at end of file From aad7fdc4f82ad56e332d3c23c5d07719e069b099 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Tue, 2 Mar 2021 09:21:22 -0800 Subject: [PATCH 4/7] Restrict the overridden min size for PiP Per go/cdd-proposal-pip-size, the absolute minimum size when overridden should be 48dp. Bug: 174302616 Test: atest PinnedStackTests#testEnterPipWithTinyMinimalSize Merged-In: I2f0dfd9a79049aaf696fde8703994deaecce63f5 Change-Id: I2f0dfd9a79049aaf696fde8703994deaecce63f5 (cherry picked from commit 2a18b15dfbb8c494ab58679c4aceb83da9683441) --- core/res/res/values/dimens.xml | 7 +++++++ core/res/res/values/symbols.xml | 1 + .../com/android/systemui/pip/PipTaskOrganizer.java | 13 ++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index ebaf85c64a142..d165930d3c942 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -632,6 +632,13 @@ 108dp + + 48dp + 80dp diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 06f357e79a621..ee4c6941d6c54 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1927,6 +1927,7 @@ + diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index 54df53dbe6d7a..29d77a72c73a1 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -45,6 +45,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.RemoteException; +import android.util.EventLog; import android.util.Log; import android.util.Size; import android.view.SurfaceControl; @@ -223,6 +224,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory mSurfaceControlTransactionFactory; private PictureInPictureParams mPictureInPictureParams; + private int mOverridableMinSize; /** * If set to {@code true}, the entering animation will be skipped and we will wait for @@ -244,6 +246,8 @@ public class PipTaskOrganizer extends TaskOrganizer implements mPipBoundsHandler = boundsHandler; mEnterExitAnimationDuration = context.getResources() .getInteger(R.integer.config_pipResizeAnimationDuration); + mOverridableMinSize = context.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.overridable_minimal_size_pip_resizable_task); mSurfaceTransactionHelper = surfaceTransactionHelper; mPipAnimationController = pipAnimationController; mPipUiEventLoggerLogger = pipUiEventLogger; @@ -949,7 +953,14 @@ public class PipTaskOrganizer extends TaskOrganizer implements // -1 will be populated if an activity specifies defaultWidth/defaultHeight in // without minWidth/minHeight if (windowLayout.minWidth > 0 && windowLayout.minHeight > 0) { - return new Size(windowLayout.minWidth, windowLayout.minHeight); + // If either dimension is smaller than the allowed minimum, adjust them + // according to mOverridableMinSize and log to SafeNet + if (windowLayout.minWidth < mOverridableMinSize + || windowLayout.minHeight < mOverridableMinSize) { + EventLog.writeEvent(0x534e4554, "174302616", -1, ""); + } + return new Size(Math.max(windowLayout.minWidth, mOverridableMinSize), + Math.max(windowLayout.minHeight, mOverridableMinSize)); } return null; } From 53de4fdfe37c73383b60a203e063384abacc9c0c Mon Sep 17 00:00:00 2001 From: Nate Myren Date: Mon, 30 Nov 2020 12:06:26 -0800 Subject: [PATCH 5/7] Revoke storage on SDK downgrade or new full storage request When an app downgrades from above API 28 to below, or when an app begins requesting full storage in api 29, revoke storage permissions Test: Atest StorageEscalationTest Bug: 171430330 Merged-In: Ia6bd5658b77a26ab15fea013ec875050457473e0 Change-Id: Ia6bd5658b77a26ab15fea013ec875050457473e0 (cherry picked from commit b29834bc15dc9de1a1b138741c3c0d4fa8169110) --- .../server/pm/PackageManagerService.java | 1 + .../permission/PermissionManagerService.java | 62 +++++++++++++++++++ .../PermissionManagerServiceInternal.java | 11 ++++ 3 files changed, 74 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9ac2da188babc..7a8d1f9fec5d5 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -12501,6 +12501,7 @@ public class PackageManagerService extends IPackageManager.Stub if (hasOldPkg) { mPermissionManager.revokeRuntimePermissionsIfGroupChanged(pkg, oldPkg, allPackageNames); + mPermissionManager.revokeStoragePermissionsIfScopeExpanded(pkg, oldPkg); } if (hasPermissionDefinitionChanges) { mPermissionManager.revokeRuntimePermissionsIfPermissionDefinitionChanged( diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 3ffca028b1c00..b500e1631fb52 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -206,6 +206,9 @@ public class PermissionManagerService extends IPermissionManager.Stub { private static final int USER_PERMISSION_FLAGS = FLAG_PERMISSION_USER_SET | FLAG_PERMISSION_USER_FIXED; + /** All storage permissions */ + private static final List STORAGE_PERMISSIONS = new ArrayList<>(); + /** If the permission of the value is granted, so is the key */ private static final Map FULLER_PERMISSION_MAP = new HashMap<>(); @@ -214,6 +217,9 @@ public class PermissionManagerService extends IPermissionManager.Stub { Manifest.permission.ACCESS_FINE_LOCATION); FULLER_PERMISSION_MAP.put(Manifest.permission.INTERACT_ACROSS_USERS, Manifest.permission.INTERACT_ACROSS_USERS_FULL); + STORAGE_PERMISSIONS.add(Manifest.permission.READ_EXTERNAL_STORAGE); + STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); + STORAGE_PERMISSIONS.add(Manifest.permission.ACCESS_MEDIA_LOCATION); } /** Lock to protect internal data access */ @@ -2265,6 +2271,49 @@ public class PermissionManagerService extends IPermissionManager.Stub { return protectionLevel; } + /** + * If the app is updated, and has scoped storage permissions, then it is possible that the + * app updated in an attempt to get unscoped storage. If so, revoke all storage permissions. + * @param newPackage The new package that was installed + * @param oldPackage The old package that was updated + */ + private void revokeStoragePermissionsIfScopeExpanded( + @NonNull AndroidPackage newPackage, + @NonNull AndroidPackage oldPackage, + @NonNull PermissionCallback permissionCallback) { + boolean downgradedSdk = oldPackage.getTargetSdkVersion() >= Build.VERSION_CODES.Q + && newPackage.getTargetSdkVersion() < Build.VERSION_CODES.Q; + boolean upgradedSdk = oldPackage.getTargetSdkVersion() < Build.VERSION_CODES.Q + && newPackage.getTargetSdkVersion() >= Build.VERSION_CODES.Q; + boolean newlyRequestsLegacy = !upgradedSdk && !oldPackage.isRequestLegacyExternalStorage() + && newPackage.isRequestLegacyExternalStorage(); + + if (!newlyRequestsLegacy && !downgradedSdk) { + return; + } + + final int callingUid = Binder.getCallingUid(); + final int userId = UserHandle.getUserId(newPackage.getUid()); + int numRequestedPermissions = newPackage.getRequestedPermissions().size(); + for (int i = 0; i < numRequestedPermissions; i++) { + PermissionInfo permInfo = getPermissionInfo(newPackage.getRequestedPermissions().get(i), + newPackage.getPackageName(), 0); + if (permInfo == null || !STORAGE_PERMISSIONS.contains(permInfo.name)) { + continue; + } + + EventLog.writeEvent(0x534e4554, "171430330", newPackage.getUid(), + "Revoking permission " + permInfo.name + " from package " + + newPackage.getPackageName() + " as either the sdk downgraded " + + downgradedSdk + " or newly requested legacy full storage " + + newlyRequestsLegacy); + + revokeRuntimePermissionInternal(permInfo.name, newPackage.getPackageName(), + false, callingUid, userId, null, permissionCallback); + } + + } + /** * We might auto-grant permissions if any permission of the group is already granted. Hence if * the group of a granted permission changes we need to revoke it to avoid having permissions of @@ -4734,6 +4783,19 @@ public class PermissionManagerService extends IPermissionManager.Stub { @UserIdInt int userId) { return PermissionManagerService.this.isPermissionsReviewRequired(pkg, userId); } + /** + * If the app is updated, and has scoped storage permissions, then it is possible that the + * app updated in an attempt to get unscoped storage. If so, revoke all storage permissions. + * @param newPackage The new package that was installed + * @param oldPackage The old package that was updated + */ + public void revokeStoragePermissionsIfScopeExpanded( + @NonNull AndroidPackage newPackage, + @NonNull AndroidPackage oldPackage + ) { + PermissionManagerService.this.revokeStoragePermissionsIfScopeExpanded(newPackage, + oldPackage, mDefaultPermissionCallback); + } @Override public void revokeRuntimePermissionsIfGroupChanged( diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java index 31a65ba35f5eb..df0edfa16924b 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java @@ -265,6 +265,17 @@ public abstract class PermissionManagerServiceInternal extends PermissionManager @NonNull List permissionsToRevoke, @NonNull ArrayList allPackageNames); + /** + * If the app is updated, and has scoped storage permissions, then it is possible that the + * app updated in an attempt to get unscoped storage. If so, revoke all storage permissions. + * @param newPackage The new package that was installed + * @param oldPackage The old package that was updated + */ + public abstract void revokeStoragePermissionsIfScopeExpanded( + @NonNull AndroidPackage newPackage, + @NonNull AndroidPackage oldPackage + ); + /** * Add all permissions in the given package. *

From e01fef361bb7371e10b990737caed7a3799bdc3b Mon Sep 17 00:00:00 2001 From: Miranda Kephart Date: Mon, 8 Feb 2021 11:30:34 -0500 Subject: [PATCH 6/7] [DO NOT MERGE] Make screenshot error notification PendingIntent immutable Bug: 178189250 Test: manual (using POC in bug) Change-Id: I787915c0493d18500e7531bd0ca7191532441f93 (cherry picked from commit 87adff6976791968f9cd54a340bdae8bcb2c05a4) --- .../systemui/screenshot/ScreenshotNotificationsController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java index 42dde4064a971..b8a468e0ce450 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotNotificationsController.java @@ -252,7 +252,7 @@ public class ScreenshotNotificationsController { dpm.createAdminSupportIntent(DevicePolicyManager.POLICY_DISABLE_SCREEN_CAPTURE); if (intent != null) { final PendingIntent pendingIntent = PendingIntent.getActivityAsUser( - mContext, 0, intent, 0, null, UserHandle.CURRENT); + mContext, 0, intent, PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT); b.setContentIntent(pendingIntent); } From 024b57030326ee8c6a0a2d96db83136ea549acbd Mon Sep 17 00:00:00 2001 From: Paul Scovanner Date: Tue, 30 Mar 2021 21:06:32 +0000 Subject: [PATCH 7/7] Revert "Limit maximum allowed size for a status bar icon" This reverts commit 3a62e9ffaad2d81bf176decb7b60266bd6005301. Reason for revert: Regression (eg: b/183696500) caused by security fix. Revert needed to respin May MPR build. Change-Id: If9e34a0120121ed851b911c8a8bd2bbe0e0f9e34 (cherry picked from commit 2455fc526470713c22b3a0a8d7f4a3ec910fa61c) --- .../android/systemui/statusbar/StatusBarIconView.java | 10 ---------- .../systemui/statusbar/StatusBarIconViewTest.java | 10 ---------- 2 files changed, 20 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 25ae5c2dadef1..8cf8a22999220 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -83,9 +83,6 @@ 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; - private static final String TAG = "StatusBarIconView"; private static final Property ICON_APPEAR_AMOUNT = new FloatProperty("iconAppearAmount") { @@ -381,13 +378,6 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi Log.w(TAG, "No icon for slot " + mSlot + "; " + mIcon.icon); return false; } - - if (drawable.getIntrinsicWidth() > MAX_IMAGE_SIZE - || drawable.getIntrinsicHeight() > MAX_IMAGE_SIZE) { - Log.w(TAG, "Drawable is too large " + mIcon); - return false; - } - if (withClear) { setImageDrawable(null); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java index daa805a8f6e6a..9971e0cf81a32 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java @@ -35,7 +35,6 @@ import android.content.ContextWrapper; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Resources; -import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.Icon; import android.os.UserHandle; @@ -124,13 +123,4 @@ public class StatusBarIconViewTest extends SysuiTestCase { assertEquals("Transparent backgrounds should fallback to drawable color", color, mIconView.getStaticDrawableColor()); } - - @Test - public void testGiantImageNotAllowed() { - Bitmap largeBitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888); - Icon icon = Icon.createWithBitmap(largeBitmap); - StatusBarIcon largeIcon = new StatusBarIcon(UserHandle.ALL, "mockPackage", - icon, 0, 0, ""); - assertFalse(mIconView.set(largeIcon)); - } } \ No newline at end of file