diff options
| author | 2025-03-05 15:18:47 -0800 | |
|---|---|---|
| committer | 2025-03-05 15:18:47 -0800 | |
| commit | ede91dfc472b36e5b7ee8a7ba6f25094a7af6fd9 (patch) | |
| tree | 13cf543a8c13d33292a15ea4646658329e0d01ff | |
| parent | 9aae943b89d8f2f6787936c34039e739336340fc (diff) | |
| parent | 632c8f9393070b82fb0c44223c6040919aef9b44 (diff) | |
Merge "audiomanager: fix orphan focus holder when using ext focus policy" into main am: 632c8f9393
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3527210
Change-Id: If663a49307b65ef24f75b5ad12b943de81e5a4b6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | media/java/android/media/AudioManager.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 9beeef4c160f..c9d4966c2725 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -4751,7 +4751,7 @@ public class AudioManager { focusReceiver = addClientIdToFocusReceiverLocked(clientFakeId); } - return handleExternalAudioPolicyWaitIfNeeded(clientFakeId, focusReceiver); + return handleExternalAudioPolicyWaitIfNeeded(clientFakeId, focusReceiver, afr); } /** @@ -4964,7 +4964,7 @@ public class AudioManager { focusReceiver = addClientIdToFocusReceiverLocked(clientId); } - return handleExternalAudioPolicyWaitIfNeeded(clientId, focusReceiver); + return handleExternalAudioPolicyWaitIfNeeded(clientId, focusReceiver, afr); } @GuardedBy("mFocusRequestsLock") @@ -4980,11 +4980,20 @@ 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()) { - Log.e(TAG, "handleExternalAudioPolicyWaitIfNeeded" - + " response from ext policy timed out, denying request"); + 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) { |