From 6c05a469cb54d1b05d60ec893766bc229802dbc9 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 16 Jun 2021 19:13:13 +0100 Subject: [PATCH] Add MediaSessionConnector#setDispatchUnsupportedActionsEnabled(boolean) This enables actions that are not advertised by the MediaSession to be dispatched either way. PiperOrigin-RevId: 379765015 --- .../mediasession/MediaSessionConnector.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java index c2eb58d40f..86dd8148bc 100644 --- a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java +++ b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java @@ -487,6 +487,7 @@ public final class MediaSessionConnector { private long enabledPlaybackActions; private boolean metadataDeduplicationEnabled; + private boolean dispatchUnsupportedActionsEnabled; /** * Creates an instance. @@ -725,6 +726,14 @@ public final class MediaSessionConnector { } } + /** + * Sets whether actions that are not advertised to the {@link MediaSessionCompat} will be + * dispatched either way. Default value is false. + */ + public void setDispatchUnsupportedActionsEnabled(boolean dispatchUnsupportedActionsEnabled) { + this.dispatchUnsupportedActionsEnabled = dispatchUnsupportedActionsEnabled; + } + /** * Sets whether {@link MediaMetadataProvider#sameAs(MediaMetadataCompat, MediaMetadataCompat)} * should be consulted before calling {@link MediaSessionCompat#setMetadata(MediaMetadataCompat)}. @@ -949,13 +958,15 @@ public final class MediaSessionConnector { @EnsuresNonNullIf(result = true, expression = "player") private boolean canDispatchPlaybackAction(long action) { - return player != null && (enabledPlaybackActions & action) != 0; + return player != null + && ((enabledPlaybackActions & action) != 0 || dispatchUnsupportedActionsEnabled); } @EnsuresNonNullIf(result = true, expression = "playbackPreparer") private boolean canDispatchToPlaybackPreparer(long action) { return playbackPreparer != null - && (playbackPreparer.getSupportedPrepareActions() & action) != 0; + && ((playbackPreparer.getSupportedPrepareActions() & action) != 0 + || dispatchUnsupportedActionsEnabled); } @EnsuresNonNullIf( @@ -964,7 +975,8 @@ public final class MediaSessionConnector { private boolean canDispatchToQueueNavigator(long action) { return player != null && queueNavigator != null - && (queueNavigator.getSupportedQueueNavigatorActions(player) & action) != 0; + && ((queueNavigator.getSupportedQueueNavigatorActions(player) & action) != 0 + || dispatchUnsupportedActionsEnabled); } @EnsuresNonNullIf(