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

Commit dea03705 authored by Kun Liang's avatar Kun Liang Committed by Shashank Mittal
Browse files

AppOps: Add Ops check for audio recording by AudioRecord API

Confirm user permission before audio recording by AudioRecord API

Change-Id: Ib534a2872d0743a8124b403a2f20465ceb467f64
parent 7cce2a9f
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -22,6 +22,10 @@ package android.media;
import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;

import android.app.ActivityThread;
import android.app.AppOpsManager;
import android.content.Context;
import android.os.Binder;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -522,6 +526,21 @@ public class AudioRecord
        return mSessionId;
    }

    //--------------------------------------------------------
    // Check user permission
    //--------------------------------------------------------
    private boolean checkPermission() {
        AppOpsManager appOps = (AppOpsManager) ActivityThread.currentApplication().
            getSystemService(Context.APP_OPS_SERVICE);
        int callingUid = Binder.getCallingUid();
        String callingPackage= ActivityThread.currentPackageName();
        if (appOps.noteOp(AppOpsManager.OP_RECORD_AUDIO, callingUid, callingPackage) ==
            AppOpsManager.MODE_ALLOWED)
            return true;
        else
            return false;
    }

    //---------------------------------------------------------
    // Transport control methods
    //--------------------
@@ -536,6 +555,10 @@ public class AudioRecord
                    + "uninitialized AudioRecord.");
        }

        // check user permission
        if (!checkPermission())
            return;

        // start recording
        synchronized(mRecordingStateLock) {
            if (native_start(MediaSyncEvent.SYNC_EVENT_NONE, 0) == SUCCESS) {
@@ -558,6 +581,10 @@ public class AudioRecord
                    + "uninitialized AudioRecord.");
        }

        // check user permission
        if (!checkPermission())
            return;

        // start recording
        synchronized(mRecordingStateLock) {
            if (native_start(syncEvent.getType(), syncEvent.getAudioSessionId()) == SUCCESS) {