Loading media/java/android/media/AudioRecord.java +10 −1 Original line number Diff line number Diff line Loading @@ -401,7 +401,7 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, int initResult = native_setup( new WeakReference<AudioRecord>(this), mAudioAttributes, sampleRate, mChannelMask, mChannelIndexMask, mAudioFormat, mNativeBufferSizeInBytes, session, ActivityThread.currentOpPackageName(), 0 /*nativeRecordInJavaObj*/); session, getCurrentOpPackageName(), 0 /*nativeRecordInJavaObj*/); if (initResult != SUCCESS) { loge("Error code "+initResult+" when initializing native AudioRecord object."); return; // with mState == STATE_UNINITIALIZED Loading @@ -413,6 +413,15 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, mState = STATE_INITIALIZED; } private String getCurrentOpPackageName() { String opPackageName = ActivityThread.currentOpPackageName(); if (opPackageName != null) { return opPackageName; } // Command line utility return "uid:" + Binder.getCallingUid(); } /** * A constructor which explicitly connects a Native (C++) AudioRecord. For use by * the AudioRecordRoutingProxy subclass. Loading media/java/android/media/audiopolicy/AudioPolicy.java +19 −5 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.media.audiopolicy; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.app.ActivityManager; import android.content.Context; import android.content.pm.PackageManager; import android.media.AudioAttributes; Loading Loading @@ -417,16 +418,12 @@ public class AudioPolicy { Log.e(TAG, "Cannot use unregistered AudioPolicy"); return false; } if (mContext == null) { Log.e(TAG, "Cannot use AudioPolicy without context"); return false; } if (mRegistrationId == null) { Log.e(TAG, "Cannot use unregistered AudioPolicy"); return false; } } if (!(PackageManager.PERMISSION_GRANTED == mContext.checkCallingOrSelfPermission( if (!(PackageManager.PERMISSION_GRANTED == checkCallingOrSelfPermission( android.Manifest.permission.MODIFY_AUDIO_ROUTING))) { Slog.w(TAG, "Cannot use AudioPolicy for pid " + Binder.getCallingPid() + " / uid " + Binder.getCallingUid() + ", needs MODIFY_AUDIO_ROUTING"); Loading @@ -435,6 +432,23 @@ public class AudioPolicy { return true; } /** * Returns {@link PackageManager#PERMISSION_GRANTED} if the caller has the given permission. */ private @PackageManager.PermissionResult int checkCallingOrSelfPermission(String permission) { if (mContext != null) { return mContext.checkCallingOrSelfPermission(permission); } Slog.v(TAG, "Null context, checking permission via ActivityManager"); int pid = Binder.getCallingPid(); int uid = Binder.getCallingUid(); try { return ActivityManager.getService().checkPermission(permission, pid, uid); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } private void checkMixReadyToUse(AudioMix mix, boolean forTrack) throws IllegalArgumentException{ if (mix == null) { Loading media/java/android/media/audiopolicy/AudioPolicyConfig.java +0 −2 Original line number Diff line number Diff line Loading @@ -18,8 +18,6 @@ package android.media.audiopolicy; import android.annotation.NonNull; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioPatch; import android.media.audiopolicy.AudioMixingRule.AudioMixMatchCriterion; import android.os.Parcel; import android.os.Parcelable; Loading Loading
media/java/android/media/AudioRecord.java +10 −1 Original line number Diff line number Diff line Loading @@ -401,7 +401,7 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, int initResult = native_setup( new WeakReference<AudioRecord>(this), mAudioAttributes, sampleRate, mChannelMask, mChannelIndexMask, mAudioFormat, mNativeBufferSizeInBytes, session, ActivityThread.currentOpPackageName(), 0 /*nativeRecordInJavaObj*/); session, getCurrentOpPackageName(), 0 /*nativeRecordInJavaObj*/); if (initResult != SUCCESS) { loge("Error code "+initResult+" when initializing native AudioRecord object."); return; // with mState == STATE_UNINITIALIZED Loading @@ -413,6 +413,15 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, mState = STATE_INITIALIZED; } private String getCurrentOpPackageName() { String opPackageName = ActivityThread.currentOpPackageName(); if (opPackageName != null) { return opPackageName; } // Command line utility return "uid:" + Binder.getCallingUid(); } /** * A constructor which explicitly connects a Native (C++) AudioRecord. For use by * the AudioRecordRoutingProxy subclass. Loading
media/java/android/media/audiopolicy/AudioPolicy.java +19 −5 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.media.audiopolicy; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.app.ActivityManager; import android.content.Context; import android.content.pm.PackageManager; import android.media.AudioAttributes; Loading Loading @@ -417,16 +418,12 @@ public class AudioPolicy { Log.e(TAG, "Cannot use unregistered AudioPolicy"); return false; } if (mContext == null) { Log.e(TAG, "Cannot use AudioPolicy without context"); return false; } if (mRegistrationId == null) { Log.e(TAG, "Cannot use unregistered AudioPolicy"); return false; } } if (!(PackageManager.PERMISSION_GRANTED == mContext.checkCallingOrSelfPermission( if (!(PackageManager.PERMISSION_GRANTED == checkCallingOrSelfPermission( android.Manifest.permission.MODIFY_AUDIO_ROUTING))) { Slog.w(TAG, "Cannot use AudioPolicy for pid " + Binder.getCallingPid() + " / uid " + Binder.getCallingUid() + ", needs MODIFY_AUDIO_ROUTING"); Loading @@ -435,6 +432,23 @@ public class AudioPolicy { return true; } /** * Returns {@link PackageManager#PERMISSION_GRANTED} if the caller has the given permission. */ private @PackageManager.PermissionResult int checkCallingOrSelfPermission(String permission) { if (mContext != null) { return mContext.checkCallingOrSelfPermission(permission); } Slog.v(TAG, "Null context, checking permission via ActivityManager"); int pid = Binder.getCallingPid(); int uid = Binder.getCallingUid(); try { return ActivityManager.getService().checkPermission(permission, pid, uid); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } private void checkMixReadyToUse(AudioMix mix, boolean forTrack) throws IllegalArgumentException{ if (mix == null) { Loading
media/java/android/media/audiopolicy/AudioPolicyConfig.java +0 −2 Original line number Diff line number Diff line Loading @@ -18,8 +18,6 @@ package android.media.audiopolicy; import android.annotation.NonNull; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioPatch; import android.media.audiopolicy.AudioMixingRule.AudioMixMatchCriterion; import android.os.Parcel; import android.os.Parcelable; Loading