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
This commit is contained in:
@@ -2833,12 +2833,14 @@ 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.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
* 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) {
|
||||
if (publicVersion != null) {
|
||||
publicVersion.visitUris(visitor);
|
||||
@@ -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}.
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user