implements RemoteMediaClient.ListenerSessionManagerListener<CastSession>
A
UIMediaController
lets you bind the state of Android UI components to the state of
a remoteCastSession
.
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 aView
is bound to the
UIMediaController
,on the one hand,
UIMediaController
will update its UI state according to theCastSession
state, the remote playback state or metadata. On the other hand, if theView
is bound to a
remote playback command (such as "SkipNext" button),
UIMediaController
will also register relevant listeners to theView
so that when the
user interacts with the control, the controller will perform the corresponding action.
Take
bindViewToSkipNext(View, int)
as an example. When aView
is bound to the
UIMediaController
,
UIMediaController
will update the state of theView
based on the
status of theCastSession
,
such that it will only be enabled when theCastSession
is connected and there is a next item in the queue. AView.OnClickListener
will also be set on theView
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 theRemoteMediaClient
:
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(SeekBarview,
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,Stringkey)
Binds a
TextView
to the metadata of the current item, keyed bykey .
|
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,Stringkey)
Binds an
TextView
to the metadata of the preloaded item, keyed bykey .
|
void |
bindTextViewToSmartSubtitle(TextView
textView)
Binds a
TextView
to the most appropriate item inMediaMetadata
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(Viewview)
Binds a
View to
launching the
TracksChooserDialogFragment when clicked.
|
void |
bindViewToForward(Viewview, long
skipStepMs)
Binds a
View to
skip forward playback of the current itemskipStepMs milliseconds.
|
void |
bindViewToLaunchExpandedController(Viewview)
Binds a
View to
launching the expanded controllerActivity
specified by the name in
CastMediaOptions.getExpandedControllerActivityClassName() .
|
void |
bindViewToLoadingIndicator(Viewview)
Binds a
View 's
visibility state toView.VISIBLE
only when the remote receiver is either buffering, or loading the next item.
|
void |
bindViewToRewind(Viewview, long
skipStepMs)
Binds a
View to
rewind playback of the current itemskipStepMs milliseconds.
|
void | |
void |
bindViewToSkipPrev(Viewview, int
invisibleState)
Binds a
View to
skip to the previous item in the queue.
|
void | |
void |
bindViewVisibilityToMediaSession(Viewview, int
invisibleState)
Binds a
View 's
visibility state to the availability of a Cast media session.
|
void |
bindViewVisibilityToPreloadingEvent(Viewview, 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 activeCastSession .
|
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(Viewview)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToClosedCaption(View) .
|
void |
onForwardClicked(Viewview, long
skipStepMs)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToForward(View, long) .
|
void |
onLaunchExpandedControllerClicked(Viewview)
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(Viewview, 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(Viewview)
The callback that is invoked when the user clicks on an
View
bound to this
UIMediaController through
bindViewToSkipNext(View, int) .
|
void |
onSkipPrevClicked(Viewview)
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
publicUIMediaController(Activity activity)
Constructs an instance of
UIMediaController
that will be used to bind UI elements of an
activity
.
Public Methods
public voidbindImageViewToImageOfCurrentItem(ImageViewview, int imageType, int placeHolderDrawableResId)
This method is deprecated.
Use
bindImageViewToImageOfCurrentItem(ImageView, ImageHints, int)
instead
Binds anImageView
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 | theView to
bind |
---|---|
imageType | the type of image, used by theImagePicker
to choose the proper image |
placeHolderDrawableResId | the resource ID of aDrawable
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 voidbindImageViewToImageOfCurrentItem(ImageViewview, int imageType,View placeHolderView)
This method is deprecated.
Use
bindImageViewToImageOfCurrentItem(ImageView, ImageHints, View)
instead
Binds anImageView
to an image of the current item. When an item is loaded, and there is aWebImage
that is suitable to be displayed, theBitmap
of
that image will be fetched and set on theImageView
.
If the item contains multiple images, this class will choose one using the
ImagePicker
configured inCastMediaOptions
,
with the givenimageType
.
Parameters
view | theImageView |
---|---|
imageType | type of image, used by theImagePicker
to choose the proper image |
placeHolderView | theView 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 voidbindImageViewToImageOfCurrentItem(ImageViewview, ImageHints imageHints, int placeHolderDrawableResId)
Binds anImageView
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 | theView to
bind |
---|---|
imageHints | ImageHints
used by theImagePicker
to choose the proper image |
placeHolderDrawableResId | the resource ID of aDrawable
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 voidbindImageViewToImageOfCurrentItem(ImageViewview, ImageHints imageHints,View placeHolderView)
Binds anImageView
to an image of the current item. When an item is loaded, and there is aWebImage
that is suitable to be displayed, theBitmap
of
that image will be fetched and set on theImageView
.
If the item contains multiple images, this class will choose one using the
ImagePicker
configured inCastMediaOptions
,
with the givenimageType
.
Parameters
view | theImageView |
---|---|
imageHints | ImageHints
used by theImagePicker
to choose the proper image |
placeHolderView | theView 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 voidbindImageViewToImageOfPreloadedItem(ImageViewview, int imageType, int placeHolderDrawableResId)
This method is deprecated.
Use
bindImageViewToImageOfPreloadedItem(ImageView, ImageHints, int)
instead
Binds anImageView
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 | theView to
bind |
---|---|
imageType | type of image, used by theImagePicker
to choose the proper image |
placeHolderDrawableResId | the resource ID of aDrawable
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 voidbindImageViewToImageOfPreloadedItem(ImageViewview, ImageHints imageHints, int placeHolderDrawableResId)
Binds anImageView
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 | theView to
bind |
---|---|
imageHints | ImageHints
used by theImagePicker
to choose the proper image |
placeHolderDrawableResId | the resource ID of aDrawable
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 voidbindImageViewToMuteToggle(ImageView view)
Binds anImageView
to mute and unmute the Cast receiver device volume.
TheImageView
will be updated based on theCastSession
connection state and muted state. AView.OnClickListener
will also be set to theImageView
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 theImageView
.
To override the behavior, create a subclass of
UIMediaController
and override the
onMuteToggleClicked(ImageView)
method.
Parameters
view | theImageView
to bind |
---|
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindImageViewToPlayPauseToggle(ImageViewview, Drawable playDrawable,Drawable pauseDrawable,Drawable stopDrawable,View loadingIndicator, boolean hideViewWhenLoading)
Binds anImageView
to toggle play / pause of the current item.
TheImageView
will be updated based on theCastSession
state and remote playback state. AView.OnClickListener
will also be set to theImageView
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 theImageView
.
To override the behavior, create a subclass of
UIMediaController
and override the
onPlayPauseToggleClicked(ImageView)
method.
Parameters
view | theImageView
to bind |
---|---|
playDrawable | theDrawable
to use when the state of the control is "play" |
pauseDrawable | theDrawable
to use when the state of the control is "pause" |
stopDrawable | theDrawable
to use when the state of the control is "stop live stream"; if set to
null ,the framework will display thepauseDrawable when a
"stop live stream" icon is needed |
loadingIndicator | aView that
should be displayed to indicate that a remote request is ongoing |
hideViewWhenLoading | true if visibility ofimageView should be set to
View.INVISIBLE
when loading an item,false if it should be set toView.VISIBLE
when loading an item |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindProgressBar(ProgressBar view)
Binds aProgressBar
to the playback progress of the current item. Progress will be updated once per second.
If no item is loaded the progress of theProgressBar
will be set to zero.
Parameters
view | theProgressBar
to bind |
---|
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindProgressBar(ProgressBarview, long progressUpdateStepMs)
Binds aProgressBar
to the playback progress of the current item. Progress will be updated once per
progressUpdateStepMs
milliseconds. If no item is loaded the progress of
theProgressBar
will be set to zero.
Parameters
view | theProgressBar
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 voidbindSeekBar(CastSeekBar view)
Binds a
CastSeekBar
to control the playback position of the current item.
The
CastSeekBar
will be updated based on theCastSession
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 voidbindSeekBar(SeekBarview, long progressUpdateStepMs)
Binds aSeekBar
to
control the playback position of the current item.
TheSeekBar
will
be updated based on theCastSession
state and remote playback progress. Progress will be updated once per
progressUpdateStepMs
milliseconds. If no item is loaded, the progress of
theSeekBar
will
be set to zero and theSeekBar
will
be disabled. A
SeekBar.OnSeekBarChangeListener
will also be set to theSeekBar
so
that when the user interacts with theSeekBar
,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.
TheSeekBar
'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 theSeekBar
via
AbsSeekBar.setThumb(Drawable)
,it need to call the method before binding the
SeekBar
.
After binding, the method should not be called.
Parameters
view | theSeekBar
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 voidbindSeekBar(CastSeekBar view, long progressUpdateStepMs)
Binds a
CastSeekBar
to control the playback position of the current item.
The
CastSeekBar
will be updated based on theCastSession
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 voidbindSeekBar(SeekBar view)
Binds aSeekBar
to
control the playback position of the current item.
TheSeekBar
will
be updated based on theCastSession
state and remote playback progress. Progress will be updated once per second. If no
item is loaded, the progress of theSeekBar
will
be set to zero and theSeekBar
will
be disabled. A
SeekBar.OnSeekBarChangeListener
will also be set to theSeekBar
so
that when the user interacts with theSeekBar
,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.
TheSeekBar
'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 theSeekBar
via
AbsSeekBar.setThumb(Drawable)
,it need to call the method before binding the
SeekBar
.
After binding, the method should not be called.
Parameters
view | theSeekBar
to bind |
---|
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindTextViewToMetadataOfCurrentItem(TextViewview, String key)
Binds aTextView
to
the metadata of the current item, keyed bykey
.If metadata for
key
is unavailable, the TextView will be left untouched.
Parameters
view | theView to
bind |
---|---|
key | the key of the metadata field to bind |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindTextViewToMetadataOfCurrentItem(TextViewview, List<String> keysInPreference)
Binds aTextView
to
the metadata of the current item, keyed by a list of keys in the order of
preferences.
Parameters
view | theView 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 voidbindTextViewToMetadataOfPreloadedItem(TextViewview, List<String> keysInPreference)
Binds anTextView
to
the metadata of the preloaded item, keyed by a list of keys in the order of
preferences.
Parameters
view | theView 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 voidbindTextViewToMetadataOfPreloadedItem(TextViewview, String key)
Binds anTextView
to
the metadata of the preloaded item, keyed bykey
.If metadata for
key
is unavailable, the TextView will be left untouched.
Parameters
view | theView to
bind |
---|---|
key | the key of the metadata field to bind |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindTextViewToSmartSubtitle(TextView textView)
Binds aTextView
to
the most appropriate item inMediaMetadata
for subtitle. For example the studio name for a movie or the artist name for a music
track.
public voidbindTextViewToStreamDuration(TextView view,View liveStreamIndicator)
Binds aTextView
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, ifliveStreamIndicator
is not
null
,thenview
will be hidden and
liveStreamIndicator
will be shown to better indicate that a live stream is
playing.
Parameters
view | theTextView
to bind |
---|---|
liveStreamIndicator | ifView to
indicate that a live stream items is playing |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindTextViewToStreamDuration(TextView view)
Binds aTextView
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 | theTextView
to bind |
---|
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindTextViewToStreamPosition(TextView view, boolean updateWhileScrubbing)
Binds aTextView
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 | theTextView
to bind |
---|---|
updateWhileScrubbing | if this is set totrue ,theView 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 voidbindTextViewToStreamPosition(TextView view, boolean updateWhileScrubbing, long progressUpdateStepMs)
Binds aTextView
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 | theTextView
to bind |
---|---|
updateWhileScrubbing | if this is set totrue ,theView 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 voidbindViewToClosedCaption(Viewview)
Binds aView
to launching
the
TracksChooserDialogFragment
when clicked.
The view will be updated based on theCastSession
state and the availability of audio and text tracks. AView.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 voidbindViewToForward(Viewview, long skipStepMs)
Binds aView
to skip
forward playback of the current itemskipStepMs
milliseconds.
TheView
will be
updated based on theCastSession
state, the remote playback progress and whether it is livestream. AView.OnClickListener
will also be set to theView
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 theView
.To override
the behavior, create a subclass of
UIMediaController
and override the
onForwardClicked(View, long)
method.
Parameters
view | theView to
bind |
---|---|
skipStepMs | the time (in milliseconds) to skip forward |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindViewToLaunchExpandedController(View view)
Binds aView
to launching
the expanded controllerActivity
specified by the name in
CastMediaOptions.getExpandedControllerActivityClassName()
.If the specified
class name isnull
,then clicking the button is a no-op.
TheView
will be
updated based on theCastSession
state. AView.OnClickListener
will also be set to theView
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 theView
.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 voidbindViewToLoadingIndicator(Viewview)
Binds aView
's visibility
state toView.VISIBLE
only when the remote receiver is either buffering, or loading the next item. Otherwise
visibility of theView
will be set
toView.GONE
.
Parameters
view | theView to
bind |
---|
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindViewToRewind(Viewview, long skipStepMs)
Binds aView
to rewind
playback of the current itemskipStepMs
milliseconds.
TheView
will be
updated based on theCastSession
state, the remote playback state and whether it is livestream. AView.OnClickListener
will also be set to theView
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 theView
.To override
the behavior, create a subclass of
UIMediaController
and override the
onRewindClicked(View, long)
method.
Parameters
view | theView to
bind |
---|---|
skipStepMs | the time (in milliseconds) to rewind |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindViewToSkipNext(Viewview, int invisibleState)
Binds aView
to skip to
the next item in the queue.
TheView
will be
updated based on theCastSession
state, the remote playback state and the availability of the next queue item. A
View.OnClickListener
will also be set to theView
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 theView
.To override
the behavior, create a subclass of
UIMediaController
and override the
onSkipNextClicked(View)
method.
Parameters
view | theView to
bind |
---|---|
invisibleState | eitherView.INVISIBLE
orView.GONE ;
this parameter will be set as the visibility ofView when
there isn't a previous item in the queue |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindViewToSkipPrev(Viewview, int invisibleState)
Binds aView
to skip to
the previous item in the queue.
TheView
will be
updated based on theCastSession
state, the remote playabck state and the availability of the previous queue item. A
View.OnClickListener
will also be set to theView
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 theView
.To override
the behavior, create a subclass of
UIMediaController
and override the
onSkipPrevClicked(View)
method.
Parameters
view | theView to
bind |
---|---|
invisibleState | eitherView.INVISIBLE
orView.GONE ;
this parameter will be set as the visibility ofView when
there isn't a previous item in the queue |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindViewToUIController(Viewview, UIControlleruiController)
Binds aView
to a
UIController
.This method is typically used when the
uiController
is used to implement a custom control button.
Parameters
view | theView to
bind |
---|---|
uiController | the
UIController of theview |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindViewVisibilityToMediaSession(Viewview, int invisibleState)
Binds aView
'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 toinvisibleState
when
there isn't a media session.
Parameters
view | theView to
bind |
---|---|
invisibleState | eitherView.INVISIBLE
orView.GONE ,
which will be set as the visibility ofview when there isn't a media
session |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidbindViewVisibilityToPreloadingEvent(Viewview, int invisibleState)
Binds aView
'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 toinvisibleState
when
there isn't a preloaded item.
Parameters
view | theView to
bind |
---|---|
invisibleState | eitherView.INVISIBLE
orView.GONE ,
which will be set as the visibility ofview when there isn't a
preloaded item |
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voiddispose()
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 |
---|
publicRemoteMediaClient getRemoteMediaClient()
Returns the managed
RemoteMediaClient
of the current activeCastSession
.
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public booleanisActive()
Returns true if there is an active connected Cast Session.
Throws
IllegalStateException | if this method is not called on the main thread |
---|
public voidonAdBreakStatusUpdated()
Called when updated ad break status information is received.
public voidonMetadataUpdated()
Called when updated media metadata is received.
public voidonPreloadStatusUpdated()
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 voidonQueueStatusUpdated()
Called when updated player queue status information is received.
public voidonSendingRemoteMediaRequest()
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 voidonSessionEnded(CastSession session, int error)
public voidonSessionEnding(CastSession session)
public voidonSessionResumeFailed(CastSession session, int error)
public voidonSessionResumed(CastSession session, boolean wasSuspended)
public voidonSessionResuming(CastSession session,String sessionId)
public voidonSessionStartFailed(CastSession session, int error)
public voidonSessionStarted(CastSession session,String sessionId)
public voidonSessionStarting(CastSession session)
public voidonSessionSuspended(CastSession session, int reason)
public voidonStatusUpdated()
Called when updated player status information is received.
public voidsetPostRemoteMediaClientListener(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 boundView
instances.
Throws
IllegalStateException | if this method is not called on the main thread |
---|
Protected Methods
protected voidonClosedCaptionClicked(Viewview)
The callback that is invoked when the user clicks on anView
bound to
this
UIMediaController
through
bindViewToClosedCaption(View)
.
The default behavior is to launch the
TracksChooserDialogFragment
if theActivity
used
to construct this
UIMediaController
is aFragmentActivity
and the remote media is loaded.
Parameters
view | theView that the
user clicked |
---|
protected voidonForwardClicked(Viewview, long skipStepMs)
The callback that is invoked when the user clicks on anView
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 voidonLaunchExpandedControllerClicked(View view)
The callback that is invoked when the user clicks on anView
bound to
this
UIMediaController
through
bindViewToLaunchExpandedController(View)
.
The default behavior is to launch the expanded controllerActivity
specified by the name in
CastMediaOptions.getExpandedControllerActivityClassName()
ofCastMediaOptions
.
Parameters
view | theView that the
user clicked |
---|
protected voidonMuteToggleClicked(ImageView view)
The callback that is invoked when the user clicks on anImageView
bound to this
UIMediaController
through
bindImageViewToMuteToggle(ImageView)
.
The default behavior is to toggle the muted state of theCastSession
if there is one and it is connected.
Parameters
view | theImageView
that the user clicked |
---|
protected voidonPlayPauseToggleClicked(ImageView view)
The callback that is invoked when the user clicks on anImageView
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 | theImageView
that the user clicked |
---|
protected voidonRewindClicked(Viewview, long skipStepMs)
The callback that is invoked when the user clicks on anView
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 voidonSeekBarProgressChanged(SeekBarseekBar, int progress, boolean fromUser)
The callback that is invoked on progress change of aSeekBar
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 | theSeekBar
that the user is scrubbing |
---|---|
progress | the current progress level |
fromUser | true if the progress change was initiated by the user |
protected voidonSeekBarStartTrackingTouch(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 theseekBar
and all the views in the
update-when-scrubbing set from theCastSession
to stop receiving furthur playback progress updates.
Parameters
seekBar | theSeekBar
that the user is scrubbing |
---|
protected voidonSeekBarStopTrackingTouch(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 theseekBar
and all the views in
the update-when-scrubbing set to theCastSession
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 | theSeekBar
that the user is scrubbing |
---|
protected voidonSkipNextClicked(Viewview)
The callback that is invoked when the user clicks on anView
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
ofnull
.
Parameters
view | theView that the
user clicked |
---|
protected voidonSkipPrevClicked(Viewview)
The callback that is invoked when the user clicks on anView
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
ofnull
.
Parameters
view | theView that the
user clicked |
---|