diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2013-09-29 12:08:25 -0700 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2013-09-29 12:17:13 -0700 |
commit | 8ab8c2d06185dfefb5c69e614271f684e77eef63 (patch) | |
tree | 9c995ee1dcdb539e253b63945fc2c43f3604492e | |
parent | 33ed738d49dce3af5851d0566739e9ed593057a5 (diff) | |
download | frameworks_base-8ab8c2d06185dfefb5c69e614271f684e77eef63.zip frameworks_base-8ab8c2d06185dfefb5c69e614271f684e77eef63.tar.gz frameworks_base-8ab8c2d06185dfefb5c69e614271f684e77eef63.tar.bz2 |
Cache RemoteController artwork bitmap size, use it in registration
Allow an app to set the artwork configuration at any point
regardless of the registration state, and cache the width/height
values.
If the RemoteController is already registered, apply them.
If the RemoteController is not registered, use the cached value
when the object gets registered.
Bug 10862527
Change-Id: If633e2b9383e7d59690288d2271113e98b195cd8
-rw-r--r-- | media/java/android/media/AudioManager.java | 5 | ||||
-rw-r--r-- | media/java/android/media/RemoteController.java | 50 |
2 files changed, 35 insertions, 20 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 1941859..c8ee5ad 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -2281,10 +2281,9 @@ public class AudioManager { } IAudioService service = getService(); try { + int[] artworkDimensions = rctlr.getArtworkSize(); boolean reg = service.registerRemoteControlDisplay(rctlr.getRcDisplay(), - // passing a negative value for art work width and height - // as they are still unknown at this stage - /*w*/-1, /*h*/ -1); + artworkDimensions[0]/*w*/, artworkDimensions[1]/*h*/); rctlr.setIsRegistered(reg); return reg; } catch (RemoteException e) { diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index 10e1c70..96f6a92 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -74,6 +74,8 @@ public final class RemoteController private OnClientUpdateListener mOnClientUpdateListener; private PlaybackInfo mLastPlaybackInfo; private int mLastTransportControlFlags = TRANSPORT_UNKNOWN; + private int mArtworkWidth = -1; + private int mArtworkHeight = -1; /** * Class constructor. @@ -290,7 +292,6 @@ public final class RemoteController /** * @hide - * must be called on a registered RemoteController * @param wantBitmap * @param width * @param height @@ -298,22 +299,26 @@ public final class RemoteController */ public int setArtworkConfiguration(boolean wantBitmap, int width, int height) { synchronized (mInfoLock) { - if (!mIsRegistered) { - Log.e(TAG, "Cannot specify bitmap configuration on unregistered RemoteController"); - return ERROR; - } - } - if (wantBitmap) { - if ((width > 0) && (height > 0)) { - if (width > MAX_BITMAP_DIMENSION) { width = MAX_BITMAP_DIMENSION; } - if (height > MAX_BITMAP_DIMENSION) { height = MAX_BITMAP_DIMENSION; } - mAudioManager.remoteControlDisplayUsesBitmapSize(mRcd, width, height); + if (wantBitmap) { + if ((width > 0) && (height > 0)) { + if (width > MAX_BITMAP_DIMENSION) { width = MAX_BITMAP_DIMENSION; } + if (height > MAX_BITMAP_DIMENSION) { height = MAX_BITMAP_DIMENSION; } + mArtworkWidth = width; + mArtworkHeight = height; + } else { + Log.e(TAG, "Invalid dimensions"); + return ERROR_BAD_VALUE; + } } else { - Log.e(TAG, "Invalid dimensions"); - return ERROR_BAD_VALUE; + mArtworkWidth = -1; + mArtworkHeight = -1; } - } else { - mAudioManager.remoteControlDisplayUsesBitmapSize(mRcd, -1, -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 SUCCESS; } @@ -321,7 +326,6 @@ public final class RemoteController /** * Set the maximum artwork image dimensions to be received in the metadata. * No bitmaps will be received unless this has been specified. - * This method can only be called on a registered RemoteController. * @param width the maximum width in pixels * @param height the maximum height in pixels * @return {@link #SUCCESS}, {@link #ERROR} or {@link #ERROR_BAD_VALUE} @@ -332,7 +336,6 @@ public final class RemoteController /** * Prevents this RemoteController from receiving artwork images. - * This method can only be called on a registered RemoteController. * @return {@link #SUCCESS}, {@link #ERROR} */ public int clearArtworkConfiguration() { @@ -767,4 +770,17 @@ public final class RemoteController protected RcDisplay getRcDisplay() { return mRcd; } + + /** + * @hide + * Used by AudioManager to read the current artwork dimension + * @return array containing width (index 0) and height (index 1) of currently set artwork size + */ + protected int[] getArtworkSize() { + synchronized (mInfoLock) { + int[] size = { mArtworkWidth, mArtworkHeight }; + return size; + } + } + } |