@ -85,7 +85,9 @@ enum {
ADD_STREAM_DEFAULT_EFFECT ,
REMOVE_STREAM_DEFAULT_EFFECT ,
ADD_SOURCE_DEFAULT_EFFECT ,
REMOVE_SOURCE_DEFAULT_EFFECT
REMOVE_SOURCE_DEFAULT_EFFECT ,
SET_ASSISTANT_UID ,
SET_A11Y_SERVICES_UIDS ,
} ;
# define MAX_ITEMS_PER_LIST 1024
@ -941,6 +943,33 @@ public:
return static_cast < status_t > ( reply . readInt32 ( ) ) ;
}
virtual status_t setAssistantUid ( uid_t uid )
{
Parcel data , reply ;
data . writeInterfaceToken ( IAudioPolicyService : : getInterfaceDescriptor ( ) ) ;
data . writeInt32 ( uid ) ;
status_t status = remote ( ) - > transact ( SET_ASSISTANT_UID , data , & reply ) ;
if ( status ! = NO_ERROR ) {
return status ;
}
return static_cast < status_t > ( reply . readInt32 ( ) ) ;
}
virtual status_t setA11yServicesUids ( const std : : vector < uid_t > & uids )
{
Parcel data , reply ;
data . writeInterfaceToken ( IAudioPolicyService : : getInterfaceDescriptor ( ) ) ;
data . writeInt32 ( uids . size ( ) ) ;
for ( auto uid : uids ) {
data . writeInt32 ( uid ) ;
}
status_t status = remote ( ) - > transact ( SET_A11Y_SERVICES_UIDS , data , & reply ) ;
if ( status ! = NO_ERROR ) {
return status ;
}
return static_cast < status_t > ( reply . readInt32 ( ) ) ;
}
} ;
IMPLEMENT_META_INTERFACE ( AudioPolicyService , " android.media.IAudioPolicyService " ) ;
@ -997,7 +1026,9 @@ status_t BnAudioPolicyService::onTransact(
case START_AUDIO_SOURCE :
case STOP_AUDIO_SOURCE :
case GET_SURROUND_FORMATS :
case SET_SURROUND_FORMAT_ENABLED : {
case SET_SURROUND_FORMAT_ENABLED :
case SET_ASSISTANT_UID :
case SET_A11Y_SERVICES_UIDS : {
if ( ! isServiceUid ( IPCThreadState : : self ( ) - > getCallingUid ( ) ) ) {
ALOGW ( " %s: transaction %d received from PID %d unauthorized UID %d " ,
__func__ , code , IPCThreadState : : self ( ) - > getCallingPid ( ) ,
@ -1710,6 +1741,42 @@ status_t BnAudioPolicyService::onTransact(
return NO_ERROR ;
}
case SET_ASSISTANT_UID : {
CHECK_INTERFACE ( IAudioPolicyService , data , reply ) ;
int32_t uid ;
status_t status = data . readInt32 ( & uid ) ;
if ( status ! = NO_ERROR ) {
return status ;
}
status = setAssistantUid ( uid ) ;
reply - > writeInt32 ( static_cast < int32_t > ( status ) ) ;
return NO_ERROR ;
}
case SET_A11Y_SERVICES_UIDS : {
CHECK_INTERFACE ( IAudioPolicyService , data , reply ) ;
std : : vector < uid_t > uids ;
int32_t size ;
status_t status = data . readInt32 ( & size ) ;
if ( status ! = NO_ERROR ) {
return status ;
}
if ( size > MAX_ITEMS_PER_LIST ) {
size = MAX_ITEMS_PER_LIST ;
}
for ( int32_t i = 0 ; i < size ; i + + ) {
int32_t uid ;
status = data . readInt32 ( & uid ) ;
if ( status ! = NO_ERROR ) {
return status ;
}
uids . push_back ( uid ) ;
}
status = setA11yServicesUids ( uids ) ;
reply - > writeInt32 ( static_cast < int32_t > ( status ) ) ;
return NO_ERROR ;
}
default :
return BBinder : : onTransact ( code , data , reply , flags ) ;
}