Loading api/current.txt +4 −1 Original line number Diff line number Diff line Loading @@ -23044,6 +23044,9 @@ package android.media { method public int getUsage(); method public int getVolumeControlStream(); method public void writeToParcel(android.os.Parcel, int); field public static final int ALLOW_CAPTURE_BY_ALL = 1; // 0x1 field public static final int ALLOW_CAPTURE_BY_NONE = 3; // 0x3 field public static final int ALLOW_CAPTURE_BY_SYSTEM = 2; // 0x2 field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3 field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2 field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4 Loading Loading @@ -23075,7 +23078,7 @@ package android.media { ctor public AudioAttributes.Builder(); ctor public AudioAttributes.Builder(android.media.AudioAttributes); method public android.media.AudioAttributes build(); method @NonNull public android.media.AudioAttributes.Builder setAllowCapture(boolean); method @NonNull public android.media.AudioAttributes.Builder setAllowedCapturePolicy(int); method public android.media.AudioAttributes.Builder setContentType(int); method public android.media.AudioAttributes.Builder setFlags(int); method public android.media.AudioAttributes.Builder setLegacyStreamType(int); api/system-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ package android { field @Deprecated public static final String BROADCAST_NETWORK_PRIVILEGED = "android.permission.BROADCAST_NETWORK_PRIVILEGED"; field public static final String CAMERA_DISABLE_TRANSMIT_LED = "android.permission.CAMERA_DISABLE_TRANSMIT_LED"; field public static final String CAPTURE_AUDIO_HOTWORD = "android.permission.CAPTURE_AUDIO_HOTWORD"; field public static final String CAPTURE_MEDIA_OUTPUT = "android.permission.CAPTURE_MEDIA_OUTPUT"; field public static final String CAPTURE_TV_INPUT = "android.permission.CAPTURE_TV_INPUT"; field public static final String CHANGE_APP_IDLE_STATE = "android.permission.CHANGE_APP_IDLE_STATE"; field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"; Loading Loading @@ -3602,6 +3603,7 @@ package android.media.audiopolicy { ctor public AudioMixingRule.Builder(); method public android.media.audiopolicy.AudioMixingRule.Builder addMixRule(int, Object) throws java.lang.IllegalArgumentException; method public android.media.audiopolicy.AudioMixingRule.Builder addRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException; method @NonNull public android.media.audiopolicy.AudioMixingRule.Builder allowPrivilegedPlaybackCapture(boolean); method public android.media.audiopolicy.AudioMixingRule build(); method public android.media.audiopolicy.AudioMixingRule.Builder excludeMixRule(int, Object) throws java.lang.IllegalArgumentException; method public android.media.audiopolicy.AudioMixingRule.Builder excludeRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException; Loading core/jni/android_media_AudioSystem.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ static struct { static jclass gAudioMixingRuleClass; static struct { jfieldID mCriteria; jfieldID mAllowPrivilegedPlaybackCapture; // other fields unused by JNI } gAudioMixingRuleFields; Loading Loading @@ -1868,6 +1869,8 @@ static jint convertAudioMixToNative(JNIEnv *env, jobject jRule = env->GetObjectField(jAudioMix, gAudioMixFields.mRule); jobject jRuleCriteria = env->GetObjectField(jRule, gAudioMixingRuleFields.mCriteria); nAudioMix->mAllowPrivilegedPlaybackCapture = env->GetBooleanField(jRule, gAudioMixingRuleFields.mAllowPrivilegedPlaybackCapture); env->DeleteLocalRef(jRule); jobjectArray jCriteria = (jobjectArray)env->CallObjectMethod(jRuleCriteria, gArrayListMethods.toArray); Loading Loading @@ -2456,6 +2459,8 @@ int register_android_media_AudioSystem(JNIEnv *env) gAudioMixingRuleClass = MakeGlobalRefOrDie(env, audioMixingRuleClass); gAudioMixingRuleFields.mCriteria = GetFieldIDOrDie(env, audioMixingRuleClass, "mCriteria", "Ljava/util/ArrayList;"); gAudioMixingRuleFields.mAllowPrivilegedPlaybackCapture = GetFieldIDOrDie(env, audioMixingRuleClass, "mAllowPrivilegedPlaybackCapture", "Z"); jclass audioMixMatchCriterionClass = FindClassOrDie(env, "android/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion"); Loading core/res/AndroidManifest.xml +20 −0 Original line number Diff line number Diff line Loading @@ -3562,10 +3562,30 @@ android:protectionLevel="signature" /> <!-- Allows an application to capture audio output. Use the {@code CAPTURE_MEDIA_OUTPUT} permission if only the {@code USAGE_UNKNOWN}), {@code USAGE_MEDIA}) or {@code USAGE_GAME}) usages are intended to be captured. <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" android:protectionLevel="signature|privileged" /> <!-- @SystemApi Allows an application to capture the audio played by other apps that have set an allow capture policy of {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_SYSTEM}. Without this permission, only audio with an allow capture policy of {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_ALL} can be used. There are strong restriction listed at {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_SYSTEM} on what an app can do with the captured audio. See {@code CAPTURE_AUDIO_OUTPUT} for capturing audio use cases other than media playback. <p>Not for use by third-party applications.</p> @hide --> <permission android:name="android.permission.CAPTURE_MEDIA_OUTPUT" android:protectionLevel="signature|privileged" /> <!-- @SystemApi Allows an application to capture audio for hotword detection. <p>Not for use by third-party applications.</p> @hide --> Loading core/res/res/values/attrs_manifest.xml +13 −2 Original line number Diff line number Diff line Loading @@ -1673,8 +1673,19 @@ This flag is turned on by default. <em>This attribute is usable only by system apps. </em> --> <attr name="allowClearUserDataOnFailedRestore"/> <!-- If {@code true} the app's non sensitive audio can be capture by other apps. The default value is true. --> <!-- If {@code true} the app's non sensitive audio can be capture by other apps with {@code AudioPlaybackCaptureConfiguration} and a {@code MediaProjection}. <p> Non sensitive audio is defined as audio whose {@code AttributeUsage} is {@code USAGE_UNKNOWN}), {@code USAGE_MEDIA}) or {@code USAGE_GAME}). All other usages (eg. {@code USAGE_VOICE_COMMUNICATION}) will not be captured. <p> The default value is: - {@code true} for apps with targetSdkVersion >= 29 (Q). - {@code false} for apps with targetSdkVersion < 29. --> <attr name="allowAudioPlaybackCapture" format="boolean" /> </declare-styleable> <!-- The <code>permission</code> tag declares a security permission that can be Loading Loading
api/current.txt +4 −1 Original line number Diff line number Diff line Loading @@ -23044,6 +23044,9 @@ package android.media { method public int getUsage(); method public int getVolumeControlStream(); method public void writeToParcel(android.os.Parcel, int); field public static final int ALLOW_CAPTURE_BY_ALL = 1; // 0x1 field public static final int ALLOW_CAPTURE_BY_NONE = 3; // 0x3 field public static final int ALLOW_CAPTURE_BY_SYSTEM = 2; // 0x2 field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3 field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2 field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4 Loading Loading @@ -23075,7 +23078,7 @@ package android.media { ctor public AudioAttributes.Builder(); ctor public AudioAttributes.Builder(android.media.AudioAttributes); method public android.media.AudioAttributes build(); method @NonNull public android.media.AudioAttributes.Builder setAllowCapture(boolean); method @NonNull public android.media.AudioAttributes.Builder setAllowedCapturePolicy(int); method public android.media.AudioAttributes.Builder setContentType(int); method public android.media.AudioAttributes.Builder setFlags(int); method public android.media.AudioAttributes.Builder setLegacyStreamType(int);
api/system-current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ package android { field @Deprecated public static final String BROADCAST_NETWORK_PRIVILEGED = "android.permission.BROADCAST_NETWORK_PRIVILEGED"; field public static final String CAMERA_DISABLE_TRANSMIT_LED = "android.permission.CAMERA_DISABLE_TRANSMIT_LED"; field public static final String CAPTURE_AUDIO_HOTWORD = "android.permission.CAPTURE_AUDIO_HOTWORD"; field public static final String CAPTURE_MEDIA_OUTPUT = "android.permission.CAPTURE_MEDIA_OUTPUT"; field public static final String CAPTURE_TV_INPUT = "android.permission.CAPTURE_TV_INPUT"; field public static final String CHANGE_APP_IDLE_STATE = "android.permission.CHANGE_APP_IDLE_STATE"; field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"; Loading Loading @@ -3602,6 +3603,7 @@ package android.media.audiopolicy { ctor public AudioMixingRule.Builder(); method public android.media.audiopolicy.AudioMixingRule.Builder addMixRule(int, Object) throws java.lang.IllegalArgumentException; method public android.media.audiopolicy.AudioMixingRule.Builder addRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException; method @NonNull public android.media.audiopolicy.AudioMixingRule.Builder allowPrivilegedPlaybackCapture(boolean); method public android.media.audiopolicy.AudioMixingRule build(); method public android.media.audiopolicy.AudioMixingRule.Builder excludeMixRule(int, Object) throws java.lang.IllegalArgumentException; method public android.media.audiopolicy.AudioMixingRule.Builder excludeRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException; Loading
core/jni/android_media_AudioSystem.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,7 @@ static struct { static jclass gAudioMixingRuleClass; static struct { jfieldID mCriteria; jfieldID mAllowPrivilegedPlaybackCapture; // other fields unused by JNI } gAudioMixingRuleFields; Loading Loading @@ -1868,6 +1869,8 @@ static jint convertAudioMixToNative(JNIEnv *env, jobject jRule = env->GetObjectField(jAudioMix, gAudioMixFields.mRule); jobject jRuleCriteria = env->GetObjectField(jRule, gAudioMixingRuleFields.mCriteria); nAudioMix->mAllowPrivilegedPlaybackCapture = env->GetBooleanField(jRule, gAudioMixingRuleFields.mAllowPrivilegedPlaybackCapture); env->DeleteLocalRef(jRule); jobjectArray jCriteria = (jobjectArray)env->CallObjectMethod(jRuleCriteria, gArrayListMethods.toArray); Loading Loading @@ -2456,6 +2459,8 @@ int register_android_media_AudioSystem(JNIEnv *env) gAudioMixingRuleClass = MakeGlobalRefOrDie(env, audioMixingRuleClass); gAudioMixingRuleFields.mCriteria = GetFieldIDOrDie(env, audioMixingRuleClass, "mCriteria", "Ljava/util/ArrayList;"); gAudioMixingRuleFields.mAllowPrivilegedPlaybackCapture = GetFieldIDOrDie(env, audioMixingRuleClass, "mAllowPrivilegedPlaybackCapture", "Z"); jclass audioMixMatchCriterionClass = FindClassOrDie(env, "android/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion"); Loading
core/res/AndroidManifest.xml +20 −0 Original line number Diff line number Diff line Loading @@ -3562,10 +3562,30 @@ android:protectionLevel="signature" /> <!-- Allows an application to capture audio output. Use the {@code CAPTURE_MEDIA_OUTPUT} permission if only the {@code USAGE_UNKNOWN}), {@code USAGE_MEDIA}) or {@code USAGE_GAME}) usages are intended to be captured. <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" android:protectionLevel="signature|privileged" /> <!-- @SystemApi Allows an application to capture the audio played by other apps that have set an allow capture policy of {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_SYSTEM}. Without this permission, only audio with an allow capture policy of {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_ALL} can be used. There are strong restriction listed at {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_SYSTEM} on what an app can do with the captured audio. See {@code CAPTURE_AUDIO_OUTPUT} for capturing audio use cases other than media playback. <p>Not for use by third-party applications.</p> @hide --> <permission android:name="android.permission.CAPTURE_MEDIA_OUTPUT" android:protectionLevel="signature|privileged" /> <!-- @SystemApi Allows an application to capture audio for hotword detection. <p>Not for use by third-party applications.</p> @hide --> Loading
core/res/res/values/attrs_manifest.xml +13 −2 Original line number Diff line number Diff line Loading @@ -1673,8 +1673,19 @@ This flag is turned on by default. <em>This attribute is usable only by system apps. </em> --> <attr name="allowClearUserDataOnFailedRestore"/> <!-- If {@code true} the app's non sensitive audio can be capture by other apps. The default value is true. --> <!-- If {@code true} the app's non sensitive audio can be capture by other apps with {@code AudioPlaybackCaptureConfiguration} and a {@code MediaProjection}. <p> Non sensitive audio is defined as audio whose {@code AttributeUsage} is {@code USAGE_UNKNOWN}), {@code USAGE_MEDIA}) or {@code USAGE_GAME}). All other usages (eg. {@code USAGE_VOICE_COMMUNICATION}) will not be captured. <p> The default value is: - {@code true} for apps with targetSdkVersion >= 29 (Q). - {@code false} for apps with targetSdkVersion < 29. --> <attr name="allowAudioPlaybackCapture" format="boolean" /> </declare-styleable> <!-- The <code>permission</code> tag declares a security permission that can be Loading