UIMediaController

public class UIMediaController extends Object
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 */);
   }
 }
 
If the app needs to perform custom behavior in addition to, or instead of, the default behavior for a given action, it can subclass UIMediaController and override the corresponding event-handling method. For example:
 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)
void
bindImageViewToImageOfCurrentItem(ImageView view, int imageType, View placeHolderView)
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)
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
bindImageViewToPlayPauseToggle(ImageView view, Drawable playDrawable, Drawable pauseDrawable, Drawable stopDrawable, View loadingIndicator, boolean hideViewWhenLoading)
Binds an ImageView to toggle play / pause of the current item.
void
bindProgressBar(ProgressBar view)
Binds a ProgressBar to the playback progress of the current item.
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
bindSeekBar(SeekBar view)
Binds a SeekBar to control the playback position of the current item.
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
void
onSessionResumeFailed(CastSession session, int error)
void
onSessionResumed(CastSession session, boolean wasSuspended)
void
void
onSessionStartFailed(CastSession session, int error)
void
onSessionStarted(CastSession session, String sessionId)
void
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
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.

Parameters
view the View that the user clicked
skipStepMs the amount of time, in milliseconds, that the playback position will move forward by when the View is clicked

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.

Parameters
view the View that the user clicked
skipStepMs the amount of time, in milliseconds, that the playback position will move backward by when the View is clicked

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