OSDN Git Service

Do not call ItemCallback after disconnected
authorSungsoo Lim <sungsoo@google.com>
Thu, 3 Aug 2017 04:36:22 +0000 (13:36 +0900)
committerSungsoo Lim <sungsoo@google.com>
Thu, 3 Aug 2017 04:48:48 +0000 (04:48 +0000)
Bug: 64119114
Test: Passed MediaBrowserTest
Change-Id: Icf3283710abe7c03f4a73532b33ec2a306d2280b

media/java/android/media/browse/MediaBrowser.java
media/java/android/service/media/MediaBrowserService.java

index ece19e4..90531c3 100644 (file)
@@ -445,6 +445,9 @@ public final class MediaBrowser {
         ResultReceiver receiver = new ResultReceiver(mHandler) {
             @Override
             protected void onReceiveResult(int resultCode, Bundle resultData) {
+                if (!isConnected()) {
+                    return;
+                }
                 if (resultCode != 0 || resultData == null
                         || !resultData.containsKey(MediaBrowserService.KEY_MEDIA_ITEM)) {
                     cb.onError(mediaId);
index b52906d..4df645d 100644 (file)
@@ -700,6 +700,13 @@ public abstract class MediaBrowserService extends Service {
                 new Result<MediaBrowser.MediaItem>(itemId) {
             @Override
             void onResultSent(MediaBrowser.MediaItem item, @ResultFlags int flag) {
+                if (mConnections.get(connection.callbacks.asBinder()) != connection) {
+                    if (DBG) {
+                        Log.d(TAG, "Not sending onLoadItem result for connection that has"
+                                + " been disconnected. pkg=" + connection.pkg + " id=" + itemId);
+                    }
+                    return;
+                }
                 if ((flag & RESULT_FLAG_ON_LOAD_ITEM_NOT_IMPLEMENTED) != 0) {
                     receiver.send(RESULT_ERROR, null);
                     return;