MediaBrowserServiceCompat: Handle null results from the implementation
When a null result is sent to ResultWrapper from the implementation of
onLoadChildren and/or onLoadItem on API 23+, the result couldn't be passed
to the origin result object or NPE could be happened.
Bug: 31106294
Change-Id: Idd7e095c3475c2ad3e8cf8a0ce85ec2f38fc4d31
diff --git a/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java b/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java
index 59e44e2..b5c147f 100644
--- a/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/MediaBrowserServiceCompatApi21.java
@@ -68,6 +68,9 @@
} else if (result instanceof Parcel) {
mResultObj.sendResult(
MediaBrowser.MediaItem.CREATOR.createFromParcel((Parcel) result));
+ } else {
+ // The result is null or an invalid instance.
+ mResultObj.sendResult(null);
}
}
diff --git a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
index 091cf35..6c6e523 100644
--- a/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
+++ b/media-compat/java/android/support/v4/media/MediaBrowserServiceCompat.java
@@ -331,9 +331,13 @@
= new Result<MediaBrowserCompat.MediaItem>(itemId) {
@Override
void onResultSent(MediaBrowserCompat.MediaItem item, @ResultFlags int flags) {
- Parcel parcelItem = Parcel.obtain();
- item.writeToParcel(parcelItem, 0);
- resultWrapper.sendResult(parcelItem);
+ if (item == null) {
+ resultWrapper.sendResult(null);
+ } else {
+ Parcel parcelItem = Parcel.obtain();
+ item.writeToParcel(parcelItem, 0);
+ resultWrapper.sendResult(parcelItem);
+ }
}
@Override