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

Commit 632c8f93 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "audiomanager: fix orphan focus holder when using ext focus policy" into main

parents 0b6e9067 3e7f451e
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -4716,7 +4716,7 @@ public class AudioManager {
            focusReceiver = addClientIdToFocusReceiverLocked(clientFakeId);
        }

        return handleExternalAudioPolicyWaitIfNeeded(clientFakeId, focusReceiver);
        return handleExternalAudioPolicyWaitIfNeeded(clientFakeId, focusReceiver, afr);
    }

    /**
@@ -4929,7 +4929,7 @@ public class AudioManager {
            focusReceiver = addClientIdToFocusReceiverLocked(clientId);
        }

        return handleExternalAudioPolicyWaitIfNeeded(clientId, focusReceiver);
        return handleExternalAudioPolicyWaitIfNeeded(clientId, focusReceiver, afr);
    }

    @GuardedBy("mFocusRequestsLock")
@@ -4945,12 +4945,21 @@ public class AudioManager {
    }

    private @FocusRequestResult int handleExternalAudioPolicyWaitIfNeeded(String clientId,
            BlockingFocusResultReceiver focusReceiver) {
            BlockingFocusResultReceiver focusReceiver, @NonNull AudioFocusRequest afr) {
        focusReceiver.waitForResult(EXT_FOCUS_POLICY_TIMEOUT_MS);
        if (DEBUG && !focusReceiver.receivedResult()) {
        if (!focusReceiver.receivedResult()) {
            if (DEBUG) {
                Log.e(TAG, "handleExternalAudioPolicyWaitIfNeeded"
                        + " response from ext policy timed out, denying request");
            }
            try {
                // To prevent from orphan focus holder, cleanup
                abandonAudioFocus(afr.getOnAudioFocusChangeListener());
            } catch (Exception e) {
                Log.e(TAG, "handleExternalAudioPolicyWaitIfNeeded failed to abandon audio"
                        +" focus after time out, error: " + e.getMessage());
            }
        }

        synchronized (mFocusRequestsLock) {
            mFocusRequestsAwaitingResult.remove(clientId);