From b839b83c7349533b4cb7278fd3d792b47199ba36 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Sat, 30 Mar 2013 14:17:45 -0700 Subject: [PATCH] Clean up role of component name in media button event receiver A public API was added to AudioManager to register a media button event receiver whithout having to supply a ComponentName. This CL updates the comments that specified that the now optional ComponentName parameter can be null, and never persist the button event receiver is there is no ComponentName to persist. Also unregistering the media button receiver makes no use of the ComponentName anymore. Change-Id: Idcfed1e2a85feb6fa178ca7797427f238705957c --- media/java/android/media/AudioManager.java | 8 ++++---- media/java/android/media/AudioService.java | 18 ++++++++++++------ media/java/android/media/IAudioService.aidl | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 6f284f8f0b0a1..0f160ceb706a5 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -2127,7 +2127,7 @@ public class AudioManager { mediaButtonIntent.setComponent(eventReceiver); PendingIntent pi = PendingIntent.getBroadcast(mContext, 0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/); - unregisterMediaButtonIntent(pi, eventReceiver); + unregisterMediaButtonIntent(pi); } /** @@ -2139,16 +2139,16 @@ public class AudioManager { if (eventReceiver == null) { return; } - unregisterMediaButtonIntent(eventReceiver, null); + unregisterMediaButtonIntent(eventReceiver); } /** * @hide */ - public void unregisterMediaButtonIntent(PendingIntent pi, ComponentName eventReceiver) { + public void unregisterMediaButtonIntent(PendingIntent pi) { IAudioService service = getService(); try { - service.unregisterMediaButtonIntent(pi, eventReceiver); + service.unregisterMediaButtonIntent(pi); } catch (RemoteException e) { Log.e(TAG, "Dead object in unregisterMediaButtonIntent"+e); } diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 9ded92250edb9..c402ea7518c67 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -5100,7 +5100,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished { mRemoteVolumeObs = null; } - /** precondition: mediaIntent != null, eventReceiver != null */ + /** precondition: mediaIntent != null */ public RemoteControlStackEntry(PendingIntent mediaIntent, ComponentName eventReceiver) { mMediaIntent = mediaIntent; mReceiverComponent = eventReceiver; @@ -5273,6 +5273,10 @@ public class AudioService extends IAudioService.Stub implements OnFinished { Settings.System.MEDIA_BUTTON_RECEIVER, UserHandle.USER_CURRENT); if ((null != receiverName) && !receiverName.isEmpty()) { ComponentName eventReceiver = ComponentName.unflattenFromString(receiverName); + if (eventReceiver == null) { + // an invalid name was persisted + return; + } // construct a PendingIntent targeted to the restored component name // for the media button and register it Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); @@ -5288,7 +5292,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished { * Helper function: * Set the new remote control receiver at the top of the RC focus stack. * Called synchronized on mAudioFocusLock, then mRCStack - * precondition: mediaIntent != null, target != null + * precondition: mediaIntent != null */ private void pushMediaButtonReceiver_syncAfRcs(PendingIntent mediaIntent, ComponentName target) { // already at top of stack? @@ -5317,8 +5321,10 @@ public class AudioService extends IAudioService.Stub implements OnFinished { mRCStack.push(rcse); // rcse is never null // post message to persist the default media button receiver - mAudioHandler.sendMessage( mAudioHandler.obtainMessage( - MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, target/*obj*/) ); + if (target != null) { + mAudioHandler.sendMessage( mAudioHandler.obtainMessage( + MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, target/*obj*/) ); + } } /** @@ -5618,7 +5624,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished { /** * see AudioManager.registerMediaButtonIntent(PendingIntent pi, ComponentName c) - * precondition: mediaIntent != null, target != null + * precondition: mediaIntent != null */ public void registerMediaButtonIntent(PendingIntent mediaIntent, ComponentName eventReceiver) { Log.i(TAG, " Remote Control registerMediaButtonIntent() for " + mediaIntent); @@ -5636,7 +5642,7 @@ public class AudioService extends IAudioService.Stub implements OnFinished { * see AudioManager.unregisterMediaButtonIntent(PendingIntent mediaIntent) * precondition: mediaIntent != null, eventReceiver != null */ - public void unregisterMediaButtonIntent(PendingIntent mediaIntent, ComponentName eventReceiver) + public void unregisterMediaButtonIntent(PendingIntent mediaIntent) { Log.i(TAG, " Remote Control unregisterMediaButtonIntent() for " + mediaIntent); diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index e21b26bf58024..270c26dc8c7dc 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -121,7 +121,7 @@ interface IAudioService { void dispatchMediaKeyEventUnderWakelock(in KeyEvent keyEvent); void registerMediaButtonIntent(in PendingIntent pi, in ComponentName c); - oneway void unregisterMediaButtonIntent(in PendingIntent pi, in ComponentName c); + oneway void unregisterMediaButtonIntent(in PendingIntent pi); oneway void registerMediaButtonEventReceiverForCalls(in ComponentName c); oneway void unregisterMediaButtonEventReceiverForCalls();