ブラウズ可能または再生可能なアイテムを使用して [コンテンツ階層を構築][1] したら、コンテンツ スタイルを適用して、自動車内でアイテムがどのように表示されるかを決定します。次のコンテンツ スタイルを使用します。
図 1. リストアイテムは、画像よりもタイトルとメタデータを優先します。
図 2. グリッド アイテムでは、タイトルやメタデータよりも画像が優先されます。
デフォルトのコンテンツ スタイルを設定する
メディア アイテムをどのように表示するかに関するグローバルなデフォルトを設定できます。そのためには、サービスの [onGetRoot][1] 実装によって返される BrowserRoot extras バンドルに特定の定数を含め、これらの定数を探して適切なスタイルを決定します。
これらのエクストラはバンドルでキーとして使用できます。
[
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE][2]: ブラウズツリー内のすべてのブラウズ可能なアイテムのプレゼンテーション ヒント。[
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE][3]: ブラウズツリー内のすべての再生可能なアイテムのプレゼンテーション ヒント。
キーは、次の整数定数値にマッピングして、こうしたアイテムの表示に影響を与えます。
[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM][4]: 対応するアイテムがリストアイテムとして表示されます。[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM][5]: 対応するアイテムがグリッド アイテムとして表示されます。[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM][6]: 対応するアイテムは「カテゴリ」リストアイテムとして表示されます。通常のリストアイテムと同様ですが、アイテムのアイコンの周囲に余白が適用されます。これにより、小さいアイコンの見た目が改善されます。アイコンは、着色可能なベクター型ドローアブルにする必要があります。このヒントはブラウズ可能なアイテムに対してのみ提供します。[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM][7]: 対応するアイテムは「カテゴリ」グリッド アイテムとして表示されます。通常のグリッド アイテムと似ていますが、アイテムのアイコンの周囲に余白が適用されます。これにより、小さなアイコンの見た目が改善されます。アイコンは、着色可能なベクター型ドローアブルにする必要があります。このヒントはブラウズ可能なアイテムに対してのみ提供します。
次のコード スニペットは、ブラウズ可能なアイテムと再生可能なアイテムのデフォルトのコンテンツ スタイルを、それぞれグリッドとリストに設定する方法を示しています。
Kotlin
import androidx.media.utils.MediaConstants
@Nullable
override fun onGetRoot(
@NonNull clientPackageName: String,
clientUid: Int,
@Nullable rootHints: Bundle
): BrowserRoot {
val extras = Bundle()
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM)
return BrowserRoot(ROOT_ID, extras)
}
Java
import androidx.media.utils.MediaConstants;
@Nullable
@Override
public BrowserRoot onGetRoot(
@NonNull String clientPackageName,
int clientUid,
@Nullable Bundle rootHints) {
Bundle extras = new Bundle();
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM);
return new BrowserRoot(ROOT_ID, extras);
}
アイテムごとのコンテンツ スタイルを設定する
ブラウズ可能なメディア アイテムの子孫やメディア アイテム自体の、デフォルトのコンテンツ スタイルをオーバーライドできます。ブラウズ可能なメディア アイテムの子孫のデフォルトをオーバーライドするには、そのメディア アイテムの MediaDescription にエクストラ バンドルを作成し、前述のヒントを追加します。
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLEはそのアイテムの再生可能な子孫に適用されます。DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLEはそのアイテムのブラウズ可能な子孫に適用されます。
特定のメディア アイテム(子孫ではない)のデフォルトをオーバーライドするには、そのメディア アイテムの MediaDescription にエクストラ バンドルを作成します。次に、キー [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM][8] を使用してヒントを追加します。そのアイテムの表示を指定するには、前述の値と同じ値を使用します。
次のコード スニペットは、自身と子孫のデフォルトのコンテンツ スタイルをオーバーライドするブラウズ可能な MediaItem を作成する方法を示しています。自身をカテゴリ リストアイテムとして、ブラウズ可能な子孫をリストアイテムとして、再生可能な子孫をグリッド アイテムとしてスタイル設定します。
Kotlin
import androidx.media.utils.MediaConstants
private fun createBrowsableMediaItem(
mediaId: String,
folderName: String,
iconUri: Uri
): MediaBrowser.MediaItem {
val mediaDescriptionBuilder = MediaDescription.Builder()
mediaDescriptionBuilder.setMediaId(mediaId)
mediaDescriptionBuilder.setTitle(folderName)
mediaDescriptionBuilder.setIconUri(iconUri)
val extras = Bundle()
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM)
mediaDescriptionBuilder.setExtras(extras)
return MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE)
}
Java
import androidx.media.utils.MediaConstants;
private MediaBrowser.MediaItem createBrowsableMediaItem(
String mediaId,
String folderName,
Uri iconUri) {
MediaDescription.Builder mediaDescriptionBuilder = new MediaDescription.Builder();
mediaDescriptionBuilder.setMediaId(mediaId);
mediaDescriptionBuilder.setTitle(folderName);
mediaDescriptionBuilder.setIconUri(iconUri);
Bundle extras = new Bundle();
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM);
mediaDescriptionBuilder.setExtras(extras);
return new MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE);
}
タイトルのヒントを使用してアイテムをグループ化する
関連するメディア アイテムをグループ化するには、アイテムごとにヒントを使用します。グループ内のすべてのメディア アイテムで、MediaDescription で extras バンドルを宣言する必要があります。このバンドルには、キー [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE][9] と同一の文字列値を持つマッピングを含める必要があります。この文字列はグループのタイトルに使用されるため、ローカライズします。
次のコード スニペットは、サブグループの見出しが Songs の MediaItem を作成する方法を示しています。
Kotlin
import androidx.media.utils.MediaConstants
private fun createMediaItem(
mediaId: String,
folderName: String,
iconUri: Uri
): MediaBrowser.MediaItem {
val mediaDescriptionBuilder = MediaDescription.Builder()
mediaDescriptionBuilder.setMediaId(mediaId)
mediaDescriptionBuilder.setTitle(folderName)
mediaDescriptionBuilder.setIconUri(iconUri)
val extras = Bundle()
extras.putString(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE,
"Songs")
mediaDescriptionBuilder.setExtras(extras)
return MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), /* playable or browsable flag*/)
}
Java
import androidx.media.utils.MediaConstants;
private MediaBrowser.MediaItem createMediaItem(String mediaId, String folderName, Uri iconUri) {
MediaDescription.Builder mediaDescriptionBuilder = new MediaDescription.Builder();
mediaDescriptionBuilder.setMediaId(mediaId);
mediaDescriptionBuilder.setTitle(folderName);
mediaDescriptionBuilder.setIconUri(iconUri);
Bundle extras = new Bundle();
extras.putString(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE,
"Songs");
mediaDescriptionBuilder.setExtras(extras);
return new MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), /* playable or browsable flag*/);
}
アプリは、連続したブロックとしてグループ化するメディア アイテムをすべて渡す必要があります。たとえば、メディア アイテムの 2 つのグループ「Songs」と「Albums」をこの順序で表示することを考えます。アプリがこの順序で 5 つのメディア アイテムを渡すと、Android Auto と AAOS はそれらを 4 つの別々のグループとして解釈します。
- メディア アイテム A(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")を使用) - メディア アイテム B(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")を使用) - メディア アイテム C(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")を使用) - メディア アイテム D(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")を使用) - メディア アイテム E(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")を使用)
これにより、次の 4 つのグループが作成されます。
- メディア アイテム A を含む「Songs」というグループ 1
- メディア アイテム B を含む「Albums」というグループ 2
- メディア アイテム C と D を含む「Songs」というグループ 3
- メディア アイテム E を含む「Albums」というグループ 4
これらのアイテムを 2 つのグループで表示するには、アプリで次の順序でメディア アイテムを渡す必要があります。
- メディア アイテム A(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")を使用) - メディア アイテム C(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")を使用) - メディア アイテム D(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")を使用) - メディア アイテム B(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")を使用) - メディア アイテム E(
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")を使用)
追加のメタデータ インジケーターを表示する
追加のメタデータ インジケーターを設定して、メディア ブラウザツリー内に、またはメディアの再生中に、コンテンツが一目でわかる情報を提供できます。
ブラウズツリーでは、Android Auto と AAOS はアイテムに関連付けられた extras を読み取り、インジケーターを表示します。メディアの再生中には、Android Auto と AAOS はメディア セッションのメタデータを読み取り、特定の定数を見つけて、表示するインジケーターを決定します。
図 3. メタデータ付きの再生ビュー。
図 4. 未再生コンテンツのブラウズビュー。
これらの定数は、MediaItem ディスクリプション エクストラと MediaMetadata エクストラの両方で使用できます。
[
EXTRA_DOWNLOAD_STATUS][10]: アイテムのダウンロード ステータスを示します。この定数をキーとして使用します。これらの long 定数は有効な値です。- [
STATUS_DOWNLOADED][11]: アイテムは完全にダウンロードされています。 - [
STATUS_DOWNLOADING][12]: アイテムはダウンロード中です。 - [
STATUS_NOT_DOWNLOADED][13]: アイテムはダウンロードされていません。
- [
[
METADATA_KEY_IS_EXPLICIT][14]: アイテムに露骨な表現のコンテンツが含まれていることを示します。アイテムが露骨な表現であることを示すには、この定数をキーとして使用し、long 型の [METADATA_VALUE_ATTRIBUTE_PRESENT][15] を値として使用します。
次の定数は、MediaItem ディスクリプション エクストラでしか使用できません。
[
DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS][16]: ポッドキャストのエピソードやオーディオブックなどの長編コンテンツの完了状態を示します。この定数をキーとして使用します。これらの整数定数は、次の値をとることができます。[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED][17]: アイテムは再生されていません。[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED][18]: アイテムは部分的に再生され、現在の位置は中間のどこかです。[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED][19]: アイテムは完了しました。
[
DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20]: 長編コンテンツの完了進捗度を 0.0 以上 1.0 以下の double 型の値で示します。これにより、PARTIALLY_PLAYING状態に関する詳細情報が提供され、Android Auto または AAOS は、わかりやすい進行状況インジケーター(進行状況バーなど)を表示できます。このエクストラを使用する場合は、初回インプレッション後にインジケーターを最新の状態に保つ方法について、[コンテンツの再生中にブラウズビューの進行状況バーを更新する][21] をご覧ください。
ユーザーがメディア ブラウズ ツリーをブラウジングしているときにインジケーターを表示するには、上の定数を 1 つ以上含むエクストラ バンドルを作成します。次に、そのバンドルを MediaDescription.Builder.setExtras メソッドに渡します。
次のスニペットは、70% 完了した露骨な表現のメディア アイテムのインジケーターを表示する方法を示しています。
Kotlin
import androidx.media.utils.MediaConstants
val extras = Bundle()
extras.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED)
extras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.7)
val description =
MediaDescriptionCompat.Builder()
.setMediaId(/*...*/)
.setTitle(resources.getString(/*...*/))
.setExtras(extras)
.build()
return MediaBrowserCompat.MediaItem(description, /* flags */)
Java
import androidx.media.utils.MediaConstants;
Bundle extras = new Bundle();
extras.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED);
extras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.7);
MediaDescriptionCompat description =
new MediaDescriptionCompat.Builder()
.setMediaId(/*...*/)
.setTitle(resources.getString(/*...*/))
.setExtras(extras)
.build();
return new MediaBrowserCompat.MediaItem(description, /* flags */);
現在再生中のメディア アイテムのインジケーターを表示するには、mediaSession の MediaMetadataCompat で METADATA_KEY_IS_EXPLICIT または EXTRA_DOWNLOAD_STATUS の値を宣言します。
次のコード スニペットは、再生ビュー内の曲が露骨な表現であり、かつダウンロードされていることを示す方法を示しています。
Kotlin
import androidx.media.utils.MediaConstants
mediaSession.setMetadata(
MediaMetadataCompat.Builder()
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, "Song Name")
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, "Artist name")
.putString(
MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI,
albumArtUri.toString())
.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
.putLong(
MediaDescriptionCompat.EXTRA_DOWNLOAD_STATUS,
MediaDescriptionCompat.STATUS_DOWNLOADED)
.build())
Java
import androidx.media.utils.MediaConstants;
mediaSession.setMetadata(
new MediaMetadataCompat.Builder()
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, "Song Name")
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, "Artist name")
.putString(
MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI,
albumArtUri.toString())
.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
.putLong(
MediaDescriptionCompat.EXTRA_DOWNLOAD_STATUS,
MediaDescriptionCompat.STATUS_DOWNLOADED)
.build());
コンテンツの再生中にブラウズビューの進行状況バーを更新する
[DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] エクストラを使用すると、再生途中のコンテンツの進行状況バーをブラウズビューに表示できます。ただし、ユーザーが再生途中のコンテンツを再生し続けると、時間の経過とともにインジケーターが不正確になります。
Android Auto と AAOS で進行状況バーを最新の状態に保つために、MediaMetadataCompat と PlaybackStateCompat で追加情報を提供し、ブラウズビューで進行中のコンテンツをメディア アイテムにリンクします。
メディア アイテムで進行状況バーを自動更新するには、次の要件を満たす必要があります。
作成した
MediaItemは、エクストラで [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] を0.0以上1.0以下の値で送信する必要があります。MediaMetadataCompatは、MediaItemに渡される [メディア ID][23] と等しい文字列値で [METADATA_KEY_MEDIA_ID][22] を送信する必要があります。PlaybackStateCompatは、MediaItemに渡される [メディア ID][23] と等しい文字列値にマッピングされるキー [PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID][24] のエクストラを含む必要があります。
次のコード スニペットは、再生中のアイテムがブラウズビューのアイテムにリンクされていることを示す方法を表しています。
Kotlin
import androidx.media.utils.MediaConstants
// When the MediaItem is constructed to show in the browse view.
// Suppose the item was 25% complete when the user launched the browse view.
val mediaItemExtras = Bundle()
mediaItemExtras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.25)
val description =
MediaDescriptionCompat.Builder()
.setMediaId("my-media-id")
.setExtras(mediaItemExtras)
// ...and any other setters.
.build()
return MediaBrowserCompat.MediaItem(description, /* flags */)
// Elsewhere, when the user has selected MediaItem for playback.
mediaSession.setMetadata(
MediaMetadataCompat.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, "my-media-id")
// ...and any other setters.
.build())
val playbackStateExtras = Bundle()
playbackStateExtras.putString(
MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID, "my-media-id")
mediaSession.setPlaybackState(
PlaybackStateCompat.Builder()
.setExtras(playbackStateExtras)
// ...and any other setters.
.build())
Java
import androidx.media.utils.MediaConstants;
// When the MediaItem is constructed to show in the browse view.
// Suppose the item was 25% complete when the user launched the browse view.
Bundle mediaItemExtras = new Bundle();
mediaItemExtras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.25);
MediaDescriptionCompat description =
new MediaDescriptionCompat.Builder()
.setMediaId("my-media-id")
.setExtras(mediaItemExtras)
// ...and any other setters.
.build();
return new MediaBrowserCompat.MediaItem(description, /* flags */);
// Elsewhere, when the user has selected MediaItem for playback.
mediaSession.setMetadata(
new MediaMetadataCompat.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, "my-media-id")
// ...and any other setters.
.build());
Bundle playbackStateExtras = new Bundle();
playbackStateExtras.putString(
MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID, "my-media-id");
mediaSession.setPlaybackState(
new PlaybackStateCompat.Builder()
.setExtras(playbackStateExtras)
// ...and any other setters.
.build());
```
未再生または完全に再生済みのコンテンツであっても、自動更新される進行状況バーを表示できます。これは、対応するメディア アイテムに DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE エクストラがあり、その値が 0.0(未再生の場合)または 1.0(完全に再生済みの場合)である場合に発生します。ユーザーがこれらのメディア アイテムを選択すると、Android Auto と AAOS は、他の進行状況インジケーターよりも進行状況バーを優先して表示します。
[1]: /training/cars/media/create-media-browser/content-hierarchy [2]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE() [3]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE() [4]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM() [5]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM() [6]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM() [7]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM() [8]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM() [9]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE() [10]: /reference/android/support/v4/media/MediaDescriptionCompat#EXTRA_DOWNLOAD_STATUS() [11]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_DOWNLOADED() [12]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_DOWNLOADING() [13]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_NOT_DOWNLOADED() [14]: /reference/androidx/media/utils/MediaConstants#METADATA_KEY_IS_EXPLICIT() [15]: /reference/androidx/media/utils/MediaConstants#METADATA_VALUE_ATTRIBUTE_PRESENT() [16]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS() [17]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED() [18]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED() [19]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED() [20]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE() [21]: #browse-progress-bar [22]: /reference/android/support/v4/media/MediaMetadataCompat#METADATA_KEY_MEDIA_ID() [23]: /reference/android/support/v4/media/MediaDescriptionCompat.Builder#setMediaId(java.lang.String) [24]: /reference/androidx/media/utils/MediaConstants#PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID()