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

Commit f47b41a1 authored by Ioana Alexandru's avatar Ioana Alexandru
Browse files

Add visitUri method to Person and MessagingStyle.Message.

This is both to avoid repeating code when visiting these classes, as
well as to make it more likely that if someone changes the class (e.g.
adds another icon), they see this method and update it accordingly.
Otherwise they'd have to know about Notification.visitUris.

Bug: 281044385
Test: atest NotificationTest NotificationManagerTest
Change-Id: I1ce6bebd9452466d005505dc5b99a0fdc0e05e80
parent 3c57f0d1
Loading
Loading
Loading
Loading
+25 −21
Original line number Diff line number Diff line
@@ -2833,9 +2833,11 @@ public class Notification implements Parcelable
    }
    /**
     * Note all {@link Uri} that are referenced internally, with the expectation
     * that Uri permission grants will need to be issued to ensure the recipient
     * of this object is able to render its contents.
    * Note all {@link Uri} that are referenced internally, with the expectation that Uri permission
    * grants will need to be issued to ensure the recipient of this object is able to render its
    * contents.
    * See b/281044385 for more context and examples about what happens when this isn't done
    * correctly.
    *
    * @hide
    */
@@ -2882,13 +2884,13 @@ public class Notification implements Parcelable
            ArrayList<Person> people = extras.getParcelableArrayList(EXTRA_PEOPLE_LIST, android.app.Person.class);
            if (people != null && !people.isEmpty()) {
                for (Person p : people) {
                    visitor.accept(p.getIconUri());
                    p.visitUris(visitor);
                }
            }
            final Person person = extras.getParcelable(EXTRA_MESSAGING_PERSON, Person.class);
            if (person != null) {
                visitor.accept(person.getIconUri());
                person.visitUris(visitor);
            }
            final RemoteInputHistoryItem[] history = extras.getParcelableArray(
@@ -2910,12 +2912,7 @@ public class Notification implements Parcelable
            if (!ArrayUtils.isEmpty(messages)) {
                for (MessagingStyle.Message message : MessagingStyle.Message
                        .getMessagesFromBundleArray(messages)) {
                    visitor.accept(message.getDataUri());
                    Person senderPerson = message.getSenderPerson();
                    if (senderPerson != null) {
                        visitor.accept(senderPerson.getIconUri());
                    }
                    message.visitUris(visitor);
                }
            }
@@ -2924,12 +2921,7 @@ public class Notification implements Parcelable
            if (!ArrayUtils.isEmpty(historic)) {
                for (MessagingStyle.Message message : MessagingStyle.Message
                        .getMessagesFromBundleArray(historic)) {
                    visitor.accept(message.getDataUri());
                    Person senderPerson = message.getSenderPerson();
                    if (senderPerson != null) {
                        visitor.accept(senderPerson.getIconUri());
                    }
                    message.visitUris(visitor);
                }
            }
@@ -2939,7 +2931,7 @@ public class Notification implements Parcelable
        if (isStyle(CallStyle.class) & extras != null) {
            Person callPerson = extras.getParcelable(EXTRA_CALL_PERSON, Person.class);
            if (callPerson != null) {
                visitor.accept(callPerson.getIconUri());
                callPerson.visitUris(visitor);
            }
            visitIconUri(visitor, extras.getParcelable(EXTRA_VERIFICATION_ICON, Icon.class));
        }
@@ -8832,6 +8824,18 @@ public class Notification implements Parcelable
                return bundle;
            }
            /**
             * See {@link Notification#visitUris(Consumer)}.
             *
             * @hide
             */
            public void visitUris(@NonNull Consumer<Uri> visitor) {
                visitor.accept(getDataUri());
                if (mSender != null) {
                    mSender.visitUris(visitor);
                }
            }
            /**
             * Returns a list of messages read from the given bundle list, e.g.
             * {@link #EXTRA_MESSAGES} or {@link #EXTRA_HISTORIC_MESSAGES}.
+14 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.os.Parcel;
import android.os.Parcelable;

import java.util.Objects;
import java.util.function.Consumer;

/**
 * Provides an immutable reference to an entity that appears repeatedly on different surfaces of the
@@ -177,6 +178,19 @@ public final class Person implements Parcelable {
        dest.writeBoolean(mIsBot);
    }

    /**
     * Note all {@link Uri} that are referenced internally, with the expectation that Uri permission
     * grants will need to be issued to ensure the recipient of this object is able to render its
     * contents.
     * See b/281044385 for more context and examples about what happens when this isn't done
     * correctly.
     *
     * @hide
     */
    public void visitUris(@NonNull Consumer<Uri> visitor) {
        visitor.accept(getIconUri());
    }

    /** Builder for the immutable {@link Person} class. */
    public static class Builder {
        @Nullable private CharSequence mName;