@ -389,9 +389,16 @@ sp<AudioFlinger::PlaybackThread::OpPlayAudioMonitor>
AudioFlinger : : PlaybackThread : : OpPlayAudioMonitor : : createIfNeeded (
uid_t uid , const audio_attributes_t & attr , int id , audio_stream_type_t streamType )
{
if ( isAudioServerOrRootUid ( uid ) ) {
ALOGD ( " OpPlayAudio: not muting track:%d usage:%d root or audioserver " , id , attr . usage ) ;
return nullptr ;
if ( isServiceUid ( uid ) ) {
Vector < String16 > packages ;
getPackagesForUid ( uid , packages ) ;
if ( packages . isEmpty ( ) ) {
ALOGD ( " OpPlayAudio: not muting track:%d usage:%d for service UID %d " ,
id ,
attr . usage ,
uid ) ;
return nullptr ;
}
}
// stream type has been filtered by audio policy to indicate whether it can be muted
if ( streamType = = AUDIO_STREAM_ENFORCED_AUDIBLE ) {
@ -423,8 +430,7 @@ AudioFlinger::PlaybackThread::OpPlayAudioMonitor::~OpPlayAudioMonitor()
void AudioFlinger : : PlaybackThread : : OpPlayAudioMonitor : : onFirstRef ( )
{
PermissionController permissionController ;
permissionController . getPackagesForUid ( mUid , mPackages ) ;
getPackagesForUid ( mUid , mPackages ) ;
checkPlayAudioForUsage ( ) ;
if ( ! mPackages . isEmpty ( ) ) {
mOpCallback = new PlayAudioOpCallback ( this ) ;
@ -475,6 +481,14 @@ void AudioFlinger::PlaybackThread::OpPlayAudioMonitor::PlayAudioOpCallback::opCh
}
}
// static
void AudioFlinger : : PlaybackThread : : OpPlayAudioMonitor : : getPackagesForUid (
uid_t uid , Vector < String16 > & packages )
{
PermissionController permissionController ;
permissionController . getPackagesForUid ( uid , packages ) ;
}
// ----------------------------------------------------------------------------
# undef LOG_TAG
# define LOG_TAG "AF::Track"