Public Audio playback capture must have a valid projection
For privacy, require the app wanting to capture other app audio to have
a valid MediaProjection.
Test: adb shell audiorecorder --target /data/file.raw
Bug: 111453086
Change-Id: Ia9343b2125aea2d9c0fc5a37b6ded9237d1d0f28
Signed-off-by: Kevin Rocard <krocard@google.com>
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 8ddf824..d31ce53 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -21,6 +21,7 @@
#include "TypeConverter.h"
#include <media/MediaAnalyticsItem.h>
#include <mediautils/ServiceUtilities.h>
+#include <media/AudioPolicy.h>
#include <utils/Log.h>
namespace android {
@@ -1032,9 +1033,14 @@
status_t AudioPolicyService::registerPolicyMixes(const Vector<AudioMix>& mixes, bool registration)
{
Mutex::Autolock _l(mLock);
- if(!modifyAudioRoutingAllowed()) {
+
+ // loopback|render only need a MediaProjection (checked in caller AudioService.java)
+ bool needModifyAudioRouting = std::any_of(mixes.begin(), mixes.end(), [](auto& mix) {
+ return !is_mix_loopback_render(mix.mRouteFlags); });
+ if (needModifyAudioRouting && !modifyAudioRoutingAllowed()) {
return PERMISSION_DENIED;
}
+
if (mAudioPolicyManager == NULL) {
return NO_INIT;
}