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

Commit fece2436 authored by Philip P. Moltmann's avatar Philip P. Moltmann Committed by Nate Myren
Browse files

Add attributionTag to audio-recordings

... by switching from packageName/uid/pid to the Identity class.

This allows up to track which parts of the app trigger audio-recordings.

Test: atest CtsAppOpsTestCases
            CtsNativeMediaAAudioTestCases
Fixes: 160150145
Change-Id: I0913a336a862e4a1cb38b9d967cfbdc490513ab0
parent 50f0175f
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -20565,6 +20565,7 @@ package android.media {
    method @NonNull public android.media.AudioRecord.Builder setAudioPlaybackCaptureConfig(@NonNull android.media.AudioPlaybackCaptureConfiguration);
    method public android.media.AudioRecord.Builder setAudioSource(int) throws java.lang.IllegalArgumentException;
    method public android.media.AudioRecord.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException;
    method @NonNull public android.media.AudioRecord.Builder setContext(@NonNull android.content.Context);
    method @NonNull public android.media.AudioRecord.Builder setPrivacySensitive(boolean);
  }
@@ -22739,7 +22740,8 @@ package android.media {
  }
  public class MediaRecorder implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection {
    ctor public MediaRecorder();
    ctor @Deprecated public MediaRecorder();
    ctor public MediaRecorder(@NonNull android.content.Context);
    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
    method protected void finalize();
    method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException;
+2 −1
Original line number Diff line number Diff line

package {
    default_applicable_licenses: ["frameworks_base_core_jni_license"],
}
@@ -218,6 +217,7 @@ cc_library_shared {
                "fd_utils.cpp",
                "android_hardware_input_InputWindowHandle.cpp",
                "android_hardware_input_InputApplicationHandle.cpp",
                "permission_utils.cpp",
            ],

            static_libs: [
@@ -236,6 +236,7 @@ cc_library_shared {
                "audioflinger-aidl-cpp",
                "av-types-aidl-cpp",
                "android.hardware.camera.device@3.2",
                "media_permission-aidl-cpp",
                "libandroidicu",
                "libbpf_android",
                "libnetdbpf",
+2 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ extern int register_android_media_AudioVolumeGroupChangeHandler(JNIEnv *env);
extern int register_android_media_MicrophoneInfo(JNIEnv *env);
extern int register_android_media_ToneGenerator(JNIEnv *env);
extern int register_android_media_midi(JNIEnv *env);
extern int register_android_media_permission_Identity(JNIEnv* env);

namespace android {

@@ -1562,6 +1563,7 @@ static const RegJNIRec gRegJNI[] = {
        REG_JNI(register_android_media_RemoteDisplay),
        REG_JNI(register_android_media_ToneGenerator),
        REG_JNI(register_android_media_midi),
        REG_JNI(register_android_media_permission_Identity),

        REG_JNI(register_android_opengl_classes),
        REG_JNI(register_android_server_NetworkManagementSocketTagger),
+13 −12
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <jni.h>
#include <nativehelper/JNIHelp.h>
#include "core_jni_helpers.h"
#include "permission_utils.h"

#include <utils/Log.h>
#include <media/AudioRecord.h>
@@ -39,6 +40,9 @@

// ----------------------------------------------------------------------------

using android::media::permission::convertIdentity;
using android::media::permission::Identity;

using namespace android;

// ----------------------------------------------------------------------------
@@ -181,12 +185,11 @@ static sp<AudioRecord> setAudioRecord(JNIEnv* env, jobject thiz, const sp<AudioR
}

// ----------------------------------------------------------------------------
static jint
android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this,
        jobject jaa, jintArray jSampleRate, jint channelMask, jint channelIndexMask,
        jint audioFormat, jint buffSizeInBytes, jintArray jSession, jstring opPackageName,
        jlong nativeRecordInJavaObj)
{
static jint android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this,
                                            jobject jaa, jintArray jSampleRate, jint channelMask,
                                            jint channelIndexMask, jint audioFormat,
                                            jint buffSizeInBytes, jintArray jSession,
                                            jobject jIdentity, jlong nativeRecordInJavaObj) {
    //ALOGV(">> Entering android_media_AudioRecord_setup");
    //ALOGV("sampleRate=%d, audioFormat=%d, channel mask=%x, buffSizeInBytes=%d "
    //     "nativeRecordInJavaObj=0x%llX",
@@ -262,10 +265,8 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this,
        size_t frameSize = channelCount * bytesPerSample;
        size_t frameCount = buffSizeInBytes / frameSize;

        ScopedUtfChars opPackageNameStr(env, opPackageName);

        // create an uninitialized AudioRecord object
        lpRecorder = new AudioRecord(String16(opPackageNameStr.c_str()));
        lpRecorder = new AudioRecord(convertIdentity(env, jIdentity));

        // read the AudioAttributes values
        auto paa = JNIAudioAttributeHelper::makeUnique();
@@ -373,8 +374,6 @@ native_init_failure:
    return (jint) AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED;
}



// ----------------------------------------------------------------------------
static jint
android_media_AudioRecord_start(JNIEnv *env, jobject thiz, jint event, jint triggerSession)
@@ -893,9 +892,11 @@ static jint android_media_AudioRecord_get_port_id(JNIEnv *env, jobject thiz) {
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
static const JNINativeMethod gMethods[] = {
        // name,               signature,  funcPtr
        {"native_start", "(II)I", (void *)android_media_AudioRecord_start},
        {"native_stop", "()V", (void *)android_media_AudioRecord_stop},
        {"native_setup", "(Ljava/lang/Object;Ljava/lang/Object;[IIIII[ILjava/lang/String;J)I",
        {"native_setup",
         "(Ljava/lang/Object;Ljava/lang/Object;[IIIII[ILandroid/media/permission/Identity;J)I",
         (void *)android_media_AudioRecord_setup},
        {"native_finalize", "()V", (void *)android_media_AudioRecord_finalize},
        {"native_release", "()V", (void *)android_media_AudioRecord_release},
+9 −5
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@
using namespace android;

using ::android::media::VolumeShaper;
using ::android::media::permission::Identity;

// ----------------------------------------------------------------------------
static const char* const kClassPathName = "android/media/AudioTrack";
@@ -328,7 +329,10 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we

        // create the native AudioTrack object
        ScopedUtfChars opPackageNameStr(env, opPackageName);
        lpTrack = new AudioTrack(opPackageNameStr.c_str());
        // TODO b/182469354: make consistent with AudioRecord
        Identity identity = Identity();
        identity.packageName = std::string(opPackageNameStr.c_str());
        lpTrack = new AudioTrack(identity);

        // read the AudioAttributes values
        auto paa = JNIAudioAttributeHelper::makeUnique();
@@ -390,8 +394,8 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we
                                  sessionId, // audio session ID
                                  offload ? AudioTrack::TRANSFER_SYNC_NOTIF_CALLBACK
                                          : AudioTrack::TRANSFER_SYNC,
                                  (offload || encapsulationMode) ? &offloadInfo : NULL, -1,
                                  -1, // default uid, pid values
                                  (offload || encapsulationMode) ? &offloadInfo : NULL,
                                  Identity(), // default uid, pid values
                                  paa.get());
            break;

@@ -417,7 +421,7 @@ static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject we
                                  sessionId,              // audio session ID
                                  AudioTrack::TRANSFER_SHARED,
                                  NULL,       // default offloadInfo
                                  -1, -1, // default uid, pid values
                                  Identity(), // default uid, pid values
                                  paa.get());
            break;

Loading