Loading aidl/com/android/media/permission/PermissionEnum.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -37,5 +37,6 @@ enum PermissionEnum { CAPTURE_TUNER_AUDIO_INPUT = 11, CAPTURE_VOICE_COMMUNICATION_OUTPUT = 12, BLUETOOTH_CONNECT = 13, ENUM_SIZE = 14, // Not for actual usage, used by Java BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION = 14, ENUM_SIZE = 15, // Not for actual usage, used by Java } media/utils/ServiceUtilities.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -291,6 +291,21 @@ bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attrib 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)); Loading media/utils/include/mediautils/ServiceUtilities.h +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ bool captureAudioOutputAllowed(const AttributionSourceState& attributionSource); bool captureMediaOutputAllowed(const AttributionSourceState& attributionSource); bool captureTunerAudioInputAllowed(const AttributionSourceState& attributionSource); bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attributionSource); bool bypassConcurrentPolicyAllowed(const AttributionSourceState& attributionSource) ; bool accessUltrasoundAllowed(const AttributionSourceState& attributionSource); bool captureHotwordAllowed(const AttributionSourceState& attributionSource); bool settingsAllowed(); Loading services/audiopolicy/service/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ cc_defaults { ], shared_libs: [ "android.media.audio-aconfig-cc", "android.media.audiopolicy-aconfig-cc", "audio-permission-aidl-cpp", "audioclient-types-aidl-cpp", Loading services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <android/content/AttributionSourceState.h> #include <android_media_audiopolicy.h> #include <android_media_audio.h> #include <com_android_media_audio.h> #include <cutils/properties.h> #include <error/expected_utils.h> Loading Loading @@ -56,6 +57,7 @@ namespace android { namespace audiopolicy_flags = android::media::audiopolicy; using binder::Status; using aidl_utils::binderStatusFromStatusT; using android::media::audio::concurrent_audio_record_bypass_permission; using com::android::media::audio::audioserver_permissions; using com::android::media::permission::NativePermissionController; using com::android::media::permission::PermissionEnum::ACCESS_ULTRASOUND; Loading @@ -71,6 +73,7 @@ using com::android::media::permission::PermissionEnum::MODIFY_DEFAULT_AUDIO_EFFE using com::android::media::permission::PermissionEnum::MODIFY_PHONE_STATE; using com::android::media::permission::PermissionEnum::RECORD_AUDIO; using com::android::media::permission::PermissionEnum::WRITE_SECURE_SETTINGS; using com::android::media::permission::PermissionEnum::BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION; using content::AttributionSourceState; using media::audio::common::AudioConfig; using media::audio::common::AudioConfigBase; Loading Loading @@ -734,6 +737,17 @@ Status AudioPolicyService::getInputForAttr(const media::audio::common::AudioAttr bool canCaptureOutput = audioserver_permissions() ? CHECK_PERM(CAPTURE_AUDIO_OUTPUT, attributionSource.uid) : captureAudioOutputAllowed(attributionSource); //TODO(b/374751406): remove forcing canBypassConcurrentPolicy to canCaptureOutput // once all system apps using CAPTURE_AUDIO_OUTPUT to capture during calls // are updated to use the new CONCURRENT_AUDIO_RECORD_BYPASS permission. bool canBypassConcurrentPolicy = canCaptureOutput; if (concurrent_audio_record_bypass_permission()) { canBypassConcurrentPolicy = audioserver_permissions() ? CHECK_PERM(BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION, attributionSource.uid) : bypassConcurrentPolicyAllowed(attributionSource); } bool canInterceptCallAudio = audioserver_permissions() ? CHECK_PERM(CALL_AUDIO_INTERCEPTION, attributionSource.uid) : callAudioInterceptionAllowed(attributionSource); Loading Loading @@ -874,7 +888,8 @@ Status AudioPolicyService::getInputForAttr(const media::audio::common::AudioAttr sp<AudioRecordClient> client = new AudioRecordClient(attr, input, session, portId, selectedDeviceIds, attributionSource, virtualDeviceId, canCaptureOutput, canCaptureHotword, canBypassConcurrentPolicy, canCaptureHotword, mOutputCommandThread); mAudioRecordClients.add(portId, client); } Loading Loading
aidl/com/android/media/permission/PermissionEnum.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -37,5 +37,6 @@ enum PermissionEnum { CAPTURE_TUNER_AUDIO_INPUT = 11, CAPTURE_VOICE_COMMUNICATION_OUTPUT = 12, BLUETOOTH_CONNECT = 13, ENUM_SIZE = 14, // Not for actual usage, used by Java BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION = 14, ENUM_SIZE = 15, // Not for actual usage, used by Java }
media/utils/ServiceUtilities.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -291,6 +291,21 @@ bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attrib 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)); Loading
media/utils/include/mediautils/ServiceUtilities.h +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ bool captureAudioOutputAllowed(const AttributionSourceState& attributionSource); bool captureMediaOutputAllowed(const AttributionSourceState& attributionSource); bool captureTunerAudioInputAllowed(const AttributionSourceState& attributionSource); bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attributionSource); bool bypassConcurrentPolicyAllowed(const AttributionSourceState& attributionSource) ; bool accessUltrasoundAllowed(const AttributionSourceState& attributionSource); bool captureHotwordAllowed(const AttributionSourceState& attributionSource); bool settingsAllowed(); Loading
services/audiopolicy/service/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ cc_defaults { ], shared_libs: [ "android.media.audio-aconfig-cc", "android.media.audiopolicy-aconfig-cc", "audio-permission-aidl-cpp", "audioclient-types-aidl-cpp", Loading
services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <android/content/AttributionSourceState.h> #include <android_media_audiopolicy.h> #include <android_media_audio.h> #include <com_android_media_audio.h> #include <cutils/properties.h> #include <error/expected_utils.h> Loading Loading @@ -56,6 +57,7 @@ namespace android { namespace audiopolicy_flags = android::media::audiopolicy; using binder::Status; using aidl_utils::binderStatusFromStatusT; using android::media::audio::concurrent_audio_record_bypass_permission; using com::android::media::audio::audioserver_permissions; using com::android::media::permission::NativePermissionController; using com::android::media::permission::PermissionEnum::ACCESS_ULTRASOUND; Loading @@ -71,6 +73,7 @@ using com::android::media::permission::PermissionEnum::MODIFY_DEFAULT_AUDIO_EFFE using com::android::media::permission::PermissionEnum::MODIFY_PHONE_STATE; using com::android::media::permission::PermissionEnum::RECORD_AUDIO; using com::android::media::permission::PermissionEnum::WRITE_SECURE_SETTINGS; using com::android::media::permission::PermissionEnum::BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION; using content::AttributionSourceState; using media::audio::common::AudioConfig; using media::audio::common::AudioConfigBase; Loading Loading @@ -734,6 +737,17 @@ Status AudioPolicyService::getInputForAttr(const media::audio::common::AudioAttr bool canCaptureOutput = audioserver_permissions() ? CHECK_PERM(CAPTURE_AUDIO_OUTPUT, attributionSource.uid) : captureAudioOutputAllowed(attributionSource); //TODO(b/374751406): remove forcing canBypassConcurrentPolicy to canCaptureOutput // once all system apps using CAPTURE_AUDIO_OUTPUT to capture during calls // are updated to use the new CONCURRENT_AUDIO_RECORD_BYPASS permission. bool canBypassConcurrentPolicy = canCaptureOutput; if (concurrent_audio_record_bypass_permission()) { canBypassConcurrentPolicy = audioserver_permissions() ? CHECK_PERM(BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION, attributionSource.uid) : bypassConcurrentPolicyAllowed(attributionSource); } bool canInterceptCallAudio = audioserver_permissions() ? CHECK_PERM(CALL_AUDIO_INTERCEPTION, attributionSource.uid) : callAudioInterceptionAllowed(attributionSource); Loading Loading @@ -874,7 +888,8 @@ Status AudioPolicyService::getInputForAttr(const media::audio::common::AudioAttr sp<AudioRecordClient> client = new AudioRecordClient(attr, input, session, portId, selectedDeviceIds, attributionSource, virtualDeviceId, canCaptureOutput, canCaptureHotword, canBypassConcurrentPolicy, canCaptureHotword, mOutputCommandThread); mAudioRecordClients.add(portId, client); } Loading