summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorJeff DeCew <jeffdq@google.com>2021-03-17 10:57:56 -0400
committerJeff DeCew <jeffdq@google.com>2021-03-17 11:06:43 -0400
commit3f654a2cf6cb1f7b48013fcf0a88369a6b2e2a8a (patch)
treedb510f0f282088735e510a786208dafb71c6664b /core/java
parent7003e6d3c128f3cc20a2658f1a9b52d998ccee30 (diff)
Fix an likely ClassCastException in Notification.visitUris
The code (and unit test) treated EXTRA_AUDIO_CONTENTS_URI as a Uri, but the extra is very explicitly documented as a String. Sample code and everything. Fixes: 182997213 Test: atest NotificationManagerServiceTest#testVisitUris Test: atest NotificationManagerServiceTest#testVisitUris_audioContentsString Change-Id: I3cfc657f88d8e273270c777b199ce056ff2ffc67
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/app/Notification.java12
1 files changed, 11 insertions, 1 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index a3a8a5e6c651..11572953a188 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -2673,7 +2673,17 @@ public class Notification implements Parcelable
if (headsUpContentView != null) headsUpContentView.visitUris(visitor);
if (extras != null) {
- visitor.accept(extras.getParcelable(EXTRA_AUDIO_CONTENTS_URI));
+ // NOTE: The documentation of EXTRA_AUDIO_CONTENTS_URI explicitly says that it is a
+ // String representation of a Uri, but the previous implementation (and unit test) of
+ // this method has always treated it as a Uri object. Given the inconsistency,
+ // supporting both going forward is the safest choice.
+ Object audioContentsUri = extras.get(EXTRA_AUDIO_CONTENTS_URI);
+ if (audioContentsUri instanceof Uri) {
+ visitor.accept((Uri) audioContentsUri);
+ } else if (audioContentsUri instanceof String) {
+ visitor.accept(Uri.parse((String) audioContentsUri));
+ }
+
if (extras.containsKey(EXTRA_BACKGROUND_IMAGE_URI)) {
visitor.accept(Uri.parse(extras.getString(EXTRA_BACKGROUND_IMAGE_URI)));
}