Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7e0c658 authored by Matías Hernández's avatar Matías Hernández
Browse files

Visit Uris related to Notification style extras

Even if the corresponding styles themselves were not applied to the Notification.Builder.

Test: atest NotificationManagerServiceTest
Bug: 287640400
Change-Id: I25acab19be7dd486aabede8c91dbad5a1a217abf
Merged-In: I25acab19be7dd486aabede8c91dbad5a1a217abf
parent 12e002b9
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -2533,11 +2533,6 @@ public class Notification implements Parcelable
                }
            }

            final Person person = extras.getParcelable(EXTRA_MESSAGING_PERSON);
            if (person != null && person.getIconUri() != null) {
                visitor.accept(person.getIconUri());
            }

            final RemoteInputHistoryItem[] history = getParcelableArrayFromBundle(extras,
                Notification.EXTRA_REMOTE_INPUT_HISTORY_ITEMS, RemoteInputHistoryItem.class);
            if (history != null) {
@@ -2548,9 +2543,14 @@ public class Notification implements Parcelable
                    }
                }
            }

            // Extras for MessagingStyle. We visit them even if not isStyle(MessagingStyle), since
            // Notification Listeners might use directly (without the isStyle check).
            final Person person = extras.getParcelable(EXTRA_MESSAGING_PERSON);
            if (person != null && person.getIconUri() != null) {
                visitor.accept(person.getIconUri());
            }

        if (MessagingStyle.class.equals(getNotificationStyle()) && extras != null) {
            final Parcelable[] messages = extras.getParcelableArray(EXTRA_MESSAGES);
            if (!ArrayUtils.isEmpty(messages)) {
                for (MessagingStyle.Message message : MessagingStyle.Message
+34 −0
Original line number Diff line number Diff line
@@ -4397,6 +4397,40 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
        verify(visitor, times(1)).accept(eq(personIcon3.getUri()));
    }

    @Test
    public void testVisitUris_styleExtrasWithoutStyle() {
        Notification notification = new Notification.Builder(mContext, "a")
                .setSmallIcon(android.R.drawable.sym_def_app_icon)
                .build();

        Notification.MessagingStyle messagingStyle = new Notification.MessagingStyle(
                personWithIcon("content://user"))
                .addHistoricMessage(new Notification.MessagingStyle.Message("Heyhey!",
                                System.currentTimeMillis(),
                                personWithIcon("content://historicalMessenger")))
                .addMessage(new Notification.MessagingStyle.Message("Are you there",
                                System.currentTimeMillis(),
                                personWithIcon("content://messenger")))
                        .setShortcutIcon(
                                Icon.createWithContentUri("content://conversationShortcut"));
        messagingStyle.addExtras(notification.extras); // Instead of Builder.setStyle(style).

        Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
        notification.visitUris(visitor);

        verify(visitor).accept(eq(Uri.parse("content://user")));
        verify(visitor).accept(eq(Uri.parse("content://historicalMessenger")));
        verify(visitor).accept(eq(Uri.parse("content://messenger")));
        verify(visitor).accept(eq(Uri.parse("content://conversationShortcut")));
    }

    private static Person personWithIcon(String iconUri) {
        return new Person.Builder()
                .setName("Mr " + iconUri)
                .setIcon(Icon.createWithContentUri(iconUri))
                .build();
    }

    @Test
    public void testVisitUris_wearableExtender() {
        Icon actionIcon = Icon.createWithContentUri("content://media/action");