diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 47a1ec36fe25c..47e2da2f38ec6 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -1437,6 +1437,11 @@ public class AudioManager { */ public int requestAudioFocus(OnAudioFocusChangeListener l, int streamType, int durationHint) { int status = AUDIOFOCUS_REQUEST_FAILED; + if ((durationHint < AUDIOFOCUS_GAIN) || (durationHint > AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)) + { + Log.e(TAG, "Invalid duration hint, audio focus request denied"); + return status; + } registerAudioFocusListener(l); //TODO protect request by permission check? IAudioService service = getService(); diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 74e6157ac23b4..2b7683ad3a1c1 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -2063,6 +2063,9 @@ public class AudioService extends IAudioService.Stub { } } + // focus requester might already be somewhere below in the stack, remove it + removeFocusStackEntry(clientId, false); + // push focus requester at the top of the audio focus stack mFocusStack.push(new FocusStackEntry(mainStreamType, focusChangeHint, false, fd, cb, clientId)); @@ -2215,7 +2218,7 @@ public class AudioService extends IAudioService.Stub { /** see AudioManager.unregisterMediaButtonEventReceiver(ComponentName eventReceiver) */ public void unregisterMediaButtonEventReceiver(ComponentName eventReceiver) { - Log.i(TAG, " Remote Control registerMediaButtonEventReceiver() for " + eventReceiver); + Log.i(TAG, " Remote Control unregisterMediaButtonEventReceiver() for " + eventReceiver); synchronized(mRCStack) { removeMediaButtonReceiver(eventReceiver);