From c1adecd66a66fe7c9a56e421710d6587237f4da5 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Sat, 13 Apr 2019 17:11:50 -0700 Subject: [PATCH] AudioService: more stringent on dropping ACTION_AUDIO_BECOMING_NOISY Drop ACTION_AUDIO_BECOMING_NOISY only when there is no more audio focus users. Bug: 129983099 Test: see bug Change-Id: I899301754ba1506598b1be1cb5605bc3b53e3942 --- .../java/com/android/server/audio/AudioDeviceBroker.java | 4 ++++ .../java/com/android/server/audio/AudioDeviceInventory.java | 5 +++-- .../core/java/com/android/server/audio/AudioService.java | 4 ++++ .../java/com/android/server/audio/MediaFocusControl.java | 6 ++++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java index b7746477f0f8a..44c1715cfed54 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java +++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java @@ -406,6 +406,10 @@ import java.util.ArrayList; mAudioService.checkVolumeCecOnHdmiConnection(state, caller); } + /*package*/ boolean hasAudioFocusUsers() { + return mAudioService.hasAudioFocusUsers(); + } + //--------------------------------------------------------------------- // Message handling on behalf of helper classes /*package*/ void postBroadcastScoConnectionState(int state) { diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java index 7750bfefae05e..91b51b4989d83 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java +++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java @@ -819,11 +819,12 @@ public final class AudioDeviceInventory { if (((device == musicDevice) || mDeviceBroker.isInCommunication()) && (device == devices) && !mDeviceBroker.hasMediaDynamicPolicy() && ((musicDevice & AudioSystem.DEVICE_OUT_REMOTE_SUBMIX) == 0)) { - if (!AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, 0 /*not looking in past*/)) { + if (!AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, 0 /*not looking in past*/) + && !mDeviceBroker.hasAudioFocusUsers()) { // no media playback, not a "becoming noisy" situation, otherwise it could cause // the pausing of some apps that are playing remotely AudioService.sDeviceLogger.log((new AudioEventLogger.StringEvent( - "dropping ACTION_AUDIO_BECOMING_NOISY, no media playback")).printLog(TAG)); + "dropping ACTION_AUDIO_BECOMING_NOISY")).printLog(TAG)); return 0; } mDeviceBroker.postBroadcastBecomingNoisy(); diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index b6cc4f2cd631e..70af907f66a79 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5580,6 +5580,10 @@ public class AudioService extends IAudioService.Stub return mMediaFocusControl.getFocusRampTimeMs(focusGain, attr); } + /*package*/ boolean hasAudioFocusUsers() { + return mMediaFocusControl.hasAudioFocusUsers(); + } + //========================================================================================== private boolean readCameraSoundForced() { return SystemProperties.getBoolean("audio.camerasound.force", false) || diff --git a/services/core/java/com/android/server/audio/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java index 1e58b454a15b2..5c93071fd551e 100644 --- a/services/core/java/com/android/server/audio/MediaFocusControl.java +++ b/services/core/java/com/android/server/audio/MediaFocusControl.java @@ -162,6 +162,12 @@ public class MediaFocusControl implements PlayerFocusEnforcer { } } + /*package*/ boolean hasAudioFocusUsers() { + synchronized (mAudioFocusLock) { + return !mFocusStack.empty(); + } + } + /** * Discard the current audio focus owner. * Notify top of audio focus stack that it lost focus (regardless of possibility to reassign