summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Francois Gaffie <francois.gaffie@renault.com> 2020-04-14 14:14:02 +0200
committer Eric Laurent <elaurent@google.com> 2020-04-21 16:29:23 +0000
commit9704e1275af5840e38d61283955f09bc6879ca80 (patch)
treebb4e98b5c05b8c07762c1e4de8ade98f0c2126cc
parent094eafd471f0963a2e5341e4a5162928c3b18332 (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.java7
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);
}