Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f32108e7 authored by Eric Laurent's avatar Eric Laurent
Browse files

audio policy: extend API used to silence capture from a given app

In preparation for concurrent capture policy, extend current audio policy
interface setRecordSilenced(uid...) to a more generic API setAppState(uid...)

Bug: 111438757
Test: CTS test AudioRecord.testRecordNoDataForIdleUids
Change-Id: Idba540e2724a6c71ec275a5ff73c312e5b6040a4
parent 3df53103
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -242,7 +242,7 @@ public:
                                        bool reported) = 0;
    virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled) = 0;

    virtual void     setRecordSilenced(uid_t uid, bool silenced);
    virtual void     setAppState(uid_t uid, app_state_t state);
};


+4 −2
Original line number Diff line number Diff line
@@ -3715,11 +3715,13 @@ status_t AudioPolicyManager::setSurroundFormatEnabled(audio_format_t audioFormat
    return profileUpdated ? NO_ERROR : INVALID_OPERATION;
}

void AudioPolicyManager::setRecordSilenced(uid_t uid, bool silenced)
void AudioPolicyManager::setAppState(uid_t uid, app_state_t state)
{
    Vector<sp<AudioInputDescriptor> > activeInputs = mInputs.getActiveInputs();
    bool silenced = state == APP_STATE_IDLE;

    ALOGV("AudioPolicyManager:setRecordSilenced(uid:%d, silenced:%d)", uid, silenced);

    Vector<sp<AudioInputDescriptor> > activeInputs = mInputs.getActiveInputs();
    for (size_t i = 0; i < activeInputs.size(); i++) {
        sp<AudioInputDescriptor> activeDesc = activeInputs[i];
        RecordClientVector clients = activeDesc->clientsList(true /*activeOnly*/);
+1 −1
Original line number Diff line number Diff line
@@ -242,7 +242,7 @@ public:
        // return the strategy corresponding to a given stream type
        routing_strategy getStrategy(audio_stream_type_t stream) const;

        virtual void setRecordSilenced(uid_t uid, bool silenced);
        virtual void setAppState(uid_t uid, app_state_t state);

protected:
        // A constructor that allows more fine-grained control over initialization process,
+6 −3
Original line number Diff line number Diff line
@@ -340,17 +340,18 @@ status_t AudioPolicyService::dumpInternals(int fd)
    return NO_ERROR;
}

void AudioPolicyService::setRecordSilenced(uid_t uid, bool silenced)
void AudioPolicyService::setAppState(uid_t uid, app_state_t state)
{
    {
        Mutex::Autolock _l(mLock);
        if (mAudioPolicyManager) {
            AutoCallerClear acc;
            mAudioPolicyManager->setRecordSilenced(uid, silenced);
            mAudioPolicyManager->setAppState(uid, state);
        }
    }
    sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
    if (af) {
        bool silenced = state == APP_STATE_IDLE;
        af->setRecordSilenced(uid, silenced);
    }
}
@@ -585,7 +586,9 @@ void AudioPolicyService::UidPolicy::onUidIdle(uid_t uid, __unused bool disabled)
void AudioPolicyService::UidPolicy::notifyService(uid_t uid, bool active) {
    sp<AudioPolicyService> service = mService.promote();
    if (service != nullptr) {
        service->setRecordSilenced(uid, !active);
        service->setAppState(uid, active ?
                              APP_STATE_FOREGROUND :
                              APP_STATE_IDLE);
    }
}

+1 −1
Original line number Diff line number Diff line
@@ -250,7 +250,7 @@ private:
    virtual status_t shellCommand(int in, int out, int err, Vector<String16>& args);

    // Sets whether the given UID records only silence
    virtual void setRecordSilenced(uid_t uid, bool silenced);
    virtual void setAppState(uid_t uid, app_state_t state);

    // Overrides the UID state as if it is idle
    status_t handleSetUidState(Vector<String16>& args, int err);