Migrate the rest of AVRCP Controller to use MediaCompat
There are still a few chunks of code in AVRCP Controller that do not use
the MediaCompat library objects. This change gets all AVRCP code to
agree on the compay library, providing a solid base for the cover art
feature.
Bug: b/132812696
Test: Build, Flash, Interopt test with other devices + atest
Change-Id: I62f3acb15ec9ba0ce8c6a6f2fc8a89d193964498
diff --git a/jni/com_android_bluetooth_avrcp_controller.cpp b/jni/com_android_bluetooth_avrcp_controller.cpp
index 050da06..9f47431 100755
--- a/jni/com_android_bluetooth_avrcp_controller.cpp
+++ b/jni/com_android_bluetooth_avrcp_controller.cpp
@@ -805,7 +805,7 @@
method_handleGetFolderItemsRsp =
env->GetMethodID(clazz, "handleGetFolderItemsRsp",
- "([BI[Landroid/media/browse/MediaBrowser$MediaItem;)V");
+ "([BI[Landroid/support/v4/media/MediaBrowserCompat$MediaItem;)V");
method_handleGetPlayerItemsRsp = env->GetMethodID(
clazz, "handleGetPlayerItemsRsp",
"([B[Lcom/android/bluetooth/avrcpcontroller/AvrcpPlayer;)V");
@@ -813,10 +813,10 @@
method_createFromNativeMediaItem =
env->GetMethodID(clazz, "createFromNativeMediaItem",
"(JILjava/lang/String;[I[Ljava/lang/String;)Landroid/"
- "media/browse/MediaBrowser$MediaItem;");
+ "support/v4/media/MediaBrowserCompat$MediaItem;");
method_createFromNativeFolderItem = env->GetMethodID(
clazz, "createFromNativeFolderItem",
- "(JILjava/lang/String;I)Landroid/media/browse/MediaBrowser$MediaItem;");
+ "(JILjava/lang/String;I)Landroid/support/v4/media/MediaBrowserCompat$MediaItem;");
method_createFromNativePlayerItem =
env->GetMethodID(clazz, "createFromNativePlayerItem",
"(ILjava/lang/String;[BII)Lcom/android/bluetooth/"
@@ -841,7 +841,7 @@
std::unique_lock<std::shared_timed_mutex> lock(sCallbacks_mutex);
jclass tmpMediaItem =
- env->FindClass("android/media/browse/MediaBrowser$MediaItem");
+ env->FindClass("android/support/v4/media/MediaBrowserCompat$MediaItem");
class_MediaBrowser_MediaItem = (jclass)env->NewGlobalRef(tmpMediaItem);
jclass tmpBtPlayer =
diff --git a/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java b/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java
index 87291f0..5f601e9 100755
--- a/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java
+++ b/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java
@@ -22,10 +22,10 @@
import android.bluetooth.BluetoothProfile;
import android.bluetooth.IBluetoothAvrcpController;
import android.content.Intent;
-import android.media.MediaDescription;
-import android.media.browse.MediaBrowser.MediaItem;
-import android.media.session.PlaybackState;
import android.os.Bundle;
+import android.support.v4.media.MediaBrowserCompat.MediaItem;
+import android.support.v4.media.MediaDescriptionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
import android.util.Log;
import com.android.bluetooth.Utils;
@@ -392,25 +392,25 @@
if (DBG) {
Log.d(TAG, "onPlayStatusChanged " + playStatus);
}
- int playbackState = PlaybackState.STATE_NONE;
+ int playbackState = PlaybackStateCompat.STATE_NONE;
switch (playStatus) {
case JNI_PLAY_STATUS_STOPPED:
- playbackState = PlaybackState.STATE_STOPPED;
+ playbackState = PlaybackStateCompat.STATE_STOPPED;
break;
case JNI_PLAY_STATUS_PLAYING:
- playbackState = PlaybackState.STATE_PLAYING;
+ playbackState = PlaybackStateCompat.STATE_PLAYING;
break;
case JNI_PLAY_STATUS_PAUSED:
- playbackState = PlaybackState.STATE_PAUSED;
+ playbackState = PlaybackStateCompat.STATE_PAUSED;
break;
case JNI_PLAY_STATUS_FWD_SEEK:
- playbackState = PlaybackState.STATE_FAST_FORWARDING;
+ playbackState = PlaybackStateCompat.STATE_FAST_FORWARDING;
break;
case JNI_PLAY_STATUS_REV_SEEK:
- playbackState = PlaybackState.STATE_REWINDING;
+ playbackState = PlaybackStateCompat.STATE_REWINDING;
break;
default:
- playbackState = PlaybackState.STATE_NONE;
+ playbackState = PlaybackStateCompat.STATE_NONE;
}
BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(address);
AvrcpControllerStateMachine stateMachine = getStateMachine(device);
@@ -524,7 +524,7 @@
Log.d(TAG, "createFromNativeMediaItem uid: " + uid + " type " + type + " name "
+ name + " attrids " + attrIds + " attrVals " + attrVals);
}
- MediaDescription.Builder mdb = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder mdb = new MediaDescriptionCompat.Builder();
Bundle mdExtra = new Bundle();
mdExtra.putLong(MEDIA_ITEM_UID_KEY, uid);
@@ -548,7 +548,7 @@
Log.d(TAG, "createFromNativeFolderItem uid: " + uid + " type " + type + " name "
+ name + " playable " + playable);
}
- MediaDescription.Builder mdb = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder mdb = new MediaDescriptionCompat.Builder();
Bundle mdExtra = new Bundle();
mdExtra.putLong(MEDIA_ITEM_UID_KEY, uid);
diff --git a/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachine.java b/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachine.java
index bd948b4..a31ada7 100755
--- a/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachine.java
+++ b/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachine.java
@@ -22,10 +22,10 @@
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
-import android.media.MediaMetadata;
-import android.media.browse.MediaBrowser.MediaItem;
import android.os.Bundle;
import android.os.Message;
+import android.support.v4.media.MediaBrowserCompat.MediaItem;
+import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
import android.util.Log;
@@ -397,9 +397,9 @@
return true;
case MESSAGE_PROCESS_TRACK_CHANGED:
- mAddressedPlayer.updateCurrentTrack((MediaMetadata) msg.obj);
+ mAddressedPlayer.updateCurrentTrack((MediaMetadataCompat) msg.obj);
if (isActive()) {
- BluetoothMediaBrowserService.trackChanged((MediaMetadata) msg.obj);
+ BluetoothMediaBrowserService.trackChanged((MediaMetadataCompat) msg.obj);
}
return true;
diff --git a/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayer.java b/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayer.java
index 4736acf..7079fe5 100644
--- a/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayer.java
+++ b/src/com/android/bluetooth/avrcpcontroller/AvrcpPlayer.java
@@ -16,8 +16,8 @@
package com.android.bluetooth.avrcpcontroller;
-import android.media.MediaMetadata;
import android.os.SystemClock;
+import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
import android.util.Log;
@@ -51,7 +51,7 @@
private int mPlayerType;
private byte[] mPlayerFeatures = new byte[16];
private long mAvailableActions = PlaybackStateCompat.ACTION_PREPARE;
- private MediaMetadata mCurrentTrack;
+ private MediaMetadataCompat mCurrentTrack;
private PlaybackStateCompat mPlaybackStateCompat;
private PlayerApplicationSettings mSupportedPlayerApplicationSettings =
new PlayerApplicationSettings();
@@ -166,9 +166,9 @@
return mPlaybackStateCompat;
}
- public synchronized void updateCurrentTrack(MediaMetadata update) {
+ public synchronized void updateCurrentTrack(MediaMetadataCompat update) {
if (update != null) {
- long trackNumber = update.getLong(MediaMetadata.METADATA_KEY_TRACK_NUMBER);
+ long trackNumber = update.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER);
mPlaybackStateCompat = new PlaybackStateCompat.Builder(
mPlaybackStateCompat).setActiveQueueItemId(
trackNumber - 1).build();
@@ -176,7 +176,7 @@
mCurrentTrack = update;
}
- public synchronized MediaMetadata getCurrentTrack() {
+ public synchronized MediaMetadataCompat getCurrentTrack() {
return mCurrentTrack;
}
diff --git a/src/com/android/bluetooth/avrcpcontroller/BluetoothMediaBrowserService.java b/src/com/android/bluetooth/avrcpcontroller/BluetoothMediaBrowserService.java
index df88b80..1da3883 100644
--- a/src/com/android/bluetooth/avrcpcontroller/BluetoothMediaBrowserService.java
+++ b/src/com/android/bluetooth/avrcpcontroller/BluetoothMediaBrowserService.java
@@ -18,11 +18,8 @@
import android.app.PendingIntent;
import android.content.Intent;
-import android.media.MediaMetadata;
-import android.media.browse.MediaBrowser.MediaItem;
import android.os.Bundle;
-import android.support.v4.media.MediaBrowserCompat;
-import android.support.v4.media.MediaDescriptionCompat;
+import android.support.v4.media.MediaBrowserCompat.MediaItem;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
@@ -137,10 +134,9 @@
@Override
public synchronized void onLoadChildren(final String parentMediaId,
- final Result<List<MediaBrowserCompat.MediaItem>> result) {
+ final Result<List<MediaItem>> result) {
if (DBG) Log.d(TAG, "onLoadChildren parentMediaId=" + parentMediaId);
- List<MediaBrowserCompat.MediaItem> contents =
- MediaBrowserCompat.MediaItem.fromMediaItemList(getContents(parentMediaId));
+ List<MediaItem> contents = getContents(parentMediaId);
if (contents == null) {
result.detach();
} else {
@@ -161,7 +157,7 @@
if (songList != null) {
for (MediaItem song : songList) {
mMediaQueue.add(new MediaSessionCompat.QueueItem(
- MediaDescriptionCompat.fromMediaDescription(song.getDescription()),
+ song.getDescription(),
mMediaQueue.size()));
}
}
@@ -189,10 +185,9 @@
}
}
- static synchronized void trackChanged(MediaMetadata mediaMetadata) {
+ static synchronized void trackChanged(MediaMetadataCompat mediaMetadata) {
if (sBluetoothMediaBrowserService != null) {
- sBluetoothMediaBrowserService.mSession.setMetadata(
- MediaMetadataCompat.fromMediaMetadata(mediaMetadata));
+ sBluetoothMediaBrowserService.mSession.setMetadata(mediaMetadata);
} else {
Log.w(TAG, "trackChanged Unavailable");
}
diff --git a/src/com/android/bluetooth/avrcpcontroller/BrowseTree.java b/src/com/android/bluetooth/avrcpcontroller/BrowseTree.java
index 923282d..d94f6da 100644
--- a/src/com/android/bluetooth/avrcpcontroller/BrowseTree.java
+++ b/src/com/android/bluetooth/avrcpcontroller/BrowseTree.java
@@ -17,10 +17,9 @@
package com.android.bluetooth.avrcpcontroller;
import android.bluetooth.BluetoothDevice;
-import android.media.MediaDescription;
-import android.media.browse.MediaBrowser;
-import android.media.browse.MediaBrowser.MediaItem;
import android.os.Bundle;
+import android.support.v4.media.MediaBrowserCompat.MediaItem;
+import android.support.v4.media.MediaDescriptionCompat;
import android.util.Log;
import java.util.ArrayList;
@@ -61,11 +60,11 @@
BrowseTree(BluetoothDevice device) {
if (device == null) {
- mRootNode = new BrowseNode(new MediaItem(new MediaDescription.Builder()
+ mRootNode = new BrowseNode(new MediaItem(new MediaDescriptionCompat.Builder()
.setMediaId(ROOT).setTitle(ROOT).build(), MediaItem.FLAG_BROWSABLE));
mRootNode.setCached(true);
} else {
- mRootNode = new BrowseNode(new MediaItem(new MediaDescription.Builder()
+ mRootNode = new BrowseNode(new MediaItem(new MediaDescriptionCompat.Builder()
.setMediaId(ROOT + device.getAddress().toString()).setTitle(
device.getName()).build(), MediaItem.FLAG_BROWSABLE));
mRootNode.mDevice = device;
@@ -74,11 +73,11 @@
mRootNode.mBrowseScope = AvrcpControllerService.BROWSE_SCOPE_PLAYER_LIST;
mRootNode.setExpectedChildren(255);
- mNavigateUpNode = new BrowseNode(new MediaItem(new MediaDescription.Builder()
+ mNavigateUpNode = new BrowseNode(new MediaItem(new MediaDescriptionCompat.Builder()
.setMediaId(UP).setTitle(UP).build(),
MediaItem.FLAG_BROWSABLE));
- mNowPlayingNode = new BrowseNode(new MediaItem(new MediaDescription.Builder()
+ mNowPlayingNode = new BrowseNode(new MediaItem(new MediaDescriptionCompat.Builder()
.setMediaId(NOW_PLAYING_PREFIX)
.setTitle(NOW_PLAYING_PREFIX).build(), MediaItem.FLAG_BROWSABLE));
mNowPlayingNode.mBrowseScope = AvrcpControllerService.BROWSE_SCOPE_NOW_PLAYING;
@@ -139,33 +138,33 @@
mIsPlayer = true;
// Transform the player into a item.
- MediaDescription.Builder mdb = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder mdb = new MediaDescriptionCompat.Builder();
String playerKey = PLAYER_PREFIX + player.getId();
mBluetoothId = player.getId();
mdb.setMediaId(UUID.randomUUID().toString());
mdb.setTitle(player.getName());
int mediaItemFlags = player.supportsFeature(AvrcpPlayer.FEATURE_BROWSING)
- ? MediaBrowser.MediaItem.FLAG_BROWSABLE : 0;
- mItem = new MediaBrowser.MediaItem(mdb.build(), mediaItemFlags);
+ ? MediaItem.FLAG_BROWSABLE : 0;
+ mItem = new MediaItem(mdb.build(), mediaItemFlags);
}
BrowseNode(BluetoothDevice device) {
boolean mIsPlayer = true;
mDevice = device;
- MediaDescription.Builder mdb = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder mdb = new MediaDescriptionCompat.Builder();
String playerKey = PLAYER_PREFIX + device.getAddress().toString();
mdb.setMediaId(playerKey);
mdb.setTitle(device.getName());
- int mediaItemFlags = MediaBrowser.MediaItem.FLAG_BROWSABLE;
- mItem = new MediaBrowser.MediaItem(mdb.build(), mediaItemFlags);
+ int mediaItemFlags = MediaItem.FLAG_BROWSABLE;
+ mItem = new MediaItem(mdb.build(), mediaItemFlags);
}
private BrowseNode(String name) {
- MediaDescription.Builder mdb = new MediaDescription.Builder();
+ MediaDescriptionCompat.Builder mdb = new MediaDescriptionCompat.Builder();
mdb.setMediaId(name);
mdb.setTitle(name);
- mItem = new MediaBrowser.MediaItem(mdb.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE);
+ mItem = new MediaItem(mdb.build(), MediaItem.FLAG_BROWSABLE);
}
synchronized void setExpectedChildren(int count) {
diff --git a/src/com/android/bluetooth/avrcpcontroller/TrackInfo.java b/src/com/android/bluetooth/avrcpcontroller/TrackInfo.java
index fd1b784..9b192ac 100644
--- a/src/com/android/bluetooth/avrcpcontroller/TrackInfo.java
+++ b/src/com/android/bluetooth/avrcpcontroller/TrackInfo.java
@@ -16,7 +16,7 @@
package com.android.bluetooth.avrcpcontroller;
-import android.media.MediaMetadata;
+import android.support.v4.media.MediaMetadataCompat;
final class TrackInfo {
/*
@@ -30,23 +30,23 @@
private static final int MEDIA_ATTRIBUTE_GENRE = 0x06;
private static final int MEDIA_ATTRIBUTE_PLAYING_TIME = 0x07;
- static MediaMetadata getMetadata(int[] attrIds, String[] attrMap) {
- MediaMetadata.Builder metaDataBuilder = new MediaMetadata.Builder();
+ static MediaMetadataCompat getMetadata(int[] attrIds, String[] attrMap) {
+ MediaMetadataCompat.Builder metaDataBuilder = new MediaMetadataCompat.Builder();
int attributeCount = Math.max(attrIds.length, attrMap.length);
for (int i = 0; i < attributeCount; i++) {
switch (attrIds[i]) {
case MEDIA_ATTRIBUTE_TITLE:
- metaDataBuilder.putString(MediaMetadata.METADATA_KEY_TITLE, attrMap[i]);
+ metaDataBuilder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, attrMap[i]);
break;
case MEDIA_ATTRIBUTE_ARTIST_NAME:
- metaDataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST, attrMap[i]);
+ metaDataBuilder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, attrMap[i]);
break;
case MEDIA_ATTRIBUTE_ALBUM_NAME:
- metaDataBuilder.putString(MediaMetadata.METADATA_KEY_ALBUM, attrMap[i]);
+ metaDataBuilder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, attrMap[i]);
break;
case MEDIA_ATTRIBUTE_TRACK_NUMBER:
try {
- metaDataBuilder.putLong(MediaMetadata.METADATA_KEY_TRACK_NUMBER,
+ metaDataBuilder.putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER,
Long.valueOf(attrMap[i]));
} catch (java.lang.NumberFormatException e) {
// If Track Number doesn't parse, leave it unset
@@ -54,18 +54,18 @@
break;
case MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER:
try {
- metaDataBuilder.putLong(MediaMetadata.METADATA_KEY_NUM_TRACKS,
+ metaDataBuilder.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS,
Long.valueOf(attrMap[i]));
} catch (java.lang.NumberFormatException e) {
// If Total Track Number doesn't parse, leave it unset
}
break;
case MEDIA_ATTRIBUTE_GENRE:
- metaDataBuilder.putString(MediaMetadata.METADATA_KEY_GENRE, attrMap[i]);
+ metaDataBuilder.putString(MediaMetadataCompat.METADATA_KEY_GENRE, attrMap[i]);
break;
case MEDIA_ATTRIBUTE_PLAYING_TIME:
try {
- metaDataBuilder.putLong(MediaMetadata.METADATA_KEY_DURATION,
+ metaDataBuilder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION,
Long.valueOf(attrMap[i]));
} catch (java.lang.NumberFormatException e) {
// If Playing Time doesn't parse, leave it unset