Merge "APM: Add a test to prevent regressions like one from aosp/3020124" into main
diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp
index dcfef45..d511dc2 100644
--- a/media/libaudioclient/AudioSystem.cpp
+++ b/media/libaudioclient/AudioSystem.cpp
@@ -985,6 +985,8 @@
// TODO(b/375280520) consider registerClient() within mMutex lock.
const int64_t token = IPCThreadState::self()->clearCallingIdentity();
aps->registerClient(client);
+ aps->setAudioPortCallbacksEnabled(client->isAudioPortCbEnabled());
+ aps->setAudioVolumeGroupCallbacksEnabled(client->isAudioVolumeGroupCbEnabled());
IPCThreadState::self()->restoreCallingIdentity(token);
}
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 802ebeb..4e8e742 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -445,9 +445,18 @@
}
if (strlen(attr.tags) != 0) {
- if (!(audioserver_permissions() ?
- CHECK_PERM(MODIFY_AUDIO_SETTINGS_PRIVILEGED, attributionSource.uid)
- : modifyAudioSettingsPrivilegedAllowed(attributionSource))) {
+ const bool audioAttributesTagsAllowed = audioserver_permissions() ? (
+ CHECK_PERM(MODIFY_AUDIO_SETTINGS_PRIVILEGED, attributionSource.uid) ||
+ CHECK_PERM(MODIFY_AUDIO_ROUTING, attributionSource.uid) ||
+ CHECK_PERM(CALL_AUDIO_INTERCEPTION, attributionSource.uid) ||
+ CHECK_PERM(CAPTURE_MEDIA_OUTPUT, attributionSource.uid) ||
+ CHECK_PERM(CAPTURE_VOICE_COMMUNICATION_OUTPUT, attributionSource.uid))
+ : (modifyAudioSettingsPrivilegedAllowed(attributionSource) ||
+ modifyAudioRoutingAllowed() ||
+ callAudioInterceptionAllowed(attributionSource) ||
+ captureMediaOutputAllowed(attributionSource) ||
+ captureVoiceCommunicationOutputAllowed(attributionSource));
+ if (!audioAttributesTagsAllowed) {
ALOGE("%s: permission denied: audio attributes tags not allowed for uid %d pid %d",
__func__, attributionSource.uid, attributionSource.pid);
return binderStatusFromStatusT(PERMISSION_DENIED);