Package com.castlabs.sdk.mediasession

# Interface SessionCallbackBuilder.AllowedCommandProvider

All Known Implementing Classes:
  `SessionCallbackBuilder.DefaultAllowedCommandProvider`

Enclosing class:
  `SessionCallbackBuilder`

public static interface SessionCallbackBuilder.AllowedCommandProvider
Provides allowed commands for `MediaController`.

- ## Method Summary

  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: A `MediaController` 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 a `MediaController` has called an API that controls `SessionPlayer` set to the `MediaSession`.

- ## Method Details

  - ### acceptConnection

    boolean acceptConnection(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo)
    Called to query whether to allow connection from the controller.

    If it returns `true` to accept connection, then `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.

    Parameters:
      `session` - The media session.
      `controllerInfo` - The `MediaSession.ControllerInfo` for the controller that is requesting connect.
    Returns:
      `true` to accept connection. `false` otherwise.

  - ### getAllowedCommands

    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:
    - 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 via `MediaSession.setAllowedCommands(androidx.media2.session.MediaSession.ControllerInfo, androidx.media2.session.SessionCommandGroup)`.

    The provided `baseAllowedSessionCommand` is built automatically based on the state of the `SessionPlayer`, `SessionCallbackBuilder.RatingCallback`, `SessionCallbackBuilder.MediaItemProvider`, `SessionCallbackBuilder.CustomCommandProvider`, and `SessionCallbackBuilder.SkipCallback` so may be a useful starting point for any required customizations.

    Parameters:
      `session` - The media session.
      `controllerInfo` - The `MediaSession.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)`

  - ### onCommandRequest

    int onCommandRequest(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controllerInfo, androidx.media2.session.SessionCommand command)
    Called when a `MediaController` has called an API that controls `SessionPlayer` set to the `MediaSession`.
    Parameters:
      `session` - The media session.
      `controllerInfo` - A `MediaSession.ControllerInfo` that needs allowed command update.
      `command` - A `SessionCommand` 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)`