From b097d9e1cdf848e3ae8d0ad6be1111466645b9c0 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Thu, 25 Jun 2020 17:55:39 -0700 Subject: [PATCH] AudioAttributes: fix setter for flags A regression was introduced by d0c4968 which prevented @SystemApi flags to be set in the builder of an AudioAttributes, causing FLAG_BYPASS_INTERRUPTION_POLICY and FLAG_BYPASS_MUTE to get ignored. Note that even though any client can set System flags, they will be discarded and ignored server side in the audio policy service if the caller doesn't have the permissions. Bug: 154205921 Test: fire alerts with packages/apps/CellBroadcastReceiver/tests/testapp Change-Id: I9d593787c18a510aa702dc0da85254f0d9574f11 --- media/java/android/media/AudioAttributes.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java index fe0c2d21d4424..158482a6a8339 100644 --- a/media/java/android/media/AudioAttributes.java +++ b/media/java/android/media/AudioAttributes.java @@ -452,6 +452,10 @@ public final class AudioAttributes implements Parcelable { | FLAG_NO_SYSTEM_CAPTURE | FLAG_CAPTURE_PRIVATE; private final static int FLAG_ALL_PUBLIC = FLAG_AUDIBILITY_ENFORCED | FLAG_HW_AV_SYNC | FLAG_LOW_LATENCY; + /* mask of flags that can be set by SDK and System APIs through the Builder */ + private static final int FLAG_ALL_API_SET = FLAG_ALL_PUBLIC + | FLAG_BYPASS_INTERRUPTION_POLICY + | FLAG_BYPASS_MUTE; /** * Indicates that the audio may be captured by any app. @@ -838,7 +842,7 @@ public final class AudioAttributes implements Parcelable { * @return the same Builder instance. */ public Builder setFlags(int flags) { - flags &= AudioAttributes.FLAG_ALL_PUBLIC; + flags &= AudioAttributes.FLAG_ALL_API_SET; mFlags |= flags; return this; }