Audio policy: use new concurrent record bypass permission
Use either CAPTURE_AUDIO_OUTPUT or
BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION permission to allow
concurrent capture during calls. Use of CAPTURE_AUDIO_OUTPUT will be
removed once all system apps are updated.
Bug: 374751406
Test: make
Flag: android.media.audio.concurrent_audio_record_bypass_permission
Change-Id: I1adc9e6fa6b013cfd40e3c3f5559abd6802716ac
diff --git a/media/utils/ServiceUtilities.cpp b/media/utils/ServiceUtilities.cpp
index ddb93fe..ee0f2bc 100644
--- a/media/utils/ServiceUtilities.cpp
+++ b/media/utils/ServiceUtilities.cpp
@@ -291,6 +291,21 @@
return ok;
}
+bool bypassConcurrentPolicyAllowed(const AttributionSourceState& attributionSource) {
+ uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(attributionSource.uid));
+ uid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(attributionSource.pid));
+ if (isAudioServerOrRootUid(uid)) return true;
+ static const String16 sBypassConcurrentPolicy(
+ "android.permission.BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION ");
+ // Use PermissionChecker, which includes some logic for allowing the isolated
+ // HotwordDetectionService to hold certain permissions.
+ bool ok = PermissionCache::checkPermission(sBypassConcurrentPolicy, pid, uid);
+ if (!ok) {
+ ALOGV("Request requires android.permission.BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION");
+ }
+ return ok;
+}
+
bool accessUltrasoundAllowed(const AttributionSourceState& attributionSource) {
uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(attributionSource.uid));
uid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(attributionSource.pid));