diff options
| -rw-r--r-- | media/java/android/media/AudioService.java | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 62a263e1390e..59512297bbca 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -2749,6 +2749,18 @@ public class AudioService extends IAudioService.Stub { return AudioManager.AUDIOFOCUS_REQUEST_FAILED; } + // handle the potential premature death of the new holder of the focus + // (premature death == death before abandoning focus) + // Register for client death notification + AudioFocusDeathHandler afdh = new AudioFocusDeathHandler(cb); + try { + cb.linkToDeath(afdh, 0); + } catch (RemoteException e) { + // client has already died! + Log.w(TAG, "AudioFocus requestAudioFocus() could not link to "+cb+" binder death"); + return AudioManager.AUDIOFOCUS_REQUEST_FAILED; + } + if (!mFocusStack.empty() && mFocusStack.peek().mClientId.equals(clientId)) { // if focus is already owned by this client and the reason for acquiring the focus // hasn't changed, don't do anything @@ -2773,18 +2785,7 @@ public class AudioService extends IAudioService.Stub { } // focus requester might already be somewhere below in the stack, remove it - removeFocusStackEntry(clientId, false); - - // handle the potential premature death of the new holder of the focus - // (premature death == death before abandoning focus) - // Register for client death notification - AudioFocusDeathHandler afdh = new AudioFocusDeathHandler(cb); - try { - cb.linkToDeath(afdh, 0); - } catch (RemoteException e) { - // client has already died! - Log.w(TAG, "AudioFocus requestAudioFocus() could not link to "+cb+" binder death"); - } + removeFocusStackEntry(clientId, false /* signal */); // push focus requester at the top of the audio focus stack mFocusStack.push(new FocusStackEntry(mainStreamType, focusChangeHint, fd, cb, |