AI-generated Key Takeaways
-
MiniControllerFragment is an Android fragment for remote media casting control with album art, a progress bar, and three customizable buttons.
-
Control buttons are configured using an array of button ID resources with support for various predefined actions and custom buttons.
-
Custom buttons require obtaining the ImageView, implementing a UIController subclass, and binding the view to the controller.
-
The album art can be hidden, which also removes the first control button.
-
The fragment's visibility is automatically managed based on the media session state.
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">
Configurable control buttons
The fragment can show up to three control buttons, from start to end. By default the fragment shows a play/pause toggle button. Developers can use the attributecastControlButtons 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">
@id/cast_button_type_empty.
Add custom control buttons
This fragment supports adding custom control buttons which are not provided by the SDK, such as a "thumb up" button.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
UIMediaController.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_mini_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);
...
}
}
Show or hide album art
The album art can be hidden by setting attribute castShowImageThumbnail to
false:
... app:castShowImageThumbnail="false" ...
The fragment will be visible when a media session starts, and will be invisible when a media session ends.
XML Attribute Summary
Inherited Field Summary
Public Constructor Summary
Public Method Summary
| final ImageView |
getButtonImageViewAt(int slotIndex)
Returns the
ImageView
of the button at slotIndex in this container.
|
| final int |
getButtonSlotCount()
Returns the number of slots to hold control buttons in this container.
|
| final int |
getButtonTypeAt(int slotIndex)
Returns the type of the button at
slotIndex in this container.
|
| UIMediaController |
getUIMediaController()
Returns the
UIMediaController used to bind views in this container.
|
| View | |
| void | |
| void |
Inherited Method Summary
XML Attributes
CastMiniController_castBackground
Related Methods
CastMiniController_castButtonColor
Related Methods
CastMiniController_castClosedCaptionsButtonDrawable
Related Methods
CastMiniController_castControlButtons
Related Methods
CastMiniController_castForward30ButtonDrawable
Related Methods
CastMiniController_castLargePauseButtonDrawable
Related Methods
CastMiniController_castLargePlayButtonDrawable
Related Methods
CastMiniController_castLargeStopButtonDrawable
Related Methods
CastMiniController_castMuteToggleButtonDrawable
Related Methods
CastMiniController_castPauseButtonDrawable
Related Methods
CastMiniController_castPlayButtonDrawable
Related Methods
CastMiniController_castProgressBarColor
Related Methods
CastMiniController_castRewind30ButtonDrawable
Related Methods
CastMiniController_castShowImageThumbnail
Related Methods
CastMiniController_castSkipNextButtonDrawable
Related Methods
CastMiniController_castSkipPreviousButtonDrawable
Related Methods
CastMiniController_castStopButtonDrawable
Related Methods
CastMiniController_castSubtitleTextAppearance
Related Methods
CastMiniController_castTitleTextAppearance
Related Methods
Public Constructors
public MiniControllerFragment ()
Public Methods
public final ImageView getButtonImageViewAt (int slotIndex)
Returns the ImageView
of the button at slotIndex in this container. The ImageView
is defined in the layout of the Activity
which implements this interface.
Parameters
| slotIndex | the index of the slot in this container. |
|---|
Throws
| IndexOutOfBoundsException |
|---|
public final int getButtonSlotCount ()
Returns the number of slots to hold control buttons in this container.
public final int getButtonTypeAt (int slotIndex)
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 | the index of the slot in this container. |
|---|
Throws
| IndexOutOfBoundsException |
|---|
public UIMediaController getUIMediaController ()
Returns the
UIMediaController used to bind views in this container.