diff options
| author | 2020-04-14 14:14:02 +0200 | |
|---|---|---|
| committer | 2020-04-21 16:29:23 +0000 | |
| commit | 9704e1275af5840e38d61283955f09bc6879ca80 (patch) | |
| tree | bb4e98b5c05b8c07762c1e4de8ade98f0c2126cc | |
| parent | 094eafd471f0963a2e5341e4a5162928c3b18332 (diff) | |
AudioService: Focus: cleanup FocusOwner upon requestAudioFocus failure
When the focus is owned by an external audio policy, and when
a client's request fails, the FocusRequester dedicated Map is not
cleared.
As the client app may not call AudioManager#abandonAudioFocus (since
the requestAudioFocus failed), it leads to not only dumpsys side effects but
also it triggers upon client's focus binder died event, the call
of notifyExtFocusPolicyFocusAbandon_syncAf.
This CL fixes this issue by removing the FocusRequester when the request
fails, the same way it is already done on permanent loss of focus.
Test: build & boot
Signed-off-by: Francois Gaffie <francois.gaffie@renault.com>
Change-Id: I4d1b216b606c8f73c9b68353723284d9e178297d
| -rw-r--r-- | services/core/java/com/android/server/audio/MediaFocusControl.java | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/audio/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java index c845981fea7e..3ac37713a130 100644 --- a/services/core/java/com/android/server/audio/MediaFocusControl.java +++ b/services/core/java/com/android/server/audio/MediaFocusControl.java @@ -625,7 +625,12 @@ public class MediaFocusControl implements PlayerFocusEnforcer { return; } } - final FocusRequester fr = mFocusOwnersForFocusPolicy.get(afi.getClientId()); + final FocusRequester fr; + if (requestResult == AudioManager.AUDIOFOCUS_REQUEST_FAILED) { + fr = mFocusOwnersForFocusPolicy.remove(afi.getClientId()); + } else { + fr = mFocusOwnersForFocusPolicy.get(afi.getClientId()); + } if (fr != null) { fr.dispatchFocusResultFromExtPolicy(requestResult); } |