AVRCP : Fix avrcp cover art issue
Due to media provider upgrade and enhancements
cover art fetch will fc.
1. simplify the sql due to selection statement
check enhancement in the media Provider.
2. Fetch album info using audio.media content provider.
3. /audio/artists/#/albums file Descriptor flow changed
4. Create album path dynamically based on album ID.
CRs-Fixed: 2429558
Change-Id: I0e96015559dfba43fc772bdfaf3660df4b35f35e
diff --git a/packages_apps_bluetooth_ext/src/avrcp/AvrcpBipRspParser.java b/packages_apps_bluetooth_ext/src/avrcp/AvrcpBipRspParser.java
index 077ef3c..8fc1f5d 100644
--- a/packages_apps_bluetooth_ext/src/avrcp/AvrcpBipRspParser.java
+++ b/packages_apps_bluetooth_ext/src/avrcp/AvrcpBipRspParser.java
@@ -79,6 +79,7 @@
private HashMap<String, AvrcpBipRspCoverArtAttributes> mCoverArtAttributesMap =
new HashMap<String, AvrcpBipRspCoverArtAttributes>();
private long mAlbumId = -1;
+ private long mAlbumUriId = -1;
private final String mAlbumUri = "content://media/external/audio/albumart";
private String mArtPath;
private int BIP_THUMB_WIDTH = 200;
@@ -102,7 +103,7 @@
/* Tmp path for storing file before compressing and sending to obex.
* This file is deleted after the operation */
private String mTmpFilePath;
-
+ private String basePath = null;
public AvrcpBipRspParser(Context context, String tag) {
setTag(tag);
mContext = context;
@@ -127,12 +128,20 @@
private String mNativeEncoding = "";
private String mNativePixel = "";
private String mNativeSize = "";
- private long mAlbumId = 0;
+ private long albumId = 0;
private String mArtPath = null;
private int mWidth = 0;
private int mHeight = 0;
+ private long albumUriId = 0;
+
+ public long getAlbumUriId() {
+ return albumUriId;
+ }
+ public void setAlbumUriId(long albumUriId) {
+ this.albumUriId = albumUriId;
+ }
public void setAlbumId(long albumId) {
- mAlbumId = albumId;
+ this.albumId = albumId;
}
public void setWidth(int width) {
mWidth = width;
@@ -153,7 +162,7 @@
mNativeSize = nativeSize;
}
public long getAlbumId() {
- return mAlbumId;
+ return albumId;
}
public int getWidth() {
return mWidth;
@@ -213,8 +222,12 @@
if (res == null)
return null;
- Log.d(TAG, "Enter getScaledBitmap");
Uri uri = ContentUris.withAppendedId(Uri.parse(mAlbumUri), album_id);
+ if (V) {
+ Log.d(TAG, " getScaledBitmap uri :" + uri);
+ } else {
+ if (D) Log.d(TAG, " getScaledBitmap");
+ }
if (uri != null) {
ParcelFileDescriptor fd = null;
try {
@@ -249,6 +262,9 @@
}
return b;
} catch (FileNotFoundException e) {
+ if (V) {
+ e.printStackTrace();
+ }
Log.e(TAG, "getScaledBitmap: File not found");
} finally {
try {
@@ -268,24 +284,32 @@
String where = MediaStore.Audio.Media.ALBUM + "=?";
String whereVal [] = { albumName };
String orderBy = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
+ Uri uriAudioMedia = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
+ String[] cursorCols = new String[] {
+ MediaStore.Audio.Media._ID,
+ MediaStore.Audio.Media.ALBUM_ID,
+ };
Cursor cursor = null;
- Log.d(TAG, "Enter getArtHandleFromAlbum :" + albumName);
+ if (D) Log.d(TAG, "Enter getArtHandleFromAlbum :" + albumName);
try {
- cursor = mContext.getContentResolver().query(
- MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null,
- where, whereVal, orderBy);
- if (V) Log.v(TAG, "getArtHandleFromAlbum");
- if (cursor != null && cursor.moveToFirst()) {
- int mAlbumArtIndex = cursor.getColumnIndexOrThrow
- (MediaStore.Audio.Albums.ALBUM_ART);
- mArtPath = cursor.getString(mAlbumArtIndex);
- if (V) Log.v(TAG, "artPath = " + mArtPath);
- if (mArtPath != null)
- artHandle = mArtPath.substring(mArtPath.lastIndexOf("/") + 1);
- mAlbumId = cursor.getLong(0);
- if (V) Log.v(TAG, "albumId :" + mAlbumId + " artHandle :"
- + artHandle+" AlbumName :" + albumName);
+ cursor = mContext.getContentResolver().query(uriAudioMedia,
+ cursorCols, where, whereVal, orderBy);
+ mArtPath=""; mAlbumUriId=-1;
+ boolean isAlbumFound = false;
+ if ((cursor != null) && cursor.moveToFirst()) {
+ do {
+ mAlbumId = cursor.getLong(0);
+ String albumPath = getAlbumPath(mAlbumId);
+ if (!TextUtils.isEmpty(albumPath)) {
+ mArtPath = albumPath;
+ mAlbumUriId = cursor.getLong(1);
+ artHandle = mAlbumUriId + "";
+ isAlbumFound = true;
+ }
+ } while (!isAlbumFound && cursor.moveToNext());
}
+ if (V) Log.v(TAG, "albumId :" + mAlbumId + " artHandle :" + artHandle
+ + " mArtPath :" + mArtPath + " isAlbumFound: " + isAlbumFound);
} catch (IllegalArgumentException | SQLiteException e) {
Log.e(TAG, "getArtHandleFromAlbum: exception = " + e);
} finally {
@@ -306,6 +330,7 @@
AvrcpBipRspCoverArtAttributes coverArtAttributes = new AvrcpBipRspCoverArtAttributes();
coverArtAttributes.setAlbumId(mAlbumId);
coverArtAttributes.setArtPath(mArtPath);
+ coverArtAttributes.setAlbumUriId(mAlbumUriId);
if (V) Log.v(TAG,"getImgHandleFromArtHandle: storing artPath = " +
mArtPath + " and albumID = " + mAlbumId+ " for imgHandle = " +
imgHandle);
@@ -389,6 +414,7 @@
long albumId = artAttributes.getAlbumId();
String artPath = artAttributes.getArtPath();
+ long albumUriId = artAttributes.getAlbumUriId();
if (V) Log.v(TAG,"artPath = " + artPath);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
@@ -399,6 +425,7 @@
AvrcpBipRspCoverArtAttributes coverArtAttributes = new AvrcpBipRspCoverArtAttributes();
coverArtAttributes.setAlbumId(albumId);
coverArtAttributes.setArtPath(artPath);
+ coverArtAttributes.setAlbumUriId(albumUriId);
coverArtAttributes.setWidth(options.outWidth);
coverArtAttributes.setHeight(options.outHeight);
/*Get the cover art file size */
@@ -627,8 +654,9 @@
return false;
}
long albumId = mCoverArtAttributesMap.get(imgHandle).getAlbumId();
+ long albumUriId = mCoverArtAttributesMap.get(imgHandle).getAlbumUriId();
if (D) Log.d(TAG,"getImgThumb: getScaledBitmap albumId :" + albumId);
- Bitmap bm = getScaledBitmap(albumId, BIP_THUMB_WIDTH, BIP_THUMB_HEIGHT);
+ Bitmap bm = getScaledBitmap(albumUriId, BIP_THUMB_WIDTH, BIP_THUMB_HEIGHT);
if (D) Log.d(TAG,"getImgThumb: getScaledBitmap -");
FileOutputStream tmp = null;
FileInputStream tmp1 = null;
@@ -788,8 +816,9 @@
}
long albumId = mCoverArtAttributesMap.get(imgHandle).getAlbumId();
- if (D) Log.d(TAG,"getImg: getScaledBitmap +");
- Bitmap bm = getScaledBitmap(albumId, width, height);
+ long albumUriId = mCoverArtAttributesMap.get(imgHandle).getAlbumUriId();
+ if (D) Log.d(TAG,"getImg: getScaledBitmap albumId : "+albumId);
+ Bitmap bm = getScaledBitmap(albumUriId, width, height);
if (D) Log.d(TAG,"getImg: getScaledBitmap -");
if (bm != null) {
try {
@@ -907,7 +936,7 @@
String albumName = null;
Uri uri = Uri.parse("content://media/external/audio/media");
String[] mCursorCols = new String[] {
- "audio._id AS _id",
+ MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE,
};
@@ -997,4 +1026,24 @@
}
if (V) Log.v(TAG," delTmpFile :" + f.getAbsolutePath() + " isDeleted :" + isDeleted);
}
+
+ private String getAlbumPath(long albumId) {
+ String finalPath = "";
+ try {
+ if (TextUtils.isEmpty(basePath)) {
+ basePath = Environment.getExternalStorageDirectory().getPath() + File.separator
+ + Environment.DIRECTORY_MUSIC + File.separator + ".thumbnails" + File.separator;
+ }
+ String path = basePath + albumId + ".jpg";
+ File f = new File(path);
+ if (f.exists()) {
+ finalPath = new String(path);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (V) Log.v(TAG, " getAlbumPath finalPath " + finalPath);
+ return finalPath;
+ }
+
}