Visit Uris added by WearableExtender

Bug: 283962802
Test: atest + manual (POC app now crashes on notify() as expected)
Change-Id: I0da18c631eb5e4844a48760c7aaedab715a0bfed
Merged-In: I0da18c631eb5e4844a48760c7aaedab715a0bfed
This commit is contained in:
Matías Hernández
2023-07-05 13:52:21 +02:00
parent 7e6c75ccb5
commit a6f44e911f
2 changed files with 36 additions and 1 deletions

View File

@@ -1831,6 +1831,10 @@ public class Notification implements Parcelable
}
}
private void visitUris(@NonNull Consumer<Uri> visitor) {
visitIconUri(visitor, getIcon());
}
@Override
public Action clone() {
return new Action(
@@ -2508,7 +2512,7 @@ public class Notification implements Parcelable
if (actions != null) {
for (Action action : actions) {
visitIconUri(visitor, action.getIcon());
action.visitUris(visitor);
}
}
@@ -2579,6 +2583,11 @@ public class Notification implements Parcelable
if (mBubbleMetadata != null) {
visitIconUri(visitor, mBubbleMetadata.getIcon());
}
if (extras != null && extras.containsKey(WearableExtender.EXTRA_WEARABLE_EXTENSIONS)) {
WearableExtender extender = new WearableExtender(this);
extender.visitUris(visitor);
}
}
/**
@@ -10289,6 +10298,12 @@ public class Notification implements Parcelable
mFlags &= ~mask;
}
}
private void visitUris(@NonNull Consumer<Uri> visitor) {
for (Action action : mActions) {
action.visitUris(visitor);
}
}
}
/**

View File

@@ -4390,6 +4390,26 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
verify(visitor, times(1)).accept(eq(personIcon3.getUri()));
}
@Test
public void testVisitUris_wearableExtender() {
Icon actionIcon = Icon.createWithContentUri("content://media/action");
Icon wearActionIcon = Icon.createWithContentUri("content://media/wearAction");
PendingIntent intent = PendingIntent.getActivity(mContext, 0, new Intent(),
PendingIntent.FLAG_IMMUTABLE);
Notification n = new Notification.Builder(mContext, "a")
.setSmallIcon(android.R.drawable.sym_def_app_icon)
.addAction(new Notification.Action.Builder(actionIcon, "Hey!", intent).build())
.extend(new Notification.WearableExtender().addAction(
new Notification.Action.Builder(wearActionIcon, "Wear!", intent).build()))
.build();
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
n.visitUris(visitor);
verify(visitor).accept(eq(actionIcon.getUri()));
verify(visitor).accept(eq(wearActionIcon.getUri()));
}
@Test
public void testSetNotificationPolicy_preP_setOldFields() {
ZenModeHelper mZenModeHelper = mock(ZenModeHelper.class);