AI-generated Key Takeaways
-
UIMediaController simplifies building playback control interfaces for Cast applications by connecting UI element states to the state of a remote CastSession.
-
When a View is bound to UIMediaController, the controller automatically updates the View's state based on the CastSession's state, remote playback state, and metadata.
-
UIMediaController registers listeners to handle user interactions on bound Views and performs corresponding Cast actions.
-
Developers can customize default actions by subclassing UIMediaController and overriding specific event-handling methods.
implements RemoteMediaClient.Listener SessionManagerListener<CastSession>
A
UIMediaController lets you bind the state of Android UI components to the state of
a remote CastSession.
This class simplifies writing a sender UI with playback controls. To use this class, create
an instance of this class, then call various bind methods to associate state of your Android
UI components to a remote playback control, or the change of the remote playback state or
metadata.
When a View is bound to the
UIMediaController, on the one hand,
UIMediaController will update its UI state according to the CastSession
state, the remote playback state or metadata. On the other hand, if the View is bound to a
remote playback command (such as "SkipNext" button),
UIMediaController will also register relevant listeners to the View so that when the
user interacts with the control, the controller will perform the corresponding action.
Take
bindViewToSkipNext(View, int) as an example. When a View is bound to the
UIMediaController,
UIMediaController will update the state of the View based on the
status of the CastSession,
such that it will only be enabled when the CastSession
is connected and there is a next item in the queue. A View.OnClickListener
will also be set on the View such that when the
View is
clicked, the event will be forwarded to
onSkipNextClicked(View), whose default behavior is to call
RemoteMediaClient.queueNext(JSONObject) on the RemoteMediaClient:
protected void onSkipNextClicked(View view) {
RemoteMediaClient remoteMediaClient = getRemoteMediaClient();
if ((remoteMediaClient != null) && remoteMediaClient.hasMediaSession()) {
remoteMediaClient.queueNext(null /* customData */);
}
}
public class CustomUIMediaController extends UIMediaController {
// Omitting other methods.
@Override
protected void onSkipNextClicked(View view) {
doSomeCustomAction();
super.onSkipNextClicked(view); // Optional
}
}
Public Constructor Summary
|
UIMediaController(Activity
activity)
Constructs an instance of
UIMediaController that will be used to bind UI elements of an
activity.
|
Public Method Summary
| void |
bindImageViewToImageOfCurrentItem(ImageView
view, int imageType, int placeHolderDrawableResId)
This method is deprecated. Use
bindImageViewToImageOfCurrentItem(ImageView, ImageHints, int)
instead
|
| void |
bindImageViewToImageOfCurrentItem(ImageView
view, int imageType, View
placeHolderView)
This method is deprecated. Use
bindImageViewToImageOfCurrentItem(ImageView, ImageHints, View)
instead
|
| void |
bindImageViewToImageOfCurrentItem(ImageView
view, ImageHints
imageHints, int placeHolderDrawableResId)
Binds an
ImageView
to the first image of the current item.
|
| void |
bindImageViewToImageOfCurrentItem(ImageView
view, ImageHints
imageHints, View
placeHolderView)
Binds an
ImageView
to an image of the current item.
|
| void |
bindImageViewToImageOfPreloadedItem(ImageView
view, int imageType, int placeHolderDrawableResId)
This method is deprecated. Use
bindImageViewToImageOfPreloadedItem(ImageView, ImageHints, int)
instead
|
| void |
bindImageViewToImageOfPreloadedItem(ImageView
view, ImageHints
imageHints, int placeHolderDrawableResId)
Binds an
ImageView
to the first image of the preloaded item.
|
| void |
bindImageViewToMuteToggle(ImageView
view)
Binds an
ImageView
to mute and unmute the Cast receiver device volume.
|
| void | |
| void | |
| void |
bindProgressBar(ProgressBar
view, long progressUpdateStepMs)
Binds a
ProgressBar
to the playback progress of the current item.
|
| void |
bindSeekBar(CastSeekBar
view)
Binds a
CastSeekBar to control the playback position of the current item.
|
| void |
bindSeekBar(SeekBar view,
long progressUpdateStepMs)
Binds a
SeekBar
to control the playback position of the current item.
|
| void |
bindSeekBar(CastSeekBar
view, long progressUpdateStepMs)
Binds a
CastSeekBar to control the playback position of the current item.
|
| void | |
| void |
bindTextViewToMetadataOfCurrentItem(TextView
view, String key)
Binds a
TextView
to the metadata of the current item, keyed by key.
|
| void |
bindTextViewToMetadataOfCurrentItem(TextView
view, List<String>
keysInPreference)
Binds a
TextView
to the metadata of the current item, keyed by a list of keys in the order of
preferences.
|
| void |
bindTextViewToMetadataOfPreloadedItem(TextView
view, List<String>
keysInPreference)
Binds an
TextView
to the metadata of the preloaded item, keyed by a list of keys in the order of
preferences.
|
| void |
bindTextViewToMetadataOfPreloadedItem(TextView
view, String key)
Binds an
TextView
to the metadata of the preloaded item, keyed by key.
|
| void |
bindTextViewToSmartSubtitle(TextView
textView)
Binds a
TextView
to the most appropriate item in MediaMetadata
for subtitle.
|
| void |
bindTextViewToStreamDuration(TextView
view, View
liveStreamIndicator)
Binds a
TextView
to the playback duration of the current item.
|
| void |
bindTextViewToStreamDuration(TextView
view)
Binds a
TextView
to the playback duration of the current item.
|
| void |
bindTextViewToStreamPosition(TextView
view, boolean updateWhileScrubbing)
Binds a
TextView
to the playback position of the current item.
|
| void |
bindTextViewToStreamPosition(TextView
view, boolean updateWhileScrubbing, long progressUpdateStepMs)
Binds a
TextView
to the playback position of the current item.
|
| void |
bindViewToClosedCaption(View view)
Binds a
View to
launching the
TracksChooserDialogFragment when clicked.
|
| void |
bindViewToForward(View view, long
skipStepMs)
Binds a
View to
skip forward playback of the current item skipStepMs milliseconds.
|
| void |
bindViewToLaunchExpandedController(View view)
Binds a
View to
launching the expanded controller Activity
specified by the name in
CastMediaOptions.getExpandedControllerActivityClassName().
|
| void |
bindViewToLoadingIndicator(View view)
Binds a
View's
visibility state to View.VISIBLE
only when the remote receiver is either buffering, or loading the next item.
|
| void |
bindViewToRewind(View view, long
skipStepMs)
Binds a
View to
rewind playback of the current item skipStepMs milliseconds.
|
| void |
bindViewToSkipNext(View view, int
invisibleState)
Binds a
View to
skip to the next item in the queue.
|
| void |
bindViewToSkipPrev(View view, int
invisibleState)
Binds a
View to
skip to the previous item in the queue.
|
| void | |
| void |
bindViewVisibilityToMediaSession(View view, int
invisibleState)
Binds a
View's
visibility state to the availability of a Cast media session.
|
| void |
bindViewVisibilityToPreloadingEvent(View view, int
invisibleState)
Binds a
View's
visibility state to the availability of a preloaded item.
|
| void |
dispose()
Disposes this instance.
|
| RemoteMediaClient |
getRemoteMediaClient()
Returns the managed
RemoteMediaClient of the current active CastSession.
|
| boolean |
isActive()
Returns true if there is an active connected Cast Session.
|
| void |
onAdBreakStatusUpdated()
Called when updated ad break status information is received.
|
| void |
onMetadataUpdated()
Called when updated media metadata is received.
|
| void |
onPreloadStatusUpdated()
Called when updated player queue preload status information is received, for
example, the next item to play has been preloaded.
|
| void |
onQueueStatusUpdated()
Called when updated player queue status information is received.
|
| void |
onSendingRemoteMediaRequest()
Called when there is an outgoing request to the receiver.
|
| void |
onSessionEnded(CastSession
session, int error)
|
| void |
onSessionEnding(CastSession
session)
|
| void |
onSessionResumeFailed(CastSession
session, int error)
|
| void |
onSessionResumed(CastSession
session, boolean wasSuspended)
|
| void | |
| void |
onSessionStartFailed(CastSession
session, int error)
|
| void | |
| void |
onSessionStarting(CastSession
session)
|
| void |
onSessionSuspended(CastSession
session, int reason)
|
| void |
onStatusUpdated()
Called when updated player status information is received.
|
| void |
setPostRemoteMediaClientListener(RemoteMediaClient.Listener
listener)
Sets a
RemoteMediaClient.Listener that will be called after all the other
registered listeners in the
UIMediaController instance are invoked.
|
Protected Method Summary
| void |
onClosedCaptionClicked(View view)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToClosedCaption(View).
|
| void |
onForwardClicked(View view, long
skipStepMs)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToForward(View, long).
|
| void |
onLaunchExpandedControllerClicked(View view)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToLaunchExpandedController(View).
|
| void |
onMuteToggleClicked(ImageView
view)
The callback that is invoked when the user clicks on an
ImageView
bound to this
UIMediaController through
bindImageViewToMuteToggle(ImageView).
|
| void |
onPlayPauseToggleClicked(ImageView
view)
The callback that is invoked when the user clicks on an
ImageView
bound to this
UIMediaController through
bindImageViewToPlayPauseToggle(ImageView, Drawable, Drawable, Drawable, View,
boolean).
|
| void |
onRewindClicked(View view, long
skipStepMs)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToRewind(View, long).
|
| void |
onSeekBarProgressChanged(SeekBar
seekBar, int progress, boolean fromUser)
The callback that is invoked on progress change of a
SeekBar
bound to this
UIMediaController through
bindSeekBar(SeekBar).
|
| void |
onSeekBarStartTrackingTouch(SeekBar
seekBar)
The callback that is invoked when the user starts a touch gesture on a
SeekBar
bound to this
UIMediaController through
bindSeekBar(SeekBar).
|
| void |
onSeekBarStopTrackingTouch(SeekBar
seekBar)
The callback that is invoked when the user finished a touch gesture on a
SeekBar
bound to this
UIMediaController through
bindSeekBar(SeekBar).
|
| void |
onSkipNextClicked(View view)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToSkipNext(View, int).
|
| void |
onSkipPrevClicked(View view)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToSkipPrev(View, int).
|
Inherited Method Summary
Public Constructors
public UIMediaController (Activity activity)
Constructs an instance of
UIMediaController that will be used to bind UI elements of an
activity.
Public Methods
public void bindImageViewToImageOfCurrentItem (ImageView view, int imageType, int placeHolderDrawableResId)
This method is deprecated.
Use
bindImageViewToImageOfCurrentItem(ImageView, ImageHints, int) instead
Binds an ImageView
to the first image of the current item. If the current item doesn't contain any image
or the framework fails to fetch the Bitmap for the image, imagePlaceHolder
will be used instead.
Parameters
| view | the View to
bind |
|---|---|
| imageType | the type of image, used by the ImagePicker
to choose the proper image |
| placeHolderDrawableResId | the resource ID of a Drawable
used as a placeholder if no image is available from the current item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindImageViewToImageOfCurrentItem (ImageView view, int imageType, View placeHolderView)
This method is deprecated.
Use
bindImageViewToImageOfCurrentItem(ImageView, ImageHints, View) instead
Binds an ImageView
to an image of the current item. When an item is loaded, and there is a WebImage
that is suitable to be displayed, the Bitmap of
that image will be fetched and set on the ImageView.
If the item contains multiple images, this class will choose one using the
ImagePicker
configured in CastMediaOptions,
with the given imageType.
Parameters
| view | the ImageView |
|---|---|
| imageType | type of image, used by the ImagePicker
to choose the proper image |
| placeHolderView | the View to show
as a placeholder if no image is available from the current item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindImageViewToImageOfCurrentItem (ImageView view, ImageHints imageHints, int placeHolderDrawableResId)
Binds an ImageView
to the first image of the current item. If the current item doesn't contain any image
or the framework fails to fetch the Bitmap for the image, imagePlaceHolder
will be used instead.
Parameters
| view | the View to
bind |
|---|---|
| imageHints | ImageHints
used by the ImagePicker
to choose the proper image |
| placeHolderDrawableResId | the resource ID of a Drawable
used as a placeholder if no image is available from the current item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindImageViewToImageOfCurrentItem (ImageView view, ImageHints imageHints, View placeHolderView)
Binds an ImageView
to an image of the current item. When an item is loaded, and there is a WebImage
that is suitable to be displayed, the Bitmap of
that image will be fetched and set on the ImageView.
If the item contains multiple images, this class will choose one using the
ImagePicker
configured in CastMediaOptions,
with the given imageType.
Parameters
| view | the ImageView |
|---|---|
| imageHints | ImageHints
used by the ImagePicker
to choose the proper image |
| placeHolderView | the View to show
as a placeholder if no image is available from the current item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindImageViewToImageOfPreloadedItem (ImageView view, int imageType, int placeHolderDrawableResId)
This method is deprecated.
Use
bindImageViewToImageOfPreloadedItem(ImageView, ImageHints, int) instead
Binds an ImageView
to the first image of the preloaded item. If the current item doesn't contain any image
or the framework fails to fetch the Bitmap for the image, imagePlaceHolder
will be used instead.
Parameters
| view | the View to
bind |
|---|---|
| imageType | type of image, used by the ImagePicker
to choose the proper image |
| placeHolderDrawableResId | the resource ID of a Drawable
used as a placeholder if no image is available from the preloaded item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindImageViewToImageOfPreloadedItem (ImageView view, ImageHints imageHints, int placeHolderDrawableResId)
Binds an ImageView
to the first image of the preloaded item. If the current item doesn't contain any image
or the framework fails to fetch the Bitmap for the image, imagePlaceHolder
will be used instead.
Parameters
| view | the View to
bind |
|---|---|
| imageHints | ImageHints
used by the ImagePicker
to choose the proper image |
| placeHolderDrawableResId | the resource ID of a Drawable
used as a placeholder if no image is available from the preloaded item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindImageViewToMuteToggle (ImageView view)
Binds an ImageView
to mute and unmute the Cast receiver device volume.
The ImageView
will be updated based on the CastSession
connection state and muted state. A View.OnClickListener
will also be set to the ImageView
so that when it is clicked, the listener will call
onMuteToggleClicked(ImageView) to handle the click event. Do not call
View.setOnClickListener(View.OnClickListener) on the ImageView.
To override the behavior, create a subclass of
UIMediaController and override the
onMuteToggleClicked(ImageView) method.
Parameters
| view | the ImageView
to bind |
|---|
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindImageViewToPlayPauseToggle (ImageView view, Drawable playDrawable, Drawable pauseDrawable, Drawable stopDrawable, View loadingIndicator, boolean hideViewWhenLoading)
Binds an ImageView
to toggle play / pause of the current item.
The ImageView
will be updated based on the CastSession
state and remote playback state. A View.OnClickListener
will also be set to the ImageView
so that when it is clicked, the listener will call
onPlayPauseToggleClicked(ImageView) to handle the click event. Do not call
View.setOnClickListener(View.OnClickListener) on the ImageView.
To override the behavior, create a subclass of
UIMediaController and override the
onPlayPauseToggleClicked(ImageView) method.
Parameters
| view | the ImageView
to bind |
|---|---|
| playDrawable | the Drawable
to use when the state of the control is "play" |
| pauseDrawable | the Drawable
to use when the state of the control is "pause" |
| stopDrawable | the Drawable
to use when the state of the control is "stop live stream"; if set to
null, the framework will display the pauseDrawable when a
"stop live stream" icon is needed |
| loadingIndicator | a View that
should be displayed to indicate that a remote request is ongoing |
| hideViewWhenLoading | true if visibility of imageView should be set to
View.INVISIBLE
when loading an item, false if it should be set to View.VISIBLE
when loading an item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindProgressBar (ProgressBar view)
Binds a ProgressBar
to the playback progress of the current item. Progress will be updated once per second.
If no item is loaded the progress of the ProgressBar
will be set to zero.
Parameters
| view | the ProgressBar
to bind |
|---|
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindProgressBar (ProgressBar view, long progressUpdateStepMs)
Binds a ProgressBar
to the playback progress of the current item. Progress will be updated once per
progressUpdateStepMs milliseconds. If no item is loaded the progress of
the ProgressBar
will be set to zero.
Parameters
| view | the ProgressBar
to bind |
|---|---|
| progressUpdateStepMs | the interval between each update of the progress, in milliseconds |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindSeekBar (CastSeekBar view)
Binds a
CastSeekBar to control the playback position of the current item.
The
CastSeekBar will be updated based on the CastSession
state and remote playback progress. Progress will be updated once per second. If no
item is loaded, the progress of the
CastSeekBar will be set to zero and the
CastSeekBar will be disabled.
The
CastSeekBar will be able to handle live content. When playing live streams,
the seek bar will draw the seekable range properly, and seek is only allowed within the
seekable range.
Parameters
| view | the
CastSeekBar to bind |
|---|
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindSeekBar (SeekBar view, long progressUpdateStepMs)
Binds a SeekBar to
control the playback position of the current item.
The SeekBar will
be updated based on the CastSession
state and remote playback progress. Progress will be updated once per
progressUpdateStepMs milliseconds. If no item is loaded, the progress of
the SeekBar will
be set to zero and the SeekBar will
be disabled. A
SeekBar.OnSeekBarChangeListener will also be set to the SeekBar so
that when the user interacts with the SeekBar, it
will forward the listener events to this
UIMediaController to handle the event.
SeekBar.OnSeekBarChangeListener.onStopTrackingTouch(SeekBar) will be
forwarded to
onSeekBarStopTrackingTouch(SeekBar).
SeekBar.OnSeekBarChangeListener.onStartTrackingTouch(SeekBar) will be
forwarded to
onSeekBarStartTrackingTouch(SeekBar).
SeekBar.OnSeekBarChangeListener.onProgressChanged(SeekBar, int, boolean)
will be forwarded to
onSeekBarProgressChanged(SeekBar, int, boolean). Do not call
SeekBar.setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener) on the
SeekBar. To
override the behavior, create a subclass of
UIMediaController and override the
onSeekBarProgressChanged(SeekBar, int, boolean),
onSeekBarStartTrackingTouch(SeekBar) and
onSeekBarStopTrackingTouch(SeekBar) methods.
The SeekBar's
behavior will be undefined for live content. It should not be used in this case.
If the client wants to set the thumb on the SeekBar via
AbsSeekBar.setThumb(Drawable), it need to call the method before binding the
SeekBar.
After binding, the method should not be called.
Parameters
| view | the SeekBar
to bind |
|---|---|
| progressUpdateStepMs | the interval between each update of the progress, in milliseconds |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindSeekBar (CastSeekBar view, long progressUpdateStepMs)
Binds a
CastSeekBar to control the playback position of the current item.
The
CastSeekBar will be updated based on the CastSession
state and remote playback progress. Progress will be updated once per second. If no
item is loaded, the progress of the
CastSeekBar will be set to zero and the
CastSeekBar will be disabled.
The
CastSeekBar will be able to handle live content. The ad breaks and seekable
range will be drawn properly, and seek is only allowed in the seekable range.
Parameters
| view | the
CastSeekBar to bind |
|---|---|
| progressUpdateStepMs | the interval between each update of the progress, in milliseconds |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindSeekBar (SeekBar view)
Binds a SeekBar to
control the playback position of the current item.
The SeekBar will
be updated based on the CastSession
state and remote playback progress. Progress will be updated once per second. If no
item is loaded, the progress of the SeekBar will
be set to zero and the SeekBar will
be disabled. A
SeekBar.OnSeekBarChangeListener will also be set to the SeekBar so
that when the user interacts with the SeekBar, it
will forward the listener events to this
UIMediaController to handle the event.
SeekBar.OnSeekBarChangeListener.onStopTrackingTouch(SeekBar) will be
forwarded to
onSeekBarStopTrackingTouch(SeekBar).
SeekBar.OnSeekBarChangeListener.onStartTrackingTouch(SeekBar) will be
forwarded to
onSeekBarStartTrackingTouch(SeekBar).
SeekBar.OnSeekBarChangeListener.onProgressChanged(SeekBar, int, boolean)
will be forwarded to
onSeekBarProgressChanged(SeekBar, int, boolean). Do not call
SeekBar.setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener) on the
SeekBar. To
override the behavior, create a subclass of
UIMediaController and override the
onSeekBarProgressChanged(SeekBar, int, boolean),
onSeekBarStartTrackingTouch(SeekBar) and
onSeekBarStopTrackingTouch(SeekBar) methods.
The SeekBar's
behavior will be undefined for live content. It should not be used in this case.
If the client wants to set the thumb on the SeekBar via
AbsSeekBar.setThumb(Drawable), it need to call the method before binding the
SeekBar.
After binding, the method should not be called.
Parameters
| view | the SeekBar
to bind |
|---|
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToMetadataOfCurrentItem (TextView view, String key)
Binds a TextView to
the metadata of the current item, keyed by key. If metadata for
key is unavailable, the TextView will be left untouched.
Parameters
| view | the View to
bind |
|---|---|
| key | the key of the metadata field to bind |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToMetadataOfCurrentItem (TextView view, List<String> keysInPreference)
Binds a TextView to
the metadata of the current item, keyed by a list of keys in the order of
preferences.
Parameters
| view | the View to
bind |
|---|---|
| keysInPreference | the list of keys in the order of preference |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToMetadataOfPreloadedItem (TextView view, List<String> keysInPreference)
Binds an TextView to
the metadata of the preloaded item, keyed by a list of keys in the order of
preferences.
Parameters
| view | the View to
bind |
|---|---|
| keysInPreference | the list of keys in the order of preference |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToMetadataOfPreloadedItem (TextView view, String key)
Binds an TextView to
the metadata of the preloaded item, keyed by key. If metadata for
key is unavailable, the TextView will be left untouched.
Parameters
| view | the View to
bind |
|---|---|
| key | the key of the metadata field to bind |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToSmartSubtitle (TextView textView)
Binds a TextView to
the most appropriate item in MediaMetadata
for subtitle. For example the studio name for a movie or the artist name for a music
track.
public void bindTextViewToStreamDuration (TextView view, View liveStreamIndicator)
Binds a TextView to
the playback duration of the current item. If no item is loaded, or if the currently
playing item is a live stream, then the text will be set to "--:--".
When playing a live stream item, if liveStreamIndicator is not
null, then view will be hidden and
liveStreamIndicator will be shown to better indicate that a live stream is
playing.
Parameters
| view | the TextView
to bind |
|---|---|
| liveStreamIndicator | if View to
indicate that a live stream items is playing |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToStreamDuration (TextView view)
Binds a TextView to
the playback duration of the current item. If no item is loaded, or if the currently
playing item is a live stream, then the text will be set to "--:--".
Parameters
| view | the TextView
to bind |
|---|
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToStreamPosition (TextView view, boolean updateWhileScrubbing)
Binds a TextView to
the playback position of the current item. Position will be updated once per second. If
no item is loaded the text will be set to "--:--".
Parameters
| view | the TextView
to bind |
|---|---|
| updateWhileScrubbing | if this is set to true, the View will be
put in the update-when-scrubbing set and will be updated to the position of a bound
SeekBar
or
CastSeekBar while it is being scrubbed |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindTextViewToStreamPosition (TextView view, boolean updateWhileScrubbing, long progressUpdateStepMs)
Binds a TextView to
the playback position of the current item. Position will be updated once per
progressUpdateStepMs milliseconds. If no item is loaded the text will be
set to "--:--".
Parameters
| view | the TextView
to bind |
|---|---|
| updateWhileScrubbing | if this is set to true, the View will be
put in the update-when-scrubbing set and will be updated to the position of a bound
SeekBar
or
CastSeekBar while it is being scrubbed |
| progressUpdateStepMs | the interval between each update of the progress, in milliseconds |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToClosedCaption (View view)
Binds a View to launching
the
TracksChooserDialogFragment when clicked.
The view will be updated based on the CastSession
state and the availability of audio and text tracks. A View.OnClickListener
will also be set to the view so that when the view is clicked, it will call
onClosedCaptionClicked(View) to handle the click event. Do not call
View.setOnClickListener(View.OnClickListener) on the view. To override the
behavior, create a subclass of
UIMediaController and override the
onClosedCaptionClicked(View) method.
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToForward (View view, long skipStepMs)
Binds a View to skip
forward playback of the current item skipStepMs milliseconds.
The View will be
updated based on the CastSession
state, the remote playback progress and whether it is livestream. A View.OnClickListener
will also be set to the View so that when
it is clicked, the listener will call
onForwardClicked(View, long) to handle the click event. Do not call
View.setOnClickListener(View.OnClickListener) on the View. To override
the behavior, create a subclass of
UIMediaController and override the
onForwardClicked(View, long) method.
Parameters
| view | the View to
bind |
|---|---|
| skipStepMs | the time (in milliseconds) to skip forward |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToLaunchExpandedController (View view)
Binds a View to launching
the expanded controller Activity
specified by the name in
CastMediaOptions.getExpandedControllerActivityClassName(). If the specified
class name is null, then clicking the button is a no-op.
The View will be
updated based on the CastSession
state. A View.OnClickListener
will also be set to the View so that when
it is clicked, the listener will call
onLaunchExpandedControllerClicked(View) to handle the click event. Do not
call
View.setOnClickListener(View.OnClickListener) on the View. To override
the behavior, create a subclass of
UIMediaController and override the
onLaunchExpandedControllerClicked(View) method.
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToLoadingIndicator (View view)
Binds a View's visibility
state to View.VISIBLE
only when the remote receiver is either buffering, or loading the next item. Otherwise
visibility of the View will be set
to View.GONE.
Parameters
| view | the View to
bind |
|---|
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToRewind (View view, long skipStepMs)
Binds a View to rewind
playback of the current item skipStepMs milliseconds.
The View will be
updated based on the CastSession
state, the remote playback state and whether it is livestream. A View.OnClickListener
will also be set to the View so that when
it is clicked, the listener will call
onRewindClicked(View, long) to handle the click event. Do not call
View.setOnClickListener(View.OnClickListener) on the View. To override
the behavior, create a subclass of
UIMediaController and override the
onRewindClicked(View, long) method.
Parameters
| view | the View to
bind |
|---|---|
| skipStepMs | the time (in milliseconds) to rewind |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToSkipNext (View view, int invisibleState)
Binds a View to skip to
the next item in the queue.
The View will be
updated based on the CastSession
state, the remote playback state and the availability of the next queue item. A
View.OnClickListener
will also be set to the View so that when
it is clicked, the listener will call
onSkipNextClicked(View) to handle the click event. Do not call
View.setOnClickListener(View.OnClickListener) on the View. To override
the behavior, create a subclass of
UIMediaController and override the
onSkipNextClicked(View) method.
Parameters
| view | the View to
bind |
|---|---|
| invisibleState | either View.INVISIBLE
or View.GONE;
this parameter will be set as the visibility of View when
there isn't a previous item in the queue |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToSkipPrev (View view, int invisibleState)
Binds a View to skip to
the previous item in the queue.
The View will be
updated based on the CastSession
state, the remote playabck state and the availability of the previous queue item. A
View.OnClickListener
will also be set to the View so that when
it is clicked, the listener will call
onSkipPrevClicked(View) to handle the click event. Do not call
View.setOnClickListener(View.OnClickListener) on the View. To override
the behavior, create a subclass of
UIMediaController and override the
onSkipPrevClicked(View) method.
Parameters
| view | the View to
bind |
|---|---|
| invisibleState | either View.INVISIBLE
or View.GONE;
this parameter will be set as the visibility of View when
there isn't a previous item in the queue |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewToUIController (View view, UIController uiController)
Binds a View to a
UIController. This method is typically used when the
uiController is used to implement a custom control button.
Parameters
| view | the View to
bind |
|---|---|
| uiController | the
UIController of the view |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewVisibilityToMediaSession (View view, int invisibleState)
Binds a View's visibility
state to the availability of a Cast media session. View will be set to
View.VISIBLE
when there is a media session, and will be set to invisibleState when
there isn't a media session.
Parameters
| view | the View to
bind |
|---|---|
| invisibleState | either View.INVISIBLE
or View.GONE,
which will be set as the visibility of view when there isn't a media
session |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void bindViewVisibilityToPreloadingEvent (View view, int invisibleState)
Binds a View's visibility
state to the availability of a preloaded item. View will be set to
View.VISIBLE
when there is a preloaded item, and will be set to invisibleState when
there isn't a preloaded item.
Parameters
| view | the View to
bind |
|---|---|
| invisibleState | either View.INVISIBLE
or View.GONE,
which will be set as the visibility of view when there isn't a
preloaded item |
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void dispose ()
Disposes this instance. The
UIMediaController can not be reused after this method is called.
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public RemoteMediaClient getRemoteMediaClient ()
Returns the managed
RemoteMediaClient of the current active CastSession.
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public boolean isActive ()
Returns true if there is an active connected Cast Session.
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
public void onAdBreakStatusUpdated ()
Called when updated ad break status information is received.
public void onMetadataUpdated ()
Called when updated media metadata is received.
public void onPreloadStatusUpdated ()
Called when updated player queue preload status information is received, for example, the next item to play has been preloaded. This gives the caller a chance to respond to preloading related event, such as displaying what will be played next in the UI.
public void onQueueStatusUpdated ()
Called when updated player queue status information is received.
public void onSendingRemoteMediaRequest ()
Called when there is an outgoing request to the receiver. This gives the caller a chance to update state of the UI of the sender app, for example, disable some controls.
public void onSessionEnded (CastSession session, int error)
public void onSessionEnding (CastSession session)
public void onSessionResumeFailed (CastSession session, int error)
public void onSessionResumed (CastSession session, boolean wasSuspended)
public void onSessionResuming (CastSession session, String sessionId)
public void onSessionStartFailed (CastSession session, int error)
public void onSessionStarted (CastSession session, String sessionId)
public void onSessionStarting (CastSession session)
public void onSessionSuspended (CastSession session, int reason)
public void onStatusUpdated ()
Called when updated player status information is received.
public void setPostRemoteMediaClientListener (RemoteMediaClient.Listener listener)
Sets a
RemoteMediaClient.Listener that will be called after all the other
registered listeners in the
UIMediaController instance are invoked. Also, the states of all the bound
View instances
are guaranteed to be updated before this listener is invoked.
This listener is useful if you want to modify the state of the bound View
instances.
Throws
| IllegalStateException | if this method is not called on the main thread |
|---|
Protected Methods
protected void onClosedCaptionClicked (View view)
The callback that is invoked when the user clicks on an View bound to
this
UIMediaController through
bindViewToClosedCaption(View).
The default behavior is to launch the
TracksChooserDialogFragment if the Activity used
to construct this
UIMediaController is a FragmentActivity
and the remote media is loaded.
Parameters
| view | the View that the
user clicked |
|---|
protected void onForwardClicked (View view, long skipStepMs)
The callback that is invoked when the user clicks on an View bound to
this
UIMediaController through
bindViewToForward(View, long).
The default behavior is to call the
RemoteMediaClient.seek(MediaSeekOptions) method of
getRemoteMediaClient() if the remote media is loaded, with the position of
getRemoteMediaClient().getApproximateStreamPosition() + skipStepMs.
protected void onLaunchExpandedControllerClicked (View view)
The callback that is invoked when the user clicks on an View bound to
this
UIMediaController through
bindViewToLaunchExpandedController(View).
The default behavior is to launch the expanded controller Activity
specified by the name in
CastMediaOptions.getExpandedControllerActivityClassName() of CastMediaOptions.
Parameters
| view | the View that the
user clicked |
|---|
protected void onMuteToggleClicked (ImageView view)
The callback that is invoked when the user clicks on an ImageView
bound to this
UIMediaController through
bindImageViewToMuteToggle(ImageView).
The default behavior is to toggle the muted state of the CastSession
if there is one and it is connected.
Parameters
| view | the ImageView
that the user clicked |
|---|
protected void onPlayPauseToggleClicked (ImageView view)
The callback that is invoked when the user clicks on an ImageView
bound to this
UIMediaController through
bindImageViewToPlayPauseToggle(ImageView, Drawable, Drawable, Drawable, View,
boolean).
The default behavior is to call the
RemoteMediaClient.togglePlayback() method of
getRemoteMediaClient() if the remote media is loaded.
Parameters
| view | the ImageView
that the user clicked |
|---|
protected void onRewindClicked (View view, long skipStepMs)
The callback that is invoked when the user clicks on an View bound to
this
UIMediaController through
bindViewToRewind(View, long).
The default behavior is to call the
RemoteMediaClient.seek(MediaSeekOptions) method of
getRemoteMediaClient() if the remote media is loaded, with the position of
getRemoteMediaClient().getApproximateStreamPosition() - skipStepMs.
protected void onSeekBarProgressChanged (SeekBar seekBar, int progress, boolean fromUser)
The callback that is invoked on progress change of a SeekBar
bound to this
UIMediaController through
bindSeekBar(SeekBar).
The default behavior is: if the progress change comes from a user action, use
progress to update the progress of all views in the update-when-scrubbing
set.
Parameters
| seekBar | the SeekBar
that the user is scrubbing |
|---|---|
| progress | the current progress level |
| fromUser | true if the progress change was initiated by the user |
protected void onSeekBarStartTrackingTouch (SeekBar seekBar)
The callback that is invoked when the user starts a touch gesture on a
SeekBar
bound to this
UIMediaController through
bindSeekBar(SeekBar).
The default behavior is to detach the seekBar and all the views in the
update-when-scrubbing set from the CastSession
to stop receiving furthur playback progress updates.
Parameters
| seekBar | the SeekBar
that the user is scrubbing |
|---|
protected void onSeekBarStopTrackingTouch (SeekBar seekBar)
The callback that is invoked when the user finished a touch gesture on a
SeekBar
bound to this
UIMediaController through
bindSeekBar(SeekBar).
The default behavior is to reattach the seekBar and all the views in
the update-when-scrubbing set to the CastSession
to receive furthur playback progress updates. Then the method will call
RemoteMediaClient.seek(MediaSeekOptions) method of
getRemoteMediaClient() if the remote media is loaded.
Parameters
| seekBar | the SeekBar
that the user is scrubbing |
|---|
protected void onSkipNextClicked (View view)
The callback that is invoked when the user clicks on an View bound to
this
UIMediaController through
bindViewToSkipNext(View, int).
The default behavior is to call the
RemoteMediaClient.queueNext(JSONObject) method of
getRemoteMediaClient() if the remote media is loaded, with
customData of null.
Parameters
| view | the View that the
user clicked |
|---|
protected void onSkipPrevClicked (View view)
The callback that is invoked when the user clicks on an View bound to
this
UIMediaController through
bindViewToSkipPrev(View, int).
The default behavior is to call the
RemoteMediaClient.queuePrev(JSONObject) method of
getRemoteMediaClient() if the remote media is loaded, with
customData of null.
Parameters
| view | the View that the
user clicked |
|---|