From 6e920e6dac11c3ebf6c0c19402934834e9e491bf Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Tue, 13 Sep 2011 17:48:43 -0700 Subject: [PATCH] Bug 5300223 RemoteControlClient uses PendingIntent API change so RemoteControlClient is given a PendingIntent in its constructor, which will be used for receiving media button events from remote controls. Leave the old constructors (but hidden) to not break current functionality until the AudioManager and AudioService implementations have been updated. Change-Id: Ifa12c8036c948931adc386a827dce2936788e1cd --- api/current.txt | 4 +- .../android/media/RemoteControlClient.java | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index 804a52485356f..6e1a3147826a9 100644 --- a/api/current.txt +++ b/api/current.txt @@ -10879,8 +10879,8 @@ package android.media { } public class RemoteControlClient { - ctor public RemoteControlClient(android.content.ComponentName); - ctor public RemoteControlClient(android.content.ComponentName, android.os.Looper); + ctor public RemoteControlClient(android.app.PendingIntent); + ctor public RemoteControlClient(android.app.PendingIntent, android.os.Looper); method public android.media.RemoteControlClient.MetadataEditor editMetadata(boolean); method public void setPlaybackState(int); method public void setTransportControlFlags(int); diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java index daa25e0e49465..f66f1b028e404 100644 --- a/media/java/android/media/RemoteControlClient.java +++ b/media/java/android/media/RemoteControlClient.java @@ -16,7 +16,9 @@ package android.media; +import android.app.PendingIntent; import android.content.ComponentName; +import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; @@ -203,6 +205,8 @@ public class RemoteControlClient public final static int FLAG_INFORMATION_REQUEST_ALBUM_ART = 1 << 3; /** + * @hide + * TODO remove after modifying known (internal) media apps using this API * Class constructor. * @param mediaButtonEventReceiver The receiver for the media button events. It needs to have * been registered with {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)} @@ -226,6 +230,8 @@ public class RemoteControlClient } /** + * @hide + * TODO remove after modifying known (internal) media apps using this API * Class constructor for a remote control client whose internal event handling * happens on a user-provided Looper. * @param mediaButtonEventReceiver The receiver for the media button events. It needs to have @@ -242,6 +248,56 @@ public class RemoteControlClient mEventHandler = new EventHandler(this, looper); } + /** + * Class constructor. + * @param mediaButtonIntent The intent that will be sent for the media button events sent + * by remote controls. + * This intent needs to have been constructed with the {@link Intent#ACTION_MEDIA_BUTTON} + * action, and have a component that will handle the intent (set with + * {@link Intent#setComponent(ComponentName)}) registered with + * {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)} + * before this new RemoteControlClient can itself be registered with + * {@link AudioManager#registerRemoteControlClient(RemoteControlClient)}. + * @see AudioManager#registerMediaButtonEventReceiver(ComponentName) + * @see AudioManager#registerRemoteControlClient(RemoteControlClient) + */ + public RemoteControlClient(PendingIntent mediaButtonIntent) { + // TODO implement using PendingIntent instead of ComponentName + mRcEventReceiver = null; + + Looper looper; + if ((looper = Looper.myLooper()) != null) { + mEventHandler = new EventHandler(this, looper); + } else if ((looper = Looper.getMainLooper()) != null) { + mEventHandler = new EventHandler(this, looper); + } else { + mEventHandler = null; + Log.e(TAG, "RemoteControlClient() couldn't find main application thread"); + } + } + + /** + * Class constructor for a remote control client whose internal event handling + * happens on a user-provided Looper. + * @param mediaButtonIntent The intent that will be sent for the media button events sent + * by remote controls. + * This intent needs to have been constructed with the {@link Intent#ACTION_MEDIA_BUTTON} + * action, and have a component that will handle the intent (set with + * {@link Intent#setComponent(ComponentName)}) registered with + * {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)} + * before this new RemoteControlClient can itself be registered with + * {@link AudioManager#registerRemoteControlClient(RemoteControlClient)}. + * @param looper The Looper running the event loop. + * @see AudioManager#registerMediaButtonEventReceiver(ComponentName) + * @see AudioManager#registerRemoteControlClient(RemoteControlClient) + */ + public RemoteControlClient(PendingIntent mediaButtonIntent, Looper looper) { + // TODO implement using PendingIntent instead of ComponentName + mRcEventReceiver = null; + + mEventHandler = new EventHandler(this, looper); + } + private static final int[] METADATA_KEYS_TYPE_STRING = { MediaMetadataRetriever.METADATA_KEY_ALBUM, MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST,