Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fa7aac8 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Android (Google) Code Review
Browse files

Merge "Fix bug 40640864 Use a death handler on audio focus changes from mode" into honeycomb-mr1

parents 7ad85eb6 382f4e6e
Loading
Loading
Loading
Loading
+17 −21
Original line number Diff line number Diff line
@@ -805,7 +805,7 @@ public class AudioService extends IAudioService.Stub {
            if (mode != mMode) {

                // automatically handle audio focus for mode changes
                handleFocusForCalls(mMode, mode);
                handleFocusForCalls(mMode, mode, cb);

                if (AudioSystem.setPhoneState(mode) == AudioSystem.AUDIO_STATUS_OK) {
                    mMode = mode;
@@ -864,7 +864,7 @@ public class AudioService extends IAudioService.Stub {
    }

    /** pre-condition: oldMode != newMode */
    private void handleFocusForCalls(int oldMode, int newMode) {
    private void handleFocusForCalls(int oldMode, int newMode, IBinder cb) {
        // if ringing
        if (newMode == AudioSystem.MODE_RINGTONE) {
            // if not ringing silently
@@ -872,8 +872,8 @@ public class AudioService extends IAudioService.Stub {
            if (ringVolume > 0) {
                // request audio focus for the communication focus entry
                requestAudioFocus(AudioManager.STREAM_RING,
                        AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
                        null, null /* both allowed to be null only for this clientId */,
                        AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, cb,
                        null /* IAudioFocusDispatcher allowed to be null only for this clientId */,
                        IN_VOICE_COMM_FOCUS_ID /*clientId*/);

            }
@@ -884,8 +884,8 @@ public class AudioService extends IAudioService.Stub {
            // request audio focus for the communication focus entry
            // (it's ok if focus was already requested during ringing)
            requestAudioFocus(AudioManager.STREAM_RING,
                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
                    null, null /* both allowed to be null only for this clientId */,
                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, cb,
                    null /* IAudioFocusDispatcher allowed to be null only for this clientId */,
                    IN_VOICE_COMM_FOCUS_ID /*clientId*/);
        }
        // if exiting call
@@ -2547,10 +2547,9 @@ public class AudioService extends IAudioService.Stub {
        // the main stream type for the audio focus request is currently not used. It may
        // potentially be used to handle multiple stream type-dependent audio focuses.

        // we need a valid binder callback for clients other than the AudioService's phone
        // state listener
        if (!IN_VOICE_COMM_FOCUS_ID.equals(clientId) && ((cb == null) || !cb.pingBinder())) {
            Log.i(TAG, " AudioFocus  DOA client for requestAudioFocus(), exiting");
        // we need a valid binder callback for clients
        if (!cb.pingBinder()) {
            Log.e(TAG, " AudioFocus DOA client for requestAudioFocus(), aborting.");
            return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
        }

@@ -2591,9 +2590,7 @@ public class AudioService extends IAudioService.Stub {
        }//synchronized(mAudioFocusLock)

        // handle the potential premature death of the new holder of the focus
        // (premature death == death before abandoning focus) for a client which is not the
        // AudioService's phone state listener
        if (!IN_VOICE_COMM_FOCUS_ID.equals(clientId)) {
        // (premature death == death before abandoning focus)
        // Register for client death notification
        AudioFocusDeathHandler afdh = new AudioFocusDeathHandler(cb);
        try {
@@ -2602,7 +2599,6 @@ public class AudioService extends IAudioService.Stub {
            // client has already died!
            Log.w(TAG, "AudioFocus  requestAudioFocus() could not link to "+cb+" binder death");
        }
        }

        return AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
    }