public abstract class PlaybackControlSupportGlue extends Object implements OnActionClickedListener, View.OnKeyListener
PlaybackControlsRow
and
PlaybackOverlaySupportFragment
that implements a recommended approach to handling standard
playback control actions such as play/pause, fast forward/rewind at progressive speed levels,
and skip to next/previous. This helper class is a glue layer in that it manages the
configuration of and interaction between the leanback UI components by defining a functional
interface to the media player.
You can instantiate a concrete subclass such as MediaControllerGlue
or you must
subclass this abstract helper. To create a subclass you must implement all of the
abstract methods and the subclass must invoke onMetadataChanged()
and
onStateChanged()
appropriately.
To use an instance of the glue layer, first construct an instance. Constructor parameters
inform the glue what speed levels are supported for fast forward/rewind. Providing a
PlaybackOverlaySupportFragment
is optional.
If you have your own controls row you must pass it to setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow)
.
The row will be updated by the glue layer based on the media metadata and playback state.
Alternatively, you may call createControlsRowAndPresenter()
which will set a controls
row and return a row presenter you can use to present the row.
The helper sets a SparseArrayObjectAdapter
on the controls row as the primary actions adapter, and adds actions to it. You can provide
additional actions by overriding createPrimaryActionsAdapter(android.support.v17.leanback.widget.PresenterSelector)
. This helper does not
deal in secondary actions so those you may add separately.
Provide a click listener on your fragment and if an action is clicked, call
onActionClicked(android.support.v17.leanback.widget.Action)
. There is no need to call setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener)
but if you do a click listener will be installed on the fragment and recognized action clicks
will be handled. Your listener will be called only for unhandled actions.
The helper implements a key event handler. If you pass a
PlaybackOverlaySupportFragment
the fragment's input event
handler will be set. Otherwise, you should set the glue object as key event handler to the
ViewHolder when bound by your row presenter; see
RowPresenter.ViewHolder#setOnKeyListener(android.view.View.OnKeyListener)
.
To update the controls row progress during playback, override enableProgressUpdating(boolean)
to manage the lifecycle of a periodic callback to updateProgress()
.
getUpdatePeriod()
provides a recommended update period.
Modifier and Type | Field and Description |
---|---|
static int |
ACTION_CUSTOM_LEFT_FIRST
The adapter key for the first custom control on the left side
of the predefined primary controls.
|
static int |
ACTION_CUSTOM_RIGHT_FIRST
The adapter key for the first custom control on the right side
of the predefined primary controls.
|
static int |
ACTION_FAST_FORWARD
The adapter key for the fast forward control.
|
static int |
ACTION_PLAY_PAUSE
The adapter key for the play/pause control.
|
static int |
ACTION_REWIND
The adapter key for the rewind control.
|
static int |
ACTION_SKIP_TO_NEXT
The adapter key for the skip to next control.
|
static int |
ACTION_SKIP_TO_PREVIOUS
The adapter key for the skip to previous control.
|
static int |
PLAYBACK_SPEED_FAST_L0
The initial (level 0) fast forward playback speed.
|
static int |
PLAYBACK_SPEED_FAST_L1
The level 1 fast forward playback speed.
|
static int |
PLAYBACK_SPEED_FAST_L2
The level 2 fast forward playback speed.
|
static int |
PLAYBACK_SPEED_FAST_L3
The level 3 fast forward playback speed.
|
static int |
PLAYBACK_SPEED_FAST_L4
The level 4 fast forward playback speed.
|
static int |
PLAYBACK_SPEED_INVALID
Invalid playback speed.
|
static int |
PLAYBACK_SPEED_NORMAL
Speed representing playback state that is playing normally.
|
static int |
PLAYBACK_SPEED_PAUSED
Speed representing playback state that is paused.
|
Constructor and Description |
---|
PlaybackControlSupportGlue(Context context,
int[] seekSpeeds)
Constructor for the glue.
|
PlaybackControlSupportGlue(Context context,
int[] fastForwardSpeeds,
int[] rewindSpeeds)
Constructor for the glue.
|
PlaybackControlSupportGlue(Context context,
PlaybackOverlaySupportFragment fragment,
int[] seekSpeeds)
Constructor for the glue.
|
PlaybackControlSupportGlue(Context context,
PlaybackOverlaySupportFragment fragment,
int[] fastForwardSpeeds,
int[] rewindSpeeds)
Constructor for the glue.
|
Modifier and Type | Method and Description |
---|---|
PlaybackControlsRowPresenter |
createControlsRowAndPresenter()
Helper method for instantiating a
PlaybackControlsRow and corresponding
PlaybackControlsRowPresenter . |
protected SparseArrayObjectAdapter |
createPrimaryActionsAdapter(PresenterSelector presenterSelector)
Creates the primary action adapter.
|
void |
enableProgressUpdating(boolean enable)
Override this to start/stop a runnable to call
updateProgress() at
an interval such as getUpdatePeriod() . |
Context |
getContext()
Returns the context.
|
PlaybackControlsRow |
getControlsRow()
Returns the playback controls row managed by the glue layer.
|
abstract int |
getCurrentPosition()
Returns the current position of the media item in milliseconds.
|
abstract int |
getCurrentSpeedId()
Returns the current playback speed.
|
int[] |
getFastForwardSpeeds()
Returns the fast forward speeds.
|
PlaybackOverlaySupportFragment |
getFragment()
Returns the fragment.
|
abstract Drawable |
getMediaArt()
Returns a bitmap of the art for the media item.
|
abstract int |
getMediaDuration()
Returns the duration of the media item in milliseconds.
|
abstract CharSequence |
getMediaSubtitle()
Returns the subtitle of the media item.
|
abstract CharSequence |
getMediaTitle()
Returns the title of the media item.
|
OnItemViewClickedListener |
getOnItemViewClickedListener()
Returns the
OnItemViewClickedListener . |
int[] |
getRewindSpeeds()
Returns the rewind speeds.
|
abstract long |
getSupportedActions()
Returns a bitmask of actions supported by the media player.
|
int |
getUpdatePeriod()
Returns the time period in milliseconds that should be used
to update the progress.
|
abstract boolean |
hasValidMedia()
Returns true if there is a valid media item.
|
boolean |
isFadingEnabled()
Returns true if controls are set to fade when media is playing.
|
abstract boolean |
isMediaPlaying()
Returns true if media is currently playing.
|
void |
onActionClicked(Action action)
Handles action clicks.
|
boolean |
onKey(View v,
int keyCode,
KeyEvent event)
Handles key events and returns true if handled.
|
protected void |
onMetadataChanged()
Must be called appropriately by a subclass when the metadata state has changed.
|
protected abstract void |
onRowChanged(PlaybackControlsRow row)
Invoked when the playback controls row has changed.
|
protected void |
onStateChanged()
Must be called appropriately by a subclass when the playback state has changed.
|
protected abstract void |
pausePlayback()
Pause playback.
|
void |
setControlsRow(PlaybackControlsRow controlsRow)
Sets the controls row to be managed by the glue layer.
|
void |
setFadingEnabled(boolean enable)
Sets the controls to fade after a timeout when media is playing.
|
void |
setOnItemViewClickedListener(OnItemViewClickedListener listener)
Deprecated.
Don't call this. Instead set the listener on the fragment yourself,
and call
onActionClicked(android.support.v17.leanback.widget.Action) to handle clicks. |
protected abstract void |
skipToNext()
Skip to the next track.
|
protected abstract void |
skipToPrevious()
Skip to the previous track.
|
protected abstract void |
startPlayback(int speed)
Start playback at the given speed.
|
void |
updateProgress()
Updates the progress bar based on the current media playback position.
|
public static final int ACTION_CUSTOM_LEFT_FIRST
public static final int ACTION_SKIP_TO_PREVIOUS
public static final int ACTION_REWIND
public static final int ACTION_PLAY_PAUSE
public static final int ACTION_FAST_FORWARD
public static final int ACTION_SKIP_TO_NEXT
public static final int ACTION_CUSTOM_RIGHT_FIRST
public static final int PLAYBACK_SPEED_INVALID
public static final int PLAYBACK_SPEED_PAUSED
public static final int PLAYBACK_SPEED_NORMAL
public static final int PLAYBACK_SPEED_FAST_L0
public static final int PLAYBACK_SPEED_FAST_L1
public static final int PLAYBACK_SPEED_FAST_L2
public static final int PLAYBACK_SPEED_FAST_L3
public static final int PLAYBACK_SPEED_FAST_L4
public PlaybackControlSupportGlue(Context context, int[] seekSpeeds)
context
- seekSpeeds
- Array of seek speeds for fast forward and rewind.public PlaybackControlSupportGlue(Context context, int[] fastForwardSpeeds, int[] rewindSpeeds)
context
- fastForwardSpeeds
- Array of seek speeds for fast forward.rewindSpeeds
- Array of seek speeds for rewind.public PlaybackControlSupportGlue(Context context, PlaybackOverlaySupportFragment fragment, int[] seekSpeeds)
context
- fragment
- Optional; if using a PlaybackOverlaySupportFragment
, pass it in.seekSpeeds
- Array of seek speeds for fast forward and rewind.public PlaybackControlSupportGlue(Context context, PlaybackOverlaySupportFragment fragment, int[] fastForwardSpeeds, int[] rewindSpeeds)
context
- fragment
- Optional; if using a PlaybackOverlaySupportFragment
, pass it in.fastForwardSpeeds
- Array of seek speeds for fast forward.rewindSpeeds
- Array of seek speeds for rewind.public PlaybackControlsRowPresenter createControlsRowAndPresenter()
PlaybackControlsRow
and corresponding
PlaybackControlsRowPresenter
.public PlaybackOverlaySupportFragment getFragment()
public Context getContext()
public int[] getFastForwardSpeeds()
public int[] getRewindSpeeds()
public void setFadingEnabled(boolean enable)
public boolean isFadingEnabled()
@Deprecated public void setOnItemViewClickedListener(OnItemViewClickedListener listener)
onActionClicked(android.support.v17.leanback.widget.Action)
to handle clicks.OnItemViewClickedListener
to be called if the click event
is not handled internally.listener
- public OnItemViewClickedListener getOnItemViewClickedListener()
OnItemViewClickedListener
.public void setControlsRow(PlaybackControlsRow controlsRow)
public PlaybackControlsRow getControlsRow()
public void enableProgressUpdating(boolean enable)
updateProgress()
at
an interval such as getUpdatePeriod()
.public int getUpdatePeriod()
updateProgress()
.public void updateProgress()
public void onActionClicked(Action action)
onActionClicked
in interface OnActionClickedListener
public boolean onKey(View v, int keyCode, KeyEvent event)
onKey
in interface View.OnKeyListener
v
- The view the key has been dispatched to.keyCode
- The code for the physical key that was pressedevent
- The KeyEvent object containing full information about
the event.public abstract boolean hasValidMedia()
public abstract boolean isMediaPlaying()
public abstract CharSequence getMediaTitle()
public abstract CharSequence getMediaSubtitle()
public abstract int getMediaDuration()
public abstract Drawable getMediaArt()
public abstract long getSupportedActions()
public abstract int getCurrentSpeedId()
PLAYBACK_SPEED_NORMAL
should be returned.public abstract int getCurrentPosition()
protected abstract void startPlayback(int speed)
speed
- The desired playback speed. For normal playback this will be
PLAYBACK_SPEED_NORMAL
; higher positive values for fast forward,
and negative values for rewind.protected abstract void pausePlayback()
protected abstract void skipToNext()
protected abstract void skipToPrevious()
protected abstract void onRowChanged(PlaybackControlsRow row)
protected SparseArrayObjectAdapter createPrimaryActionsAdapter(PresenterSelector presenterSelector)
protected void onStateChanged()
protected void onMetadataChanged()