diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2011-09-14 18:11:09 -0700 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2011-09-16 12:40:43 -0700 |
commit | f0cff0456258478ba768097f73d4367ab67fd7a3 (patch) | |
tree | a8078a2ede31b08397230128d40de672cbf91744 /core/java/com/android/internal/widget/TransportControlView.java | |
parent | 34d0d300cac645b48cce5a1735f45e1102d4ef0e (diff) | |
download | frameworks_base-f0cff0456258478ba768097f73d4367ab67fd7a3.zip frameworks_base-f0cff0456258478ba768097f73d4367ab67fd7a3.tar.gz frameworks_base-f0cff0456258478ba768097f73d4367ab67fd7a3.tar.bz2 |
Bug 5300223 RemoteControlClient uses PendingIntent for media button events
Update the implementation of the RemoteControlClient / Display
feature rely on PendingIntent as provided in the construction
of the RemoteControlClient instance.
The ComponentName that describes the target of the media button
events is set as the target of the Intent from which
a PendingIntent is constructed.
This ComponentName is still saved in the stack for persisting
the last media button event receiver.
This CL also updates the lockscreen IRemoteControlDisplay
implementation to use the PendingIntent supplied by the
application when sending transport control events. A (good)
side effect of doing this is that intent will be directly
targeted at the application.
Restoration of the media button event receiver
after reboot is not fully functional yet.
Change-Id: I2be82f2839e9dee1de02512437b3fb41cc386cde
Diffstat (limited to 'core/java/com/android/internal/widget/TransportControlView.java')
-rw-r--r-- | core/java/com/android/internal/widget/TransportControlView.java | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/core/java/com/android/internal/widget/TransportControlView.java b/core/java/com/android/internal/widget/TransportControlView.java index 29ad15b..f9c2cce 100644 --- a/core/java/com/android/internal/widget/TransportControlView.java +++ b/core/java/com/android/internal/widget/TransportControlView.java @@ -21,6 +21,8 @@ import java.lang.ref.WeakReference; import com.android.internal.widget.LockScreenWidgetCallback; import com.android.internal.widget.LockScreenWidgetInterface; +import android.app.PendingIntent; +import android.app.PendingIntent.CanceledException; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -68,7 +70,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener private int mClientGeneration; private Metadata mMetadata = new Metadata(); private boolean mAttached; - private ComponentName mClientName; + private PendingIntent mClientIntent; private int mTransportControlFlags; private int mPlayState; private AudioManager mAudioManager; @@ -116,7 +118,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener } } mClientGeneration = msg.arg1; - mClientName = (ComponentName) msg.obj; + mClientIntent = (PendingIntent) msg.obj; break; } @@ -174,12 +176,12 @@ public class TransportControlView extends FrameLayout implements OnClickListener } } - public void setCurrentClientId(int clientGeneration, ComponentName clientEventReceiver, + public void setCurrentClientId(int clientGeneration, PendingIntent mediaIntent, boolean clearing) throws RemoteException { Handler handler = mLocalHandler.get(); if (handler != null) { handler.obtainMessage(MSG_SET_GENERATION_ID, - clientGeneration, (clearing ? 1 : 0), clientEventReceiver).sendToTarget(); + clientGeneration, (clearing ? 1 : 0), mediaIntent).sendToTarget(); } } }; @@ -365,16 +367,27 @@ public class TransportControlView extends FrameLayout implements OnClickListener } private void sendMediaButtonClick(int keyCode) { - // TODO: target to specific player based on mClientName + // use the registered PendingIntent that will be processed by the registered + // media button event receiver, which is the component of mClientIntent KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode); Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON); intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - getContext().sendOrderedBroadcast(intent, null); + try { + mClientIntent.send(getContext(), 0, intent); + } catch (CanceledException e) { + Log.e(TAG, "Error sending intent for media button down: "+e); + e.printStackTrace(); + } keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode); intent = new Intent(Intent.ACTION_MEDIA_BUTTON); intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - getContext().sendOrderedBroadcast(intent, null); + try { + mClientIntent.send(getContext(), 0, intent); + } catch (CanceledException e) { + Log.e(TAG, "Error sending intent for media button up: "+e); + e.printStackTrace(); + } } public void setCallback(LockScreenWidgetCallback callback) { |