Class SessionCallbackBuilder.DefaultAllowedCommandProvider
- java.lang.Object
-
- com.google.android.exoplayer2.ext.media2.SessionCallbackBuilder.DefaultAllowedCommandProvider
-
- All Implemented Interfaces:
SessionCallbackBuilder.AllowedCommandProvider
- Enclosing class:
- SessionCallbackBuilder
public static final class SessionCallbackBuilder.DefaultAllowedCommandProvider extends Object implements SessionCallbackBuilder.AllowedCommandProvider
Default implementation ofSessionCallbackBuilder.AllowedCommandProvider
that behaves as follows:- Accepts connection requests from controller if any of the following conditions are met:
- Controller is in the same package as the session.
- Controller is allowed via
setTrustedPackageNames(List)
. - Controller has package name
MediaSessionManager.RemoteUserInfo.LEGACY_CONTROLLER
. Seepackage name limitation
for details. - Controller is trusted (i.e. has MEDIA_CONTENT_CONTROL permission or has enabled notification manager).
- Allows all commands that the current player can handle.
- Accepts all command requests for allowed commands.
Note: this implementation matches the behavior of the ExoPlayer MediaSession extension and
MediaSessionCompat
.
-
-
Constructor Summary
Constructors Constructor Description DefaultAllowedCommandProvider(Context context)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
acceptConnection(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo)
Called to query whether to allow connection from the controller.androidx.media2.session.SessionCommandGroup
getAllowedCommands(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo, androidx.media2.session.SessionCommandGroup baseAllowedSessionCommands)
Called to query allowed commands in following cases: AMediaController
requests to connect, and allowed commands is required to tell initial allowed commands.int
onCommandRequest(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo, androidx.media2.session.SessionCommand command)
Called when aMediaController
has called an API that controlsSessionPlayer
set to theMediaSession
.void
setTrustedPackageNames(List<String> packageNames)
Sets the package names from which the session will accept incoming connections.
-
-
-
Constructor Detail
-
DefaultAllowedCommandProvider
public DefaultAllowedCommandProvider(Context context)
-
-
Method Detail
-
acceptConnection
public boolean acceptConnection(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo)
Description copied from interface:SessionCallbackBuilder.AllowedCommandProvider
Called to query whether to allow connection from the controller.If it returns
true
to accept connection, thenSessionCallbackBuilder.AllowedCommandProvider.getAllowedCommands(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, androidx.media2.session.SessionCommandGroup)
will be immediately followed to return initial allowed command.Prefer use
SessionCallbackBuilder.PostConnectCallback
for any extra initialization about controller, where controller is connected and session can send commands to the controller.- Specified by:
acceptConnection
in interfaceSessionCallbackBuilder.AllowedCommandProvider
- Parameters:
session
- The media session.controllerInfo
- TheMediaSession.ControllerInfo
for the controller that is requesting connect.- Returns:
true
to accept connection.false
otherwise.
-
getAllowedCommands
public androidx.media2.session.SessionCommandGroup getAllowedCommands(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo, androidx.media2.session.SessionCommandGroup baseAllowedSessionCommands)
Description copied from interface:SessionCallbackBuilder.AllowedCommandProvider
Called to query allowed commands in following cases:- A
MediaController
requests to connect, and allowed commands is required to tell initial allowed commands. - Underlying
SessionPlayer
state changes, and allowed commands may be updated viaMediaSession.setAllowedCommands(androidx.media2.session.MediaSession.ControllerInfo, androidx.media2.session.SessionCommandGroup)
.
The provided
baseAllowedSessionCommand
is built automatically based on the state of theSessionPlayer
,SessionCallbackBuilder.RatingCallback
,SessionCallbackBuilder.MediaItemProvider
,SessionCallbackBuilder.CustomCommandProvider
, andSessionCallbackBuilder.SkipCallback
so may be a useful starting point for any required customizations.- Specified by:
getAllowedCommands
in interfaceSessionCallbackBuilder.AllowedCommandProvider
- Parameters:
session
- The media session.controllerInfo
- TheMediaSession.ControllerInfo
for the controller for which allowed commands are being queried.baseAllowedSessionCommands
- Base allowed session commands for customization.- Returns:
- The allowed commands for the controller.
- See Also:
MediaSession.SessionCallback.onConnect(MediaSession, ControllerInfo)
- A
-
onCommandRequest
public int onCommandRequest(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo, androidx.media2.session.SessionCommand command)
Description copied from interface:SessionCallbackBuilder.AllowedCommandProvider
Called when aMediaController
has called an API that controlsSessionPlayer
set to theMediaSession
.- Specified by:
onCommandRequest
in interfaceSessionCallbackBuilder.AllowedCommandProvider
- Parameters:
session
- The media session.controllerInfo
- AMediaSession.ControllerInfo
that needs allowed command update.command
- ASessionCommand
from the controller.- Returns:
- A session result code defined in
SessionResult
. - See Also:
MediaSession.SessionCallback.onCommandRequest(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, androidx.media2.session.SessionCommand)
-
setTrustedPackageNames
public void setTrustedPackageNames(@Nullable List<String> packageNames)
Sets the package names from which the session will accept incoming connections.Apps that have
android.Manifest.permission.MEDIA_CONTENT_CONTROL
, packages listed in enabled_notification_listeners and the current package are always trusted, even if they are not specified here.- Parameters:
packageNames
- Package names from which the session will accept incoming connections.- See Also:
MediaSession.SessionCallback.onConnect(MediaSession, MediaSession.ControllerInfo)
,MediaSessionManager.isTrustedForMediaControl(RemoteUserInfo)
-
-