diff options
| author | 2024-11-04 02:33:09 +0000 | |
|---|---|---|
| committer | 2024-11-04 02:33:09 +0000 | |
| commit | 466d16930a30c7ac51fc312e98aa84f792c38c9b (patch) | |
| tree | ca912a1bb1a911725362fef3c500186ea8a3941b | |
| parent | d9d54322afac2ebd5a74ae513efa600d0dcc44d3 (diff) | |
| parent | b87fa1c015447273f210ac7b5c98ea16b806a349 (diff) | |
Merge "Revert "Revert "AudioAttributes: add SPEAKER_CLEANUP to system u..."" into main
| -rw-r--r-- | core/api/system-current.txt | 1 | ||||
| -rw-r--r-- | media/java/android/media/AudioAttributes.java | 32 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/MediaFocusControl.java | 1 |
3 files changed, 26 insertions, 8 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 047a0df164b1..02cd00d0f86a 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -7234,6 +7234,7 @@ package android.media { field @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public static final int USAGE_CALL_ASSISTANT = 17; // 0x11 field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_EMERGENCY = 1000; // 0x3e8 field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_SAFETY = 1001; // 0x3e9 + field @FlaggedApi("android.media.audio.speaker_cleanup_usage") @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_SPEAKER_CLEANUP = 1004; // 0x3ec field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_VEHICLE_STATUS = 1002; // 0x3ea } diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java index 1db719828c76..5b9054797bed 100644 --- a/media/java/android/media/AudioAttributes.java +++ b/media/java/android/media/AudioAttributes.java @@ -16,11 +16,15 @@ package android.media; +import static android.media.audio.Flags.FLAG_SPEAKER_CLEANUP_USAGE; + +import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.TestApi; +// TODO switch from HIDL imports to AIDL import android.audio.policy.configuration.V7_0.AudioUsage; import android.compat.annotation.UnsupportedAppUsage; import android.media.audiopolicy.AudioProductStrategy; @@ -247,6 +251,16 @@ public final class AudioAttributes implements Parcelable { public static final int USAGE_ANNOUNCEMENT = SYSTEM_USAGE_OFFSET + 3; /** + * @hide + * Usage value to use when a system application plays a signal intended to clean up the + * speaker transducers and free them of deposits of dust or water. + */ + @FlaggedApi(FLAG_SPEAKER_CLEANUP_USAGE) + @SystemApi + @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) + public static final int USAGE_SPEAKER_CLEANUP = SYSTEM_USAGE_OFFSET + 4; + + /** * IMPORTANT: when adding new usage types, add them to SDK_USAGES and update SUPPRESSIBLE_USAGES * if applicable, as well as audioattributes.proto. * Also consider adding them to <aaudio/AAudio.h> for the NDK. @@ -1521,6 +1535,8 @@ public final class AudioAttributes implements Parcelable { return "USAGE_VEHICLE_STATUS"; case USAGE_ANNOUNCEMENT: return "USAGE_ANNOUNCEMENT"; + case USAGE_SPEAKER_CLEANUP: + return "USAGE_SPEAKER_CLEANUP"; default: return "unknown usage " + usage; } @@ -1661,12 +1677,8 @@ public final class AudioAttributes implements Parcelable { } /** - * @param usage one of {@link AttributeSystemUsage}, - * {@link AttributeSystemUsage#USAGE_CALL_ASSISTANT}, - * {@link AttributeSystemUsage#USAGE_EMERGENCY}, - * {@link AttributeSystemUsage#USAGE_SAFETY}, - * {@link AttributeSystemUsage#USAGE_VEHICLE_STATUS}, - * {@link AttributeSystemUsage#USAGE_ANNOUNCEMENT} + * Returns whether the given usage can only be used by system-privileged components + * @param usage one of {@link AttributeSystemUsage}. * @return boolean indicating if the usage is a system usage or not * @hide */ @@ -1676,7 +1688,8 @@ public final class AudioAttributes implements Parcelable { || usage == USAGE_EMERGENCY || usage == USAGE_SAFETY || usage == USAGE_VEHICLE_STATUS - || usage == USAGE_ANNOUNCEMENT); + || usage == USAGE_ANNOUNCEMENT + || usage == USAGE_SPEAKER_CLEANUP); } /** @@ -1790,6 +1803,7 @@ public final class AudioAttributes implements Parcelable { case USAGE_SAFETY: case USAGE_VEHICLE_STATUS: case USAGE_ANNOUNCEMENT: + case USAGE_SPEAKER_CLEANUP: case USAGE_UNKNOWN: return AudioSystem.STREAM_MUSIC; default: @@ -1829,7 +1843,8 @@ public final class AudioAttributes implements Parcelable { USAGE_EMERGENCY, USAGE_SAFETY, USAGE_VEHICLE_STATUS, - USAGE_ANNOUNCEMENT + USAGE_ANNOUNCEMENT, + USAGE_SPEAKER_CLEANUP }) @Retention(RetentionPolicy.SOURCE) public @interface AttributeSystemUsage {} @@ -1879,6 +1894,7 @@ public final class AudioAttributes implements Parcelable { USAGE_SAFETY, USAGE_VEHICLE_STATUS, USAGE_ANNOUNCEMENT, + USAGE_SPEAKER_CLEANUP, }) @Retention(RetentionPolicy.SOURCE) public @interface AttributeUsage {} diff --git a/services/core/java/com/android/server/audio/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java index 1da62d74f0df..1604e94e5a6d 100644 --- a/services/core/java/com/android/server/audio/MediaFocusControl.java +++ b/services/core/java/com/android/server/audio/MediaFocusControl.java @@ -1068,6 +1068,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer { switch (attr.getUsage()) { case AudioAttributes.USAGE_MEDIA: case AudioAttributes.USAGE_GAME: + case AudioAttributes.USAGE_SPEAKER_CLEANUP: return 1000; case AudioAttributes.USAGE_ALARM: case AudioAttributes.USAGE_NOTIFICATION_RINGTONE: |