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

Commit f12daa4e authored by Hayden Gomes's avatar Hayden Gomes Committed by Android (Google) Code Review
Browse files

Merge "Updating MediaRecorderClient to use CAPTURE_TUNER_AUDIO_INPUT"

parents b27255e8 b7429925
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -127,7 +127,8 @@ status_t MediaRecorderClient::setAudioSource(int as)
    pid_t pid = IPCThreadState::self()->getCallingPid();
    pid_t pid = IPCThreadState::self()->getCallingPid();
    uid_t uid = IPCThreadState::self()->getCallingUid();
    uid_t uid = IPCThreadState::self()->getCallingUid();


    if ((as == AUDIO_SOURCE_FM_TUNER && !captureAudioOutputAllowed(pid, uid))
    if ((as == AUDIO_SOURCE_FM_TUNER
            && !(captureAudioOutputAllowed(pid, uid) || captureTunerAudioInputAllowed(pid, uid)))
            || !recordingAllowed(String16(""), pid, uid)) {
            || !recordingAllowed(String16(""), pid, uid)) {
        return PERMISSION_DENIED;
        return PERMISSION_DENIED;
    }
    }
+8 −0
Original line number Original line Diff line number Diff line
@@ -164,6 +164,14 @@ bool captureMediaOutputAllowed(pid_t pid, uid_t uid) {
    return ok;
    return ok;
}
}


bool captureTunerAudioInputAllowed(pid_t pid, uid_t uid) {
    if (isAudioServerOrRootUid(uid)) return true;
    static const String16 sCaptureTunerAudioInput("android.permission.CAPTURE_TUNER_AUDIO_INPUT");
    bool ok = PermissionCache::checkPermission(sCaptureTunerAudioInput, pid, uid);
    if (!ok) ALOGV("Request requires android.permission.CAPTURE_TUNER_AUDIO_INPUT");
    return ok;
}

bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid) {
bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid) {
    if (isAudioServerOrRootUid(uid)) return true;
    if (isAudioServerOrRootUid(uid)) return true;
    static const String16 sCaptureVoiceCommOutput(
    static const String16 sCaptureVoiceCommOutput(
+1 −0
Original line number Original line Diff line number Diff line
@@ -84,6 +84,7 @@ bool startRecording(const String16& opPackageName, pid_t pid, uid_t uid, audio_s
void finishRecording(const String16& opPackageName, uid_t uid, audio_source_t source);
void finishRecording(const String16& opPackageName, uid_t uid, audio_source_t source);
bool captureAudioOutputAllowed(pid_t pid, uid_t uid);
bool captureAudioOutputAllowed(pid_t pid, uid_t uid);
bool captureMediaOutputAllowed(pid_t pid, uid_t uid);
bool captureMediaOutputAllowed(pid_t pid, uid_t uid);
bool captureTunerAudioInputAllowed(pid_t pid, uid_t uid);
bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid);
bool captureVoiceCommunicationOutputAllowed(pid_t pid, uid_t uid);
bool captureHotwordAllowed(const String16& opPackageName, pid_t pid, uid_t uid);
bool captureHotwordAllowed(const String16& opPackageName, pid_t pid, uid_t uid);
bool settingsAllowed();
bool settingsAllowed();
+11 −5
Original line number Original line Diff line number Diff line
@@ -454,8 +454,9 @@ status_t AudioPolicyService::getInputForAttr(const audio_attributes_t *attr,
    }
    }


    // check calling permissions.
    // check calling permissions.
    // Capturing from FM_TUNER source is controlled by captureAudioOutputAllowed() only as this
    // Capturing from FM_TUNER source is controlled by captureTunerAudioInputAllowed() and
    // does not affect users privacy as does capturing from an actual microphone.
    // captureAudioOutputAllowed() (deprecated) as this does not affect users privacy
    // as does capturing from an actual microphone.
    if (!(recordingAllowed(opPackageName, pid, uid) || attr->source == AUDIO_SOURCE_FM_TUNER)) {
    if (!(recordingAllowed(opPackageName, pid, uid) || attr->source == AUDIO_SOURCE_FM_TUNER)) {
        ALOGE("%s permission denied: recording not allowed for uid %d pid %d",
        ALOGE("%s permission denied: recording not allowed for uid %d pid %d",
                __func__, uid, pid);
                __func__, uid, pid);
@@ -466,9 +467,14 @@ status_t AudioPolicyService::getInputForAttr(const audio_attributes_t *attr,
    if ((inputSource == AUDIO_SOURCE_VOICE_UPLINK ||
    if ((inputSource == AUDIO_SOURCE_VOICE_UPLINK ||
        inputSource == AUDIO_SOURCE_VOICE_DOWNLINK ||
        inputSource == AUDIO_SOURCE_VOICE_DOWNLINK ||
        inputSource == AUDIO_SOURCE_VOICE_CALL ||
        inputSource == AUDIO_SOURCE_VOICE_CALL ||
        inputSource == AUDIO_SOURCE_ECHO_REFERENCE||
        inputSource == AUDIO_SOURCE_ECHO_REFERENCE)
        inputSource == AUDIO_SOURCE_FM_TUNER) &&
        && !canCaptureOutput) {
        !canCaptureOutput) {
        return PERMISSION_DENIED;
    }

    if (inputSource == AUDIO_SOURCE_FM_TUNER
        && !captureTunerAudioInputAllowed(pid, uid)
        && !canCaptureOutput) {
        return PERMISSION_DENIED;
        return PERMISSION_DENIED;
    }
    }