Add application wide capture policy
Apps were previously forced to set their allowed capture policy from
either their manifest which is not flexible or from each track which is
a very fine grain but difficult when using libraries like exoplayer.
Thus add an application level policy set with AudioManager.
Test: atest android.media.cts.AudioPlaybackCaptureTest
Bug: 111453086
Change-Id: Ic890b5b041affea757fbd3f2707ff2ce18771828
Signed-off-by: Kevin Rocard <krocard@google.com>
diff --git a/media/libaudioclient/IAudioPolicyService.cpp b/media/libaudioclient/IAudioPolicyService.cpp
index 3bac44f..bf98c60 100644
--- a/media/libaudioclient/IAudioPolicyService.cpp
+++ b/media/libaudioclient/IAudioPolicyService.cpp
@@ -101,7 +101,8 @@
LIST_AUDIO_PRODUCT_STRATEGIES,
GET_STRATEGY_FOR_ATTRIBUTES,
LIST_AUDIO_VOLUME_GROUPS,
- GET_VOLUME_GROUP_FOR_ATTRIBUTES
+ GET_VOLUME_GROUP_FOR_ATTRIBUTES,
+ SET_ALLOWED_CAPTURE_POLICY,
};
#define MAX_ITEMS_PER_LIST 1024
@@ -603,6 +604,15 @@
return status;
}
+ status_t setAllowedCapturePolicy(uid_t uid, audio_flags_mask_t flags) override {
+ Parcel data, reply;
+ data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
+ data.writeInt32(uid);
+ data.writeInt32(flags);
+ remote()->transact(SET_ALLOWED_CAPTURE_POLICY, data, &reply);
+ return reply.readInt32();
+ }
+
virtual bool isOffloadSupported(const audio_offload_info_t& info)
{
Parcel data, reply;
@@ -2168,7 +2178,7 @@
CHECK_INTERFACE(IAudioPolicyService, data, reply);
bool isSupported = isHapticPlaybackSupported();
reply->writeBool(isSupported);
- return NO_ERROR;
+ return NO_ERROR;
}
case SET_UID_DEVICE_AFFINITY: {
@@ -2285,6 +2295,15 @@
return NO_ERROR;
}
+ case SET_ALLOWED_CAPTURE_POLICY: {
+ CHECK_INTERFACE(IAudioPolicyService, data, reply);
+ uid_t uid = data.readInt32();
+ audio_flags_mask_t flags = data.readInt32();
+ status_t status = setAllowedCapturePolicy(uid, flags);
+ reply->writeInt32(status);
+ return NO_ERROR;
+ }
+
default:
return BBinder::onTransact(code, data, reply, flags);
}