Add attributionTag to audio-recordings
... by replacing packageName/uid/pid by the Identity class.
This allows us to track which parts of the app trigger audio-recordings.
90% of the code is just sending around the additional parameters.
This adds it for the Java and native API.
Test: atest CtsAppOpsTestCases
CtsNativeMediaAAudioTestCases
Fixes: 160150145
Change-Id: Ibd7b884f7fcd4668a4e27f997e59cfc3217a9e89
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index a11b2cc..15846ec 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -38,6 +38,8 @@
#include "CaptureStateNotifier.h"
#include <AudioPolicyInterface.h>
#include <android/hardware/BnSensorPrivacyListener.h>
+#include <android/media/permission/Identity.h>
+
#include <unordered_map>
namespace android {
@@ -79,15 +81,16 @@
media::AudioPolicyForcedConfig* _aidl_return) override;
binder::Status getOutput(media::AudioStreamType stream, int32_t* _aidl_return) override;
binder::Status getOutputForAttr(const media::AudioAttributesInternal& attr, int32_t session,
- int32_t pid, int32_t uid, const media::AudioConfig& config,
+ const media::permission::Identity &identity,
+ const media::AudioConfig& config,
int32_t flags, int32_t selectedDeviceId,
media::GetOutputForAttrResponse* _aidl_return) override;
binder::Status startOutput(int32_t portId) override;
binder::Status stopOutput(int32_t portId) override;
binder::Status releaseOutput(int32_t portId) override;
binder::Status getInputForAttr(const media::AudioAttributesInternal& attr, int32_t input,
- int32_t riid, int32_t session, int32_t pid, int32_t uid,
- const std::string& opPackageName,
+ int32_t riid, int32_t session,
+ const media::permission::Identity &identity,
const media::AudioConfigBase& config, int32_t flags,
int32_t selectedDeviceId,
media::GetInputForAttrResponse* _aidl_return) override;
@@ -339,7 +342,7 @@
bool isSupportedSystemUsage(audio_usage_t usage);
status_t validateUsage(audio_usage_t usage);
- status_t validateUsage(audio_usage_t usage, pid_t pid, uid_t uid);
+ status_t validateUsage(audio_usage_t usage, const media::permission::Identity& identity);
bool isUserSensorPrivacyEnabledForUid(uid_t uid);
@@ -784,18 +787,18 @@
class AudioClient : public virtual RefBase {
public:
AudioClient(const audio_attributes_t attributes,
- const audio_io_handle_t io, uid_t uid, pid_t pid,
+ const audio_io_handle_t io,
+ const media::permission::Identity& identity,
const audio_session_t session, audio_port_handle_t portId,
const audio_port_handle_t deviceId) :
- attributes(attributes), io(io), uid(uid), pid(pid),
+ attributes(attributes), io(io), identity(identity),
session(session), portId(portId), deviceId(deviceId), active(false) {}
~AudioClient() override = default;
const audio_attributes_t attributes; // source, flags ...
const audio_io_handle_t io; // audio HAL stream IO handle
- const uid_t uid; // client UID
- const pid_t pid; // client PID
+ const media::permission::Identity& identity; //client identity
const audio_session_t session; // audio session ID
const audio_port_handle_t portId;
const audio_port_handle_t deviceId; // selected input device port ID
@@ -808,16 +811,17 @@
class AudioRecordClient : public AudioClient {
public:
AudioRecordClient(const audio_attributes_t attributes,
- const audio_io_handle_t io, uid_t uid, pid_t pid,
+ const audio_io_handle_t io,
const audio_session_t session, audio_port_handle_t portId,
- const audio_port_handle_t deviceId, const String16& opPackageName,
+ const audio_port_handle_t deviceId,
+ const media::permission::Identity& identity,
bool canCaptureOutput, bool canCaptureHotword) :
- AudioClient(attributes, io, uid, pid, session, portId, deviceId),
- opPackageName(opPackageName), startTimeNs(0),
+ AudioClient(attributes, io, identity,
+ session, portId, deviceId), identity(identity), startTimeNs(0),
canCaptureOutput(canCaptureOutput), canCaptureHotword(canCaptureHotword) {}
~AudioRecordClient() override = default;
- const String16 opPackageName; // client package name
+ const media::permission::Identity identity; // identity of client
nsecs_t startTimeNs;
const bool canCaptureOutput;
const bool canCaptureHotword;
@@ -829,10 +833,11 @@
class AudioPlaybackClient : public AudioClient {
public:
AudioPlaybackClient(const audio_attributes_t attributes,
- const audio_io_handle_t io, uid_t uid, pid_t pid,
+ const audio_io_handle_t io, media::permission::Identity identity,
const audio_session_t session, audio_port_handle_t portId,
audio_port_handle_t deviceId, audio_stream_type_t stream) :
- AudioClient(attributes, io, uid, pid, session, portId, deviceId), stream(stream) {}
+ AudioClient(attributes, io, identity, session, portId,
+ deviceId), stream(stream) {}
~AudioPlaybackClient() override = default;
const audio_stream_type_t stream;