java.lang.Object | ||
↳ | android.support.v4.app.Fragment | |
↳ | com.google.android.gms.cast.framework.media.widget.MiniControllerFragment |
A fragment that provides remote control functionality. This fragment provides an image for the
album art, a ProgressBar
for playback progression, and three configurable control
buttons. If developers want to use this fragment, they should add it to their layout XML file,
and the CastContext
will automatically manage its state, and handle any user
interactions.
<fragment android:id="@+id/cast_mini_controller" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:visibility="gone" class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment">
castControlButtons
to
override what buttons to show. The list of supported control buttons are defined as ID resources:
@id/cast_button_type_empty
: Not placing a button in this slot.
@id/cast_button_type_custom
: A custom button.
@id/cast_button_type_play_pause_toggle
: A button that toggles playback.
@id/cast_button_type_skip_previous
: A button that skips to the previous item in the
queue.
@id/cast_button_type_skip_next
: A button that skips to the next item in the queue.
@id/cast_button_type_rewind_30_seconds
: A button that rewinds the playback by 30 seconds.
@id/cast_button_type_forward_30_seconds
: A button that skips forward the playback by 30
seconds.
@id/cast_button_type_mute_toggle
: A button that mutes and unmutes the remote receiver.
@id/cast_button_type_closed_caption
: A button that opens a dialog to select text and
audio tracks.
Here is an example of showing a rewind button, a play/pause toggle button and a forward button, from start to end:
<array name="cast_mini_controller_control_buttons"> <item>@id/cast_button_type_rewind_30_seconds</item> <item>@id/cast_button_type_play_pause_toggle</item> <item>@id/cast_button_type_forward_30_seconds</item> </array> ... <fragment android:id="@+id/cast_mini_controller" ... app:castControlButtons="@array/cast_mini_controller_control_buttons" class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment">The array must contain exactly three items, otherwise a runtime exception will be thrown. If you don't want to show a button in a slot, use
@id/cast_button_type_empty
.
1. Specify a slot to contain a custom button using @id/cast_button_type_custom
in
the castControlButtons
attribute. You can then use
getButtonImageViewAt(int)
to obtain the ImageView
for that custom button.
2. Implement a subclass of UIController
. The UIController
contains methods that
are called by the SDK when the state of the cast session or media session changes. Your subclass
of UIController
should take a ImageView
as one of the parameters, and update its
state as needed.
3. Override onCreateView(LayoutInflater, ViewGroup, Bundle)
, call getButtonImageViewAt(int)
to get the view object of
the button, and then call bindViewToUIController(View, UIController)
to
associate the view with your custom UIController
.
4. See MediaIntentReceiver
for how to handle
the action from your custom button.
Here is an example of associating a button at slot 2 to a UIController
called
MyCustomUIController
:
// arrays.xml <array name="cast_expanded_controller_control_buttons"> <item>@id/cast_button_type_empty</item> <item>@id/cast_button_type_rewind_30_seconds</item> <item>@id/cast_button_type_custom</item> <item>@id/cast_button_type_empty</item> </array> // MyCustomUIController.java class MyCustomUIController extends UIController { private final View mView; public MyCustomUIController(View view) { mView = view; } @Override public onMediaStatusUpdated() { // Update the state of mView based on the latest the media status. ... mView.setVisible(false); ... } } // MyMiniControllerFragment.java class MyMiniControllerFragment extends MiniControllerFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); ImageView customButtonView = getButtonImageViewAt(2); MyCustomUIController myCustomUiController = new MyCustomUIController(customButtonView); getUIMediaController().bindViewToUIController(customButtonView, myCustomUiController); ... } }
The album art can be hidden by setting attribute castShowImageThumbnail
to false
:
... app:castShowImageThumbnail="false" ...If the album art is shown, then the first control button will not be displayed.
The fragment will be visible when a media session starts, and will be invisible when a media session ends.
XML Attributes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
com.google.android.gms:castBackground | |||||||||||
com.google.android.gms:castButtonColor | |||||||||||
com.google.android.gms:castClosedCaptionsButtonDrawable | |||||||||||
com.google.android.gms:castControlButtons | |||||||||||
com.google.android.gms:castForward30ButtonDrawable | |||||||||||
com.google.android.gms:castLargePauseButtonDrawable | |||||||||||
com.google.android.gms:castLargePlayButtonDrawable | |||||||||||
com.google.android.gms:castLargeStopButtonDrawable | |||||||||||
com.google.android.gms:castMuteToggleButtonDrawable | |||||||||||
com.google.android.gms:castPauseButtonDrawable | |||||||||||
com.google.android.gms:castPlayButtonDrawable | |||||||||||
com.google.android.gms:castProgressBarColor | |||||||||||
com.google.android.gms:castRewind30ButtonDrawable | |||||||||||
com.google.android.gms:castShowImageThumbnail | |||||||||||
com.google.android.gms:castSkipNextButtonDrawable | |||||||||||
com.google.android.gms:castSkipPreviousButtonDrawable | |||||||||||
com.google.android.gms:castStopButtonDrawable | |||||||||||
com.google.android.gms:castSubtitleTextAppearance | |||||||||||
com.google.android.gms:castTitleTextAppearance |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Returns the
ImageView of the button at slotIndex in this container. | |||||||||||
Returns the number of slots to hold control buttons in this container.
| |||||||||||
Returns the type of the button at
slotIndex in this container. | |||||||||||
Returns the
UIMediaController used to bind views in this container. | |||||||||||
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
![]() | |||||||||||
![]() | |||||||||||
![]() | |||||||||||
![]() | |||||||||||
![]() |
Returns the number of slots to hold control buttons in this container.
Returns | |
---|---|
int |
Returns the type of the button at slotIndex
in this container.
Button types are defined as one of the ID resources:
@id/cast_button_type_empty
: Not placing a button in this slot.@id/cast_button_type_custom
: A custom button.@id/cast_button_type_play_pause_toggle
: A button that toggles playback.@id/cast_button_type_skip_previous
: A button that skips to the previous item
in the queue.@id/cast_button_type_skip_next
: A button that skips to the next item in the
queue.@id/cast_button_type_rewind_30_seconds
: A button that rewinds the playback
by 30 seconds.@id/cast_button_type_forward_30_seconds
: A button that skips forward the
playback by 30 seconds.@id/cast_button_type_mute_toggle
: A button that mutes and unmutes the remote
receiver.@id/cast_button_type_closed_caption
: A button that opens a dialog to select
text and audio tracks.Parameters | |
---|---|
slotIndex |
int :
the index of the slot in this container. |
Returns | |
---|---|
int |
Throws | |
---|---|
IndexOutOfBoundsException |
Returns the UIMediaController
used to bind views in this container.
Returns | |
---|---|
UIMediaController |
Parameters | |
---|---|
inflater |
LayoutInflater
|
container |
ViewGroup
|
savedInstanceState |
Bundle
|
Returns | |
---|---|
View |
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
savedInstanceState |
Bundle
|