diff options
author | RoboErik <epastern@google.com> | 2014-07-23 13:25:02 -0700 |
---|---|---|
committer | RoboErik <epastern@google.com> | 2014-07-23 13:25:02 -0700 |
commit | a259d35073ada384a5810f2a0f4f92f5fd27d85f (patch) | |
tree | 900641517c830dd1955e3e5ed30d2b2a1621d153 | |
parent | 5320b04fe74f0120f84dd9fe09785491f42a766b (diff) | |
download | frameworks_base-a259d35073ada384a5810f2a0f4f92f5fd27d85f.zip frameworks_base-a259d35073ada384a5810f2a0f4f92f5fd27d85f.tar.gz frameworks_base-a259d35073ada384a5810f2a0f4f92f5fd27d85f.tar.bz2 |
Return appropriately scaled artwork to RemoteController
RemoteController has an api to set the artwork size. This adds compatibility
code to do the exclusion or scaling of artwork to be consistent with old APIs.
bug:15618171
Change-Id: I8cc51750c03219d42d5f543419f8b46f9eb5b833
-rw-r--r-- | media/java/android/media/RemoteController.java | 9 | ||||
-rw-r--r-- | media/java/android/media/session/MediaSessionLegacyHelper.java | 53 |
2 files changed, 50 insertions, 12 deletions
diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index 966fbb0..1687864 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -397,12 +397,6 @@ import java.util.List; mArtworkWidth = -1; mArtworkHeight = -1; } - if (mIsRegistered) { - mAudioManager.remoteControlDisplayUsesBitmapSize(mRcd, - mArtworkWidth, mArtworkHeight); - } // else new values have been stored, and will be read by AudioManager with - // RemoteController.getArtworkSize() when AudioManager.registerRemoteController() - // is called. } return true; } @@ -1044,7 +1038,8 @@ import java.util.List; boolean canRate = mCurrentSession != null && mCurrentSession.getRatingType() != Rating.RATING_NONE; long editableKeys = canRate ? MediaMetadataEditor.RATING_KEY_BY_USER : 0; - Bundle legacyMetadata = MediaSessionLegacyHelper.getOldMetadata(metadata); + Bundle legacyMetadata = MediaSessionLegacyHelper.getOldMetadata(metadata, + mArtworkWidth, mArtworkHeight); mMetadataEditor = new MetadataEditor(legacyMetadata, editableKeys); metadataEditor = mMetadataEditor; } diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java index da1a6ed..a6963cf 100644 --- a/media/java/android/media/session/MediaSessionLegacyHelper.java +++ b/media/java/android/media/session/MediaSessionLegacyHelper.java @@ -21,6 +21,10 @@ import android.app.PendingIntent.CanceledException; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; import android.media.AudioManager; import android.media.MediaMetadata; import android.media.MediaMetadataEditor; @@ -73,19 +77,23 @@ public class MediaSessionLegacyHelper { return sInstance; } - public static Bundle getOldMetadata(MediaMetadata metadata) { + public static Bundle getOldMetadata(MediaMetadata metadata, int artworkWidth, + int artworkHeight) { + boolean includeArtwork = artworkWidth != -1 && artworkHeight != -1; Bundle oldMetadata = new Bundle(); if (metadata.containsKey(MediaMetadata.METADATA_KEY_ALBUM)) { oldMetadata.putString(String.valueOf(MediaMetadataRetriever.METADATA_KEY_ALBUM), metadata.getString(MediaMetadata.METADATA_KEY_ALBUM)); } - if (metadata.containsKey(MediaMetadata.METADATA_KEY_ART)) { + if (includeArtwork && metadata.containsKey(MediaMetadata.METADATA_KEY_ART)) { + Bitmap art = metadata.getBitmap(MediaMetadata.METADATA_KEY_ART); oldMetadata.putParcelable(String.valueOf(MediaMetadataEditor.BITMAP_KEY_ARTWORK), - metadata.getBitmap(MediaMetadata.METADATA_KEY_ART)); - } else if (metadata.containsKey(MediaMetadata.METADATA_KEY_ALBUM_ART)) { + scaleBitmapIfTooBig(art, artworkWidth, artworkHeight)); + } else if (includeArtwork && metadata.containsKey(MediaMetadata.METADATA_KEY_ALBUM_ART)) { // Fall back to album art if the track art wasn't available + Bitmap art = metadata.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART); oldMetadata.putParcelable(String.valueOf(MediaMetadataEditor.BITMAP_KEY_ARTWORK), - metadata.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART)); + scaleBitmapIfTooBig(art, artworkWidth, artworkHeight)); } if (metadata.containsKey(MediaMetadata.METADATA_KEY_ALBUM_ARTIST)) { oldMetadata.putString(String.valueOf(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST), @@ -322,6 +330,41 @@ public class MediaSessionLegacyHelper { } } + /** + * Scale a bitmap to fit the smallest dimension by uniformly scaling the + * incoming bitmap. If the bitmap fits, then do nothing and return the + * original. + * + * @param bitmap + * @param maxWidth + * @param maxHeight + * @return + */ + private static Bitmap scaleBitmapIfTooBig(Bitmap bitmap, int maxWidth, int maxHeight) { + if (bitmap != null) { + final int width = bitmap.getWidth(); + final int height = bitmap.getHeight(); + if (width > maxWidth || height > maxHeight) { + float scale = Math.min((float) maxWidth / width, (float) maxHeight / height); + int newWidth = Math.round(scale * width); + int newHeight = Math.round(scale * height); + Bitmap.Config newConfig = bitmap.getConfig(); + if (newConfig == null) { + newConfig = Bitmap.Config.ARGB_8888; + } + Bitmap outBitmap = Bitmap.createBitmap(newWidth, newHeight, newConfig); + Canvas canvas = new Canvas(outBitmap); + Paint paint = new Paint(); + paint.setAntiAlias(true); + paint.setFilterBitmap(true); + canvas.drawBitmap(bitmap, null, + new RectF(0, 0, outBitmap.getWidth(), outBitmap.getHeight()), paint); + bitmap = outBitmap; + } + } + return bitmap; + } + private SessionHolder getHolder(PendingIntent pi, boolean createIfMissing) { SessionHolder holder = mSessions.get(pi); if (holder == null && createIfMissing) { |