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

Commit cba4b211 authored by Kevin Rocard's avatar Kevin Rocard Committed by Android (Google) Code Review
Browse files

Merge "Introduce a system APC with its corresponding opt-out"

parents 49cf94e9 a3a4bbba
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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";
@@ -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;
+5 −0
Original line number Diff line number Diff line
@@ -144,6 +144,7 @@ static struct {
static jclass gAudioMixingRuleClass;
static struct {
    jfieldID    mCriteria;
    jfieldID    mAllowPrivilegedPlaybackCapture;
    // other fields unused by JNI
} gAudioMixingRuleFields;

@@ -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);
@@ -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");
+20 −0
Original line number Diff line number Diff line
@@ -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 -->
+13 −2
Original line number Diff line number Diff line
@@ -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