summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoboErik <epastern@google.com>2014-07-23 13:25:02 -0700
committerRoboErik <epastern@google.com>2014-07-23 13:25:02 -0700
commita259d35073ada384a5810f2a0f4f92f5fd27d85f (patch)
tree900641517c830dd1955e3e5ed30d2b2a1621d153
parent5320b04fe74f0120f84dd9fe09785491f42a766b (diff)
downloadframeworks_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.java9
-rw-r--r--media/java/android/media/session/MediaSessionLegacyHelper.java53
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) {