From 186f3d5c7767e65cc823846b045282c05ed30da5 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 21 Apr 2023 12:39:10 +0100 Subject: [PATCH] Clarify threading requirement for MediaController.releaseFuture And remove unnecessary check for isDone. Issue: androidx/media#345 PiperOrigin-RevId: 525999615 --- .../java/androidx/media3/session/MediaController.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaController.java b/libraries/session/src/main/java/androidx/media3/session/MediaController.java index 68717bef39..b873991672 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaController.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaController.java @@ -505,16 +505,19 @@ public class MediaController implements Player { /** * Releases the future controller returned by {@link Builder#buildAsync()}. It makes sure that the * controller is released by canceling the future if the future is not yet done. + * + *

Must be called on the {@linkplain #getApplicationLooper() application thread} of the media + * controller. */ public static void releaseFuture(Future controllerFuture) { - if (!controllerFuture.isDone()) { - controllerFuture.cancel(/* mayInterruptIfRunning= */ true); + if (controllerFuture.cancel(/* mayInterruptIfRunning= */ true)) { + // Successfully canceled the Future. The controller will be released by MediaControllerHolder. return; } MediaController controller; try { - controller = controllerFuture.get(); - } catch (CancellationException | ExecutionException | InterruptedException e) { + controller = Futures.getDone(controllerFuture); + } catch (CancellationException | ExecutionException e) { return; } controller.release();