From 86fdbd6f6bb97334781ed89be7a2dd676496aec8 Mon Sep 17 00:00:00 2001 From: jaewan Date: Mon, 17 Jan 2022 12:10:36 +0000 Subject: [PATCH] Only unsubscribe from specified parentId PiperOrigin-RevId: 422331961 --- .../session/MediaLibrarySessionImpl.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java b/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java index df05207dd5..0a13eb48cb 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java @@ -183,9 +183,7 @@ import java.util.concurrent.Future; () -> { @Nullable LibraryResult result = tryGetFutureResult(future); if (result == null || result.resultCode != RESULT_SUCCESS) { - synchronized (lock) { - subscriptions.remove(checkStateNotNull(browser.getControllerCb())); - } + removeSubscription(controller, parentId); } }, MoreExecutors.directExecutor()); @@ -203,11 +201,7 @@ import java.util.concurrent.Future; "onUnsubscribe must return non-null future"); future.addListener( - () -> { - synchronized (lock) { - subscriptions.remove(checkStateNotNull(browser.getControllerCb())); - } - }, + () -> removeSubscription(checkStateNotNull(browser.getControllerCb()), parentId), MoreExecutors.directExecutor()); return future; @@ -307,4 +301,16 @@ import java.util.concurrent.Future; } } } + + private void removeSubscription(ControllerCb controllerCb, String parentId) { + synchronized (lock) { + @Nullable Set subscription = subscriptions.get(controllerCb); + if (subscription != null) { + subscription.remove(parentId); + if (subscription.isEmpty()) { + subscriptions.remove(controllerCb); + } + } + } + } }