Loading core/java/android/os/IPermissionController.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -20,4 +20,5 @@ package android.os; /** @hide */ interface IPermissionController { boolean checkPermission(String permission, int pid, int uid); String[] getPackagesForUid(int uid); } core/jni/android_media_AudioRecord.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include <utils/Log.h> #include <media/AudioRecord.h> #include <ScopedUtfChars.h> #include "android_media_AudioFormat.h" #include "android_media_AudioErrors.h" Loading Loading @@ -146,7 +148,7 @@ 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, jint sampleRateInHertz, jint channelMask, jint channelIndexMask, jint audioFormat, jint buffSizeInBytes, jintArray jSession) jint audioFormat, jint buffSizeInBytes, jintArray jSession, jstring opPackageName) { //ALOGV(">> Entering android_media_AudioRecord_setup"); //ALOGV("sampleRate=%d, audioFormat=%d, channel mask=%x, buffSizeInBytes=%d", Loading Loading @@ -208,8 +210,10 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, env->ReleasePrimitiveArrayCritical(jSession, nSession, 0); nSession = NULL; ScopedUtfChars opPackageNameStr(env, opPackageName); // create an uninitialized AudioRecord object sp<AudioRecord> lpRecorder = new AudioRecord(); sp<AudioRecord> lpRecorder = new AudioRecord(String16(opPackageNameStr.c_str())); audio_attributes_t *paa = NULL; // read the AudioAttributes values Loading Loading @@ -597,7 +601,7 @@ static 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[I)I", {"native_setup", "(Ljava/lang/Object;Ljava/lang/Object;IIIII[ILjava/lang/String;)I", (void *)android_media_AudioRecord_setup}, {"native_finalize", "()V", (void *)android_media_AudioRecord_finalize}, {"native_release", "()V", (void *)android_media_AudioRecord_release}, Loading core/jni/android_media_RemoteDisplay.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -134,8 +134,10 @@ private: // ---------------------------------------------------------------------------- static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceStr) { static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceStr, jstring opPackageNameStr) { ScopedUtfChars iface(env, ifaceStr); ScopedUtfChars opPackageName(env, opPackageNameStr); sp<IServiceManager> sm = defaultServiceManager(); sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>( Loading @@ -146,7 +148,7 @@ static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceSt } sp<NativeRemoteDisplayClient> client(new NativeRemoteDisplayClient(env, remoteDisplayObj)); sp<IRemoteDisplay> display = service->listenForRemoteDisplay( sp<IRemoteDisplay> display = service->listenForRemoteDisplay(String16(opPackageName.c_str()), client, String8(iface.c_str())); if (display == NULL) { ALOGE("Media player service rejected request to listen for remote display '%s'.", Loading Loading @@ -176,7 +178,7 @@ static void nativeDispose(JNIEnv* env, jobject remoteDisplayObj, jlong ptr) { // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { {"nativeListen", "(Ljava/lang/String;)J", {"nativeListen", "(Ljava/lang/String;Ljava/lang/String;)J", (void*)nativeListen }, {"nativeDispose", "(J)V", (void*)nativeDispose }, Loading media/java/android/media/AudioRecord.java +14 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import java.util.Iterator; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.app.ActivityThread; import android.app.Application; import android.os.Binder; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -378,7 +380,7 @@ public class AudioRecord int initResult = native_setup( new WeakReference<AudioRecord>(this), mAudioAttributes, mSampleRate, mChannelMask, mChannelIndexMask, mAudioFormat, mNativeBufferSizeInBytes, session); session, getMyOpPackageName()); if (initResult != SUCCESS) { loge("Error code "+initResult+" when initializing native AudioRecord object."); return; // with mState == STATE_UNINITIALIZED Loading Loading @@ -1321,7 +1323,6 @@ public class AudioRecord return native_set_pos_update_period(periodInFrames); } //-------------------------------------------------------------------------- // Explicit Routing //-------------------- Loading Loading @@ -1451,7 +1452,7 @@ public class AudioRecord private native final int native_setup(Object audiorecord_this, Object /*AudioAttributes*/ attributes, int sampleRate, int channelMask, int channelIndexMask, int audioFormat, int buffSizeInBytes, int[] sessionId); int buffSizeInBytes, int[] sessionId, String opPackageName); // TODO remove: implementation calls directly into implementation of native_release() private native final void native_finalize(); Loading Loading @@ -1500,4 +1501,14 @@ public class AudioRecord Log.e(TAG, msg); } private static String getMyOpPackageName() { ActivityThread activityThread = ActivityThread.currentActivityThread(); if (activityThread != null) { Application application = activityThread.getApplication(); if (application != null) { return application.getOpPackageName(); } } throw new IllegalStateException("Cannot create AudioRecord outside of an app"); } } media/java/android/media/MediaRecorder.java +14 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.media; import android.annotation.SystemApi; import android.app.ActivityThread; import android.app.Application; import android.hardware.Camera; import android.os.Handler; import android.os.Looper; Loading Loading @@ -111,7 +112,7 @@ public class MediaRecorder /* Native setup requires a weak reference to our object. * It's easier to create it here than in C++. */ native_setup(new WeakReference<MediaRecorder>(this), packageName); native_setup(new WeakReference<MediaRecorder>(this), packageName, getMyOpPackageName()); } /** Loading Loading @@ -1080,7 +1081,7 @@ public class MediaRecorder private static native final void native_init(); private native final void native_setup(Object mediarecorder_this, String clientName) throws IllegalStateException; String clientName, String opPackageName) throws IllegalStateException; private native final void native_finalize(); Loading @@ -1088,4 +1089,15 @@ public class MediaRecorder @Override protected void finalize() { native_finalize(); } private static String getMyOpPackageName() { ActivityThread activityThread = ActivityThread.currentActivityThread(); if (activityThread != null) { Application application = activityThread.getApplication(); if (application != null) { return application.getOpPackageName(); } } throw new IllegalStateException("Cannot create AudioRecord outside of an app"); } } Loading
core/java/android/os/IPermissionController.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -20,4 +20,5 @@ package android.os; /** @hide */ interface IPermissionController { boolean checkPermission(String permission, int pid, int uid); String[] getPackagesForUid(int uid); }
core/jni/android_media_AudioRecord.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include <utils/Log.h> #include <media/AudioRecord.h> #include <ScopedUtfChars.h> #include "android_media_AudioFormat.h" #include "android_media_AudioErrors.h" Loading Loading @@ -146,7 +148,7 @@ 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, jint sampleRateInHertz, jint channelMask, jint channelIndexMask, jint audioFormat, jint buffSizeInBytes, jintArray jSession) jint audioFormat, jint buffSizeInBytes, jintArray jSession, jstring opPackageName) { //ALOGV(">> Entering android_media_AudioRecord_setup"); //ALOGV("sampleRate=%d, audioFormat=%d, channel mask=%x, buffSizeInBytes=%d", Loading Loading @@ -208,8 +210,10 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, env->ReleasePrimitiveArrayCritical(jSession, nSession, 0); nSession = NULL; ScopedUtfChars opPackageNameStr(env, opPackageName); // create an uninitialized AudioRecord object sp<AudioRecord> lpRecorder = new AudioRecord(); sp<AudioRecord> lpRecorder = new AudioRecord(String16(opPackageNameStr.c_str())); audio_attributes_t *paa = NULL; // read the AudioAttributes values Loading Loading @@ -597,7 +601,7 @@ static 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[I)I", {"native_setup", "(Ljava/lang/Object;Ljava/lang/Object;IIIII[ILjava/lang/String;)I", (void *)android_media_AudioRecord_setup}, {"native_finalize", "()V", (void *)android_media_AudioRecord_finalize}, {"native_release", "()V", (void *)android_media_AudioRecord_release}, Loading
core/jni/android_media_RemoteDisplay.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -134,8 +134,10 @@ private: // ---------------------------------------------------------------------------- static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceStr) { static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceStr, jstring opPackageNameStr) { ScopedUtfChars iface(env, ifaceStr); ScopedUtfChars opPackageName(env, opPackageNameStr); sp<IServiceManager> sm = defaultServiceManager(); sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>( Loading @@ -146,7 +148,7 @@ static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceSt } sp<NativeRemoteDisplayClient> client(new NativeRemoteDisplayClient(env, remoteDisplayObj)); sp<IRemoteDisplay> display = service->listenForRemoteDisplay( sp<IRemoteDisplay> display = service->listenForRemoteDisplay(String16(opPackageName.c_str()), client, String8(iface.c_str())); if (display == NULL) { ALOGE("Media player service rejected request to listen for remote display '%s'.", Loading Loading @@ -176,7 +178,7 @@ static void nativeDispose(JNIEnv* env, jobject remoteDisplayObj, jlong ptr) { // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { {"nativeListen", "(Ljava/lang/String;)J", {"nativeListen", "(Ljava/lang/String;Ljava/lang/String;)J", (void*)nativeListen }, {"nativeDispose", "(J)V", (void*)nativeDispose }, Loading
media/java/android/media/AudioRecord.java +14 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import java.util.Iterator; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.app.ActivityThread; import android.app.Application; import android.os.Binder; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -378,7 +380,7 @@ public class AudioRecord int initResult = native_setup( new WeakReference<AudioRecord>(this), mAudioAttributes, mSampleRate, mChannelMask, mChannelIndexMask, mAudioFormat, mNativeBufferSizeInBytes, session); session, getMyOpPackageName()); if (initResult != SUCCESS) { loge("Error code "+initResult+" when initializing native AudioRecord object."); return; // with mState == STATE_UNINITIALIZED Loading Loading @@ -1321,7 +1323,6 @@ public class AudioRecord return native_set_pos_update_period(periodInFrames); } //-------------------------------------------------------------------------- // Explicit Routing //-------------------- Loading Loading @@ -1451,7 +1452,7 @@ public class AudioRecord private native final int native_setup(Object audiorecord_this, Object /*AudioAttributes*/ attributes, int sampleRate, int channelMask, int channelIndexMask, int audioFormat, int buffSizeInBytes, int[] sessionId); int buffSizeInBytes, int[] sessionId, String opPackageName); // TODO remove: implementation calls directly into implementation of native_release() private native final void native_finalize(); Loading Loading @@ -1500,4 +1501,14 @@ public class AudioRecord Log.e(TAG, msg); } private static String getMyOpPackageName() { ActivityThread activityThread = ActivityThread.currentActivityThread(); if (activityThread != null) { Application application = activityThread.getApplication(); if (application != null) { return application.getOpPackageName(); } } throw new IllegalStateException("Cannot create AudioRecord outside of an app"); } }
media/java/android/media/MediaRecorder.java +14 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.media; import android.annotation.SystemApi; import android.app.ActivityThread; import android.app.Application; import android.hardware.Camera; import android.os.Handler; import android.os.Looper; Loading Loading @@ -111,7 +112,7 @@ public class MediaRecorder /* Native setup requires a weak reference to our object. * It's easier to create it here than in C++. */ native_setup(new WeakReference<MediaRecorder>(this), packageName); native_setup(new WeakReference<MediaRecorder>(this), packageName, getMyOpPackageName()); } /** Loading Loading @@ -1080,7 +1081,7 @@ public class MediaRecorder private static native final void native_init(); private native final void native_setup(Object mediarecorder_this, String clientName) throws IllegalStateException; String clientName, String opPackageName) throws IllegalStateException; private native final void native_finalize(); Loading @@ -1088,4 +1089,15 @@ public class MediaRecorder @Override protected void finalize() { native_finalize(); } private static String getMyOpPackageName() { ActivityThread activityThread = ActivityThread.currentActivityThread(); if (activityThread != null) { Application application = activityThread.getApplication(); if (application != null) { return application.getOpPackageName(); } } throw new IllegalStateException("Cannot create AudioRecord outside of an app"); } }