Merge "Remove app provided custom views" into main
diff --git a/core/java/android/app/notification.aconfig b/core/java/android/app/notification.aconfig
index 6ceae17..55c3bb60 100644
--- a/core/java/android/app/notification.aconfig
+++ b/core/java/android/app/notification.aconfig
@@ -166,4 +166,11 @@
namespace: "systemui"
description: "[Minimal HUN] Enables the compact heads up notification reply capability for Conversation Notifications"
bug: "336229954"
-}
\ No newline at end of file
+}
+
+flag {
+ name: "remove_remote_views"
+ namespace: "systemui"
+ description: "Removes all custom views"
+ bug: "342602960"
+}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 6f65b79..c7b0f7d 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -7774,25 +7774,45 @@
}
private void checkRemoteViews(String pkg, String tag, int id, Notification notification) {
- if (removeRemoteView(pkg, tag, id, notification.contentView)) {
+ if (android.app.Flags.removeRemoteViews()) {
+ if (notification.contentView != null || notification.bigContentView != null
+ || notification.headsUpContentView != null
+ || (notification.publicVersion != null
+ && (notification.publicVersion.contentView != null
+ || notification.publicVersion.bigContentView != null
+ || notification.publicVersion.headsUpContentView != null))) {
+ Slog.i(TAG, "Removed customViews for " + pkg);
+ mUsageStats.registerImageRemoved(pkg);
+ }
notification.contentView = null;
- }
- if (removeRemoteView(pkg, tag, id, notification.bigContentView)) {
notification.bigContentView = null;
- }
- if (removeRemoteView(pkg, tag, id, notification.headsUpContentView)) {
notification.headsUpContentView = null;
- }
- if (notification.publicVersion != null) {
- if (removeRemoteView(pkg, tag, id, notification.publicVersion.contentView)) {
+ if (notification.publicVersion != null) {
notification.publicVersion.contentView = null;
- }
- if (removeRemoteView(pkg, tag, id, notification.publicVersion.bigContentView)) {
notification.publicVersion.bigContentView = null;
- }
- if (removeRemoteView(pkg, tag, id, notification.publicVersion.headsUpContentView)) {
notification.publicVersion.headsUpContentView = null;
}
+ } else {
+ if (removeRemoteView(pkg, tag, id, notification.contentView)) {
+ notification.contentView = null;
+ }
+ if (removeRemoteView(pkg, tag, id, notification.bigContentView)) {
+ notification.bigContentView = null;
+ }
+ if (removeRemoteView(pkg, tag, id, notification.headsUpContentView)) {
+ notification.headsUpContentView = null;
+ }
+ if (notification.publicVersion != null) {
+ if (removeRemoteView(pkg, tag, id, notification.publicVersion.contentView)) {
+ notification.publicVersion.contentView = null;
+ }
+ if (removeRemoteView(pkg, tag, id, notification.publicVersion.bigContentView)) {
+ notification.publicVersion.bigContentView = null;
+ }
+ if (removeRemoteView(pkg, tag, id, notification.publicVersion.headsUpContentView)) {
+ notification.publicVersion.headsUpContentView = null;
+ }
+ }
}
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index e564ba6..15c9bfb 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -10696,6 +10696,7 @@
}
@Test
+ @DisableFlags(android.app.Flags.FLAG_REMOVE_REMOTE_VIEWS)
public void testRemoveLargeRemoteViews() throws Exception {
int removeSize = mContext.getResources().getInteger(
com.android.internal.R.integer.config_notificationStripRemoteViewSizeBytes);
@@ -10758,6 +10759,46 @@
}
@Test
+ @EnableFlags(android.app.Flags.FLAG_REMOVE_REMOTE_VIEWS)
+ public void testRemoveRemoteViews() throws Exception {
+ Notification np = new Notification.Builder(mContext, "test")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .setContentText("test")
+ .setCustomContentView(mock(RemoteViews.class))
+ .setCustomBigContentView(mock(RemoteViews.class))
+ .setCustomHeadsUpContentView(mock(RemoteViews.class))
+ .build();
+ Notification n = new Notification.Builder(mContext, "test")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .setContentText("test")
+ .setCustomContentView(mock(RemoteViews.class))
+ .setCustomBigContentView(mock(RemoteViews.class))
+ .setCustomHeadsUpContentView(mock(RemoteViews.class))
+ .setPublicVersion(np)
+ .build();
+
+ assertNotNull(n.contentView);
+ assertNotNull(n.bigContentView);
+ assertNotNull(n.headsUpContentView);
+
+ assertTrue(np.extras.containsKey(Notification.EXTRA_CONTAINS_CUSTOM_VIEW));
+ assertNotNull(np.contentView);
+ assertNotNull(np.bigContentView);
+ assertNotNull(np.headsUpContentView);
+
+ mService.fixNotification(n, mPkg, "tag", 9, 0, mUid, NOT_FOREGROUND_SERVICE, true);
+
+ assertNull(n.contentView);
+ assertNull(n.bigContentView);
+ assertNull(n.headsUpContentView);
+ assertNull(n.publicVersion.contentView);
+ assertNull(n.publicVersion.bigContentView);
+ assertNull(n.publicVersion.headsUpContentView);
+
+ verify(mUsageStats, times(1)).registerImageRemoved(mPkg);
+ }
+
+ @Test
public void testNotificationBubbles_flagAutoExpandForeground_fails_notForeground()
throws Exception {
setUpPrefsForBubbles(mPkg, mUid,