Merge "Fix an likely ClassCastException in Notification.visitUris" into sc-dev

This commit is contained in:
Jeff DeCew
2021-03-19 00:11:32 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 1 deletions

View File

@@ -2684,7 +2684,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)));
}

View File

@@ -4037,6 +4037,24 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
verify(visitor, times(1)).accept(eq(backgroundImage));
}
@Test
public void testVisitUris_audioContentsString() throws Exception {
final Uri audioContents = Uri.parse("content://com.example/audio");
Bundle extras = new Bundle();
extras.putString(Notification.EXTRA_AUDIO_CONTENTS_URI, audioContents.toString());
Notification n = new Notification.Builder(mContext, "a")
.setContentTitle("notification with uris")
.setSmallIcon(android.R.drawable.sym_def_app_icon)
.addExtras(extras)
.build();
Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
n.visitUris(visitor);
verify(visitor, times(1)).accept(eq(audioContents));
}
@Test
public void testSetNotificationPolicy_preP_setOldFields() {
ZenModeHelper mZenModeHelper = mock(ZenModeHelper.class);