Loading services/audiopolicy/service/AudioPolicyService.cpp +21 −9 Original line number Diff line number Diff line Loading @@ -450,7 +450,7 @@ void AudioPolicyService::updateUidStates_l() for (size_t i =0; i < mAudioRecordClients.size(); i++) { sp<AudioRecordClient> current = mAudioRecordClients[i]; if (!current->active) continue; if (isPrivacySensitive(current->attributes.source)) { if (isPrivacySensitiveSource(current->attributes.source)) { if (current->startTimeNs > latestSensitiveStartNs) { latestSensitiveActive = current; latestSensitiveStartNs = current->startTimeNs; Loading Loading @@ -489,7 +489,10 @@ void AudioPolicyService::updateUidStates_l() bool isLatest = current == latestActive; bool isLatestSensitive = current == latestSensitiveActive; bool forceIdle = true; if (mUidPolicy->isAssistantUid(current->uid)) { if (isVirtualSource(source)) { forceIdle = false; } else if (mUidPolicy->isAssistantUid(current->uid)) { if (isA11yOnTop) { if (source == AUDIO_SOURCE_HOTWORD || source == AUDIO_SOURCE_VOICE_RECOGNITION) { forceIdle = false; Loading @@ -505,10 +508,6 @@ void AudioPolicyService::updateUidStates_l() (source == AUDIO_SOURCE_VOICE_RECOGNITION || source == AUDIO_SOURCE_HOTWORD)) { forceIdle = false; } } else if (source == AUDIO_SOURCE_VOICE_DOWNLINK || source == AUDIO_SOURCE_VOICE_CALL || (source == AUDIO_SOURCE_VOICE_UPLINK)) { forceIdle = false; } else { if (!isAssistantOnTop && (isOnTop || isLatest) && (!isSensitiveActive || isLatestSensitive)) { Loading Loading @@ -542,14 +541,27 @@ app_state_t AudioPolicyService::apmStatFromAmState(int amState) { } /* static */ bool AudioPolicyService::isPrivacySensitive(audio_source_t source) bool AudioPolicyService::isPrivacySensitiveSource(audio_source_t source) { switch (source) { case AUDIO_SOURCE_CAMCORDER: case AUDIO_SOURCE_VOICE_COMMUNICATION: return true; default: break; } return false; } /* static */ bool AudioPolicyService::isVirtualSource(audio_source_t source) { switch (source) { case AUDIO_SOURCE_VOICE_UPLINK: case AUDIO_SOURCE_VOICE_DOWNLINK: case AUDIO_SOURCE_VOICE_CALL: case AUDIO_SOURCE_CAMCORDER: case AUDIO_SOURCE_VOICE_COMMUNICATION: case AUDIO_SOURCE_REMOTE_SUBMIX: case AUDIO_SOURCE_FM_TUNER: return true; default: break; Loading services/audiopolicy/service/AudioPolicyService.h +2 −1 Original line number Diff line number Diff line Loading @@ -327,7 +327,8 @@ private: void silenceAllRecordings_l(); static bool isPrivacySensitive(audio_source_t source); static bool isPrivacySensitiveSource(audio_source_t source); static bool isVirtualSource(audio_source_t source); // If recording we need to make sure the UID is allowed to do that. If the UID is idle // then it cannot record and gets buffers with zeros - silence. As soon as the UID Loading Loading
services/audiopolicy/service/AudioPolicyService.cpp +21 −9 Original line number Diff line number Diff line Loading @@ -450,7 +450,7 @@ void AudioPolicyService::updateUidStates_l() for (size_t i =0; i < mAudioRecordClients.size(); i++) { sp<AudioRecordClient> current = mAudioRecordClients[i]; if (!current->active) continue; if (isPrivacySensitive(current->attributes.source)) { if (isPrivacySensitiveSource(current->attributes.source)) { if (current->startTimeNs > latestSensitiveStartNs) { latestSensitiveActive = current; latestSensitiveStartNs = current->startTimeNs; Loading Loading @@ -489,7 +489,10 @@ void AudioPolicyService::updateUidStates_l() bool isLatest = current == latestActive; bool isLatestSensitive = current == latestSensitiveActive; bool forceIdle = true; if (mUidPolicy->isAssistantUid(current->uid)) { if (isVirtualSource(source)) { forceIdle = false; } else if (mUidPolicy->isAssistantUid(current->uid)) { if (isA11yOnTop) { if (source == AUDIO_SOURCE_HOTWORD || source == AUDIO_SOURCE_VOICE_RECOGNITION) { forceIdle = false; Loading @@ -505,10 +508,6 @@ void AudioPolicyService::updateUidStates_l() (source == AUDIO_SOURCE_VOICE_RECOGNITION || source == AUDIO_SOURCE_HOTWORD)) { forceIdle = false; } } else if (source == AUDIO_SOURCE_VOICE_DOWNLINK || source == AUDIO_SOURCE_VOICE_CALL || (source == AUDIO_SOURCE_VOICE_UPLINK)) { forceIdle = false; } else { if (!isAssistantOnTop && (isOnTop || isLatest) && (!isSensitiveActive || isLatestSensitive)) { Loading Loading @@ -542,14 +541,27 @@ app_state_t AudioPolicyService::apmStatFromAmState(int amState) { } /* static */ bool AudioPolicyService::isPrivacySensitive(audio_source_t source) bool AudioPolicyService::isPrivacySensitiveSource(audio_source_t source) { switch (source) { case AUDIO_SOURCE_CAMCORDER: case AUDIO_SOURCE_VOICE_COMMUNICATION: return true; default: break; } return false; } /* static */ bool AudioPolicyService::isVirtualSource(audio_source_t source) { switch (source) { case AUDIO_SOURCE_VOICE_UPLINK: case AUDIO_SOURCE_VOICE_DOWNLINK: case AUDIO_SOURCE_VOICE_CALL: case AUDIO_SOURCE_CAMCORDER: case AUDIO_SOURCE_VOICE_COMMUNICATION: case AUDIO_SOURCE_REMOTE_SUBMIX: case AUDIO_SOURCE_FM_TUNER: return true; default: break; Loading
services/audiopolicy/service/AudioPolicyService.h +2 −1 Original line number Diff line number Diff line Loading @@ -327,7 +327,8 @@ private: void silenceAllRecordings_l(); static bool isPrivacySensitive(audio_source_t source); static bool isPrivacySensitiveSource(audio_source_t source); static bool isVirtualSource(audio_source_t source); // If recording we need to make sure the UID is allowed to do that. If the UID is idle // then it cannot record and gets buffers with zeros - silence. As soon as the UID Loading