1d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi/* 2d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Copyright (C) 2014 The Android Open Source Project 3d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * 4d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 5d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * you may not use this file except in compliance with the License. 6d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * You may obtain a copy of the License at 7d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * 8d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 9d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * 10d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 11d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 12d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * See the License for the specific language governing permissions and 14d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * limitations under the License. 15d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 16d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 17d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivipackage android.media; 18d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 19d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport android.annotation.IntDef; 206894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Triviimport android.annotation.SystemApi; 21b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Triviimport android.os.Parcel; 22b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Triviimport android.os.Parcelable; 23cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Triviimport android.text.TextUtils; 24d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport android.util.Log; 25d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 26d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.lang.annotation.Retention; 27d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.lang.annotation.RetentionPolicy; 28d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.Collections; 29d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.HashSet; 30a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Triviimport java.util.Iterator; 31e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Triviimport java.util.Objects; 32d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.Set; 33d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 34d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi/** 35d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * A class to encapsulate a collection of attributes describing information about an audio 3604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * stream. 3704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p><code>AudioAttributes</code> supersede the notion of stream types (see for instance 3804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioManager#STREAM_MUSIC} or {@link AudioManager#STREAM_ALARM}) for defining the 3904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * behavior of audio playback. Attributes allow an application to specify more information than is 4004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * conveyed in a stream type by allowing the application to define: 4104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <ul> 4204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <li>usage: "why" you are playing a sound, what is this sound used for. This is achieved with 4304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * the "usage" information. Examples of usage are {@link #USAGE_MEDIA} and {@link #USAGE_ALARM}. 4404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * These two examples are the closest to stream types, but more detailed use cases are 4504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * available. Usage information is more expressive than a stream type, and allows certain 4604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * platforms or routing policies to use this information for more refined volume or routing 4704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * decisions. Usage is the most important information to supply in <code>AudioAttributes</code> 4804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * and it is recommended to build any instance with this information supplied, see 4904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioAttributes.Builder} for exceptions.</li> 5004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <li>content type: "what" you are playing. The content type expresses the general category of 5104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * the content. This information is optional. But in case it is known (for instance 5204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link #CONTENT_TYPE_MOVIE} for a movie streaming service or {@link #CONTENT_TYPE_MUSIC} for 5304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * a music playback application) this information might be used by the audio framework to 5404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * selectively configure some audio post-processing blocks.</li> 5504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <li>flags: "how" is playback to be affected, see the flag definitions for the specific playback 5604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * behaviors they control. </li> 5704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * </ul> 5804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p><code>AudioAttributes</code> are used for example in one of the {@link AudioTrack} 5904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * constructors (see {@link AudioTrack#AudioTrack(AudioAttributes, AudioFormat, int, int, int)}), 6004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * to configure a {@link MediaPlayer} 6104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * (see {@link MediaPlayer#setAudioAttributes(AudioAttributes)} or a 6204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link android.app.Notification} (see {@link android.app.Notification#audioAttributes}). An 6304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <code>AudioAttributes</code> instance is built through its builder, 6404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioAttributes.Builder}. 65d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 66b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivipublic final class AudioAttributes implements Parcelable { 67d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private final static String TAG = "AudioAttributes"; 68d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 69d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 70d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is unknown, or other than the ones defined. 71d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 72d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_UNKNOWN = 0; 73d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 74d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is speech. 75d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 76d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_SPEECH = 1; 77d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 78d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is music. 79d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 80d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_MUSIC = 2; 81d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 82d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is a soundtrack, typically accompanying 83d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a movie or TV program. 84d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 85d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_MOVIE = 3; 86d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 87d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is a sound used to accompany a user 88d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * action, such as a beep or sound effect expressing a key click, or event, such as the 89d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * type of a sound for a bonus being received in a game. These sounds are mostly synthesized 90d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or short Foley sounds. 91d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 92d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_SONIFICATION = 4; 93d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 94d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 95d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is unknown. 96d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 97d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_UNKNOWN = 0; 98d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 99d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is media, such as music, or movie 100d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * soundtracks. 101d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 102d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_MEDIA = 1; 103d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 104d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is voice communications, such as telephony 105d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or VoIP. 106d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 107d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_VOICE_COMMUNICATION = 2; 108d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 109d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is in-call signalling, such as with 110d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a "busy" beep, or DTMF tones. 111d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 112d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; 113d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 114d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is an alarm (e.g. wake-up alarm). 115d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 116d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ALARM = 4; 117d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 118d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification. See other 119d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * notification usages for more specialized uses. 120d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 121d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION = 5; 122d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 123d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is telephony ringtone. 124d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 12589c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi public final static int USAGE_NOTIFICATION_RINGTONE = 6; 12689c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi /** 127d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is a request to enter/end a 128d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * communication, such as a VoIP communication or video-conference. 129d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 130d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; 131d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 132d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification for an "instant" 133d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * communication such as a chat, or SMS. 134d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 135d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; 136d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 137d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification for a 138d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * non-immediate type of communication such as e-mail. 139d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 140d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; 141d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 142d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is to attract the user's attention, 143d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * such as a reminder or low battery warning. 144d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 145d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_EVENT = 10; 146d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 147d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is for accessibility, such as with 148d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a screen reader. 149d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 150d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_ACCESSIBILITY = 11; 151d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 152d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is driving or navigation directions. 153d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 154d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; 155d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 156d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is sonification, such as with user 157d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * interface sounds. 158d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 159d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_SONIFICATION = 13; 160d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 161d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is for game audio. 162d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 163d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_GAME = 14; 1648fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi /** 1658fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi * @hide 1668fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi * Usage value to use when feeding audio to the platform and replacing "traditional" audio 1678fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi * source, such as audio capture devices. 1688fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi */ 1698fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi public final static int USAGE_VIRTUAL_SOURCE = 15; 170d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 171d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 172d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag defining a behavior where the audibility of the sound will be ensured by the system. 173d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 174d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_AUDIBILITY_ENFORCED = 0x1 << 0; 175d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 176d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 177d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag defining a behavior where the playback of the sound is ensured without 178d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * degradation only when going to a secure sink. 179d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 180d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // FIXME not guaranteed yet 1816894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi // TODO add in FLAG_ALL_PUBLIC when supported and in public API 182d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_SECURE = 0x1 << 1; 183d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 184d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 185d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag to enable when the stream is associated with SCO usage. 186d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Internal use only for dealing with legacy STREAM_BLUETOOTH_SCO 187d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 188d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_SCO = 0x1 << 2; 1896894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi /** 1906894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * @hide 1916894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * Flag defining a behavior where the system ensures that the playback of the sound will 1926894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * be compatible with its use as a broadcast for surrounding people and/or devices. 1936894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * Ensures audibility with no or minimal post-processing applied. 1946894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi */ 1956894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi @SystemApi 1966894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi public final static int FLAG_BEACON = 0x1 << 3; 197d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 198b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent /** 199b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent * Flag requesting the use of an output stream supporting hardware A/V synchronization. 200b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent */ 201b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public final static int FLAG_HW_AV_SYNC = 0x1 << 4; 202d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 203bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent /** 204bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * @hide 205bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * Flag requesting capture from the source used for hardware hotword detection. 206bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * To be used with capture preset MediaRecorder.AudioSource.HOTWORD or 207bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * MediaRecorder.AudioSource.VOICE_RECOGNITION. 208bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent */ 209bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent @SystemApi 210bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent public final static int FLAG_HW_HOTWORD = 0x1 << 5; 211bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent 2126894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi private final static int FLAG_ALL = FLAG_AUDIBILITY_ENFORCED | FLAG_SECURE | FLAG_SCO | 213bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent FLAG_BEACON | FLAG_HW_AV_SYNC | FLAG_HW_HOTWORD; 21456340fc2e87985fb3d396b63b28168bf57ebe7ceEric Laurent private final static int FLAG_ALL_PUBLIC = FLAG_AUDIBILITY_ENFORCED | FLAG_HW_AV_SYNC; 2156894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi 216d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mUsage = USAGE_UNKNOWN; 217d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mContentType = CONTENT_TYPE_UNKNOWN; 218701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi private int mSource = MediaRecorder.AudioSource.AUDIO_SOURCE_INVALID; 219d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mFlags = 0x0; 220d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private HashSet<String> mTags; 221a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi private String mFormattedTags; 222d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 223d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private AudioAttributes() { 224d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 225d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 226d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 227d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the content type. 228d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return one of the values that can be set in {@link Builder#setContentType(int)} 229d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 230d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getContentType() { 231d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return mContentType; 232d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 233d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 234d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 235d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the usage. 236d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return one of the values that can be set in {@link Builder#setUsage(int)} 237d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 238d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getUsage() { 239d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return mUsage; 240d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 241d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 242d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 243701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @hide 244701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * Return the capture preset. 245701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @return one of the values that can be set in {@link Builder#setCapturePreset(int)} or a 246701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * negative value if none has been set. 247701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi */ 2481b3541d5eedb332ea01066b4a78a2d06d5304044Jean-Michel Trivi @SystemApi 249701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi public int getCapturePreset() { 250701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi return mSource; 251701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 252701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi 253701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi /** 254d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the flags. 255d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a combined mask of all flags 256d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 257d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getFlags() { 258d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // only return the flags that are public 2596894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi return (mFlags & (FLAG_ALL_PUBLIC)); 260d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 261d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 262d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 263d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 264d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return all the flags, even the non-public ones. 265d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Internal use only 266d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a combined mask of all flags 267d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 268d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getAllFlags() { 2696894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi return (mFlags & FLAG_ALL); 270d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 271d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 272d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 273b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @hide 274d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the set of tags. 275d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a read-only set of all tags stored as strings. 276d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 277d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Set<String> getTags() { 278d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return Collections.unmodifiableSet(mTags); 279d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 280d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 281d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 282d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Builder class for {@link AudioAttributes} objects. 28304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p> Here is an example where <code>Builder</code> is used to define the 28404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioAttributes} to be used by a new <code>AudioTrack</code> instance: 28504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * 28604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <pre class="prettyprint"> 28704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * AudioTrack myTrack = new AudioTrack( 28804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * new AudioAttributes.Builder() 28904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * .setUsage(AudioAttributes.USAGE_MEDIA) 29004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 29104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * .build(), 29204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession); 29304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * </pre> 29404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * 29504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p>By default all types of information (usage, content type, flags) conveyed by an 29604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <code>AudioAttributes</code> instance are set to "unknown". Unknown information will be 29704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * interpreted as a default value that is dependent on the context of use, for instance a 29804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link MediaPlayer} will use a default usage of {@link AudioAttributes#USAGE_MEDIA}. 299d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 300d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public static class Builder { 301d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mUsage = USAGE_UNKNOWN; 302d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mContentType = CONTENT_TYPE_UNKNOWN; 303701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi private int mSource = MediaRecorder.AudioSource.AUDIO_SOURCE_INVALID; 304d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mFlags = 0x0; 305d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private HashSet<String> mTags = new HashSet<String>(); 306d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 307d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 308d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Constructs a new Builder with the defaults. 30904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * By default, usage and content type are respectively {@link AudioAttributes#USAGE_UNKNOWN} 31004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * and {@link AudioAttributes#CONTENT_TYPE_UNKNOWN}, and flags are 0. It is recommended to 31104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * configure the usage (with {@link #setUsage(int)}) or deriving attributes from a legacy 31204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * stream type (with {@link #setLegacyStreamType(int)}) before calling {@link #build()} 31304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * to override any default playback behavior in terms of routing and volume management. 314d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 315d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder() { 316d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 317d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 318d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 319d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Constructs a new Builder from a given AudioAttributes 320d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param aa the AudioAttributes object whose data will be reused in the new Builder. 321d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 322d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @SuppressWarnings("unchecked") // for cloning of mTags 323d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder(AudioAttributes aa) { 324d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = aa.mUsage; 325d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = aa.mContentType; 326d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags = aa.mFlags; 327d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mTags = (HashSet<String>) aa.mTags.clone(); 328d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 329d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 330d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 331d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Combines all of the attributes that have been set and return a new 332d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes} object. 333d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a new {@link AudioAttributes} object 334d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 335d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @SuppressWarnings("unchecked") // for cloning of mTags 336d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public AudioAttributes build() { 337d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi AudioAttributes aa = new AudioAttributes(); 338d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mContentType = mContentType; 339d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mUsage = mUsage; 340701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi aa.mSource = mSource; 341d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mFlags = mFlags; 342d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mTags = (HashSet<String>) mTags.clone(); 343cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi aa.mFormattedTags = TextUtils.join(";", mTags); 344d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return aa; 345d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 346d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 347d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 348d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the attribute describing what is the intended use of the the audio signal, 349d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * such as alarm or ringtone. 350d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param usage one of {@link AudioAttributes#USAGE_UNKNOWN}, 351d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_MEDIA}, 352d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_VOICE_COMMUNICATION}, 353d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_VOICE_COMMUNICATION_SIGNALLING}, 354d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ALARM}, {@link AudioAttributes#USAGE_NOTIFICATION}, 35589c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_RINGTONE}, 356d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_REQUEST}, 357d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_INSTANT}, 358d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_DELAYED}, 359d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_EVENT}, 360d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_ACCESSIBILITY}, 361d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_NAVIGATION_GUIDANCE}, 362d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_SONIFICATION}, 363d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_GAME}. 364d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 365d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 366d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setUsage(@AttributeUsage int usage) { 367d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch (usage) { 368d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_UNKNOWN: 369d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_MEDIA: 370d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 371d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 372d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ALARM: 373d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION: 37489c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi case USAGE_NOTIFICATION_RINGTONE: 375d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 376d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 377d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 378d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 379d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 380d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 381d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 382d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_GAME: 3838fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi case USAGE_VIRTUAL_SOURCE: 384d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = usage; 385d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 386d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 387d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_UNKNOWN; 388d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 389d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 390d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 391d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 392d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 393d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the attribute describing the content type of the audio signal, such as speech, 394d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or music. 395d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param contentType the content type values, one of 396d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_MOVIE}, 397d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_MUSIC}, 398d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_SONIFICATION}, 399d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_SPEECH}, 400d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_UNKNOWN}. 401d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 402d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 403d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setContentType(@AttributeContentType int contentType) { 404d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch (contentType) { 405d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_UNKNOWN: 406d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_MOVIE: 407d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_MUSIC: 408d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_SONIFICATION: 409d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_SPEECH: 410d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = contentType; 411d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 412d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 413d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = CONTENT_TYPE_UNKNOWN; 414d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 415d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 416d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 417d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 418d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 419d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the combination of flags. 420d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param flags the {@link AudioAttributes#FLAG_AUDIBILITY_ENFORCED} flag. 421d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 422d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 423d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setFlags(int flags) { 4246894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi flags &= AudioAttributes.FLAG_ALL; 425d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= flags; 426d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 427d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 428d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 429d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 430b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @hide 431d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Add a custom tag stored as a string 432d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param tag 433d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 434d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 435d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder addTag(String tag) { 436d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mTags.add(tag); 437d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 438d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 439d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 440d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 44104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * Sets attributes as inferred from the legacy stream types. 44204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * Use this method when building an {@link AudioAttributes} instance to initialize some of 44304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * the attributes by information derived from a legacy stream type. 444d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param streamType one of {@link AudioManager#STREAM_VOICE_CALL}, 445d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioManager#STREAM_SYSTEM}, {@link AudioManager#STREAM_RING}, 446d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioManager#STREAM_MUSIC}, {@link AudioManager#STREAM_ALARM}, 447d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or {@link AudioManager#STREAM_NOTIFICATION}. 448d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 449d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 450d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setLegacyStreamType(int streamType) { 451d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return setInternalLegacyStreamType(streamType); 452d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 453d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 454d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 455d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 456d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * For internal framework use only, enables building from hidden stream types. 457d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param streamType 458d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 459d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 460d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setInternalLegacyStreamType(int streamType) { 461d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch(streamType) { 462d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_VOICE_CALL: 463d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 464d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 465d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM_ENFORCED: 466d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_AUDIBILITY_ENFORCED; 467d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // intended fall through, attributes in common with STREAM_SYSTEM 468d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM: 469d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 470d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 471d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_RING: 472d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 473d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 474d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_MUSIC: 475d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_MUSIC; 476d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 477d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_ALARM: 478d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 479d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 480d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_NOTIFICATION: 481d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 482d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 483d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_BLUETOOTH_SCO: 484d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 485d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_SCO; 486d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 487d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_DTMF: 488d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 489d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 490d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_TTS: 491d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 492d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 493d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 494701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi Log.e(TAG, "Invalid stream type " + streamType + " for AudioAttributes"); 495701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 496c1601f73b98b004b6210631830d2184255037948Jean-Michel Trivi mUsage = usageForLegacyStreamType(streamType); 497701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi return this; 498701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 499701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi 500701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi /** 501701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @hide 502701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * Sets the capture preset. 503701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * Use this audio attributes configuration method when building an {@link AudioRecord} 504701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * instance with {@link AudioRecord#AudioRecord(AudioAttributes, AudioFormat, int)}. 505701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @param preset one of {@link MediaRecorder.AudioSource#DEFAULT}, 506701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * {@link MediaRecorder.AudioSource#MIC}, {@link MediaRecorder.AudioSource#CAMCORDER}, 507701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * {@link MediaRecorder.AudioSource#VOICE_RECOGNITION} or 508701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION}. 509701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @return the same Builder instance. 510701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi */ 5111b3541d5eedb332ea01066b4a78a2d06d5304044Jean-Michel Trivi @SystemApi 512701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi public Builder setCapturePreset(int preset) { 513701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi switch (preset) { 514701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.DEFAULT: 515701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.MIC: 516701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.CAMCORDER: 517701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.VOICE_RECOGNITION: 518701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.VOICE_COMMUNICATION: 519701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi mSource = preset; 520701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi break; 521701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi default: 522701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi Log.e(TAG, "Invalid capture preset " + preset + " for AudioAttributes"); 523701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 524701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi return this; 525701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 526701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi 527701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi /** 528701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @hide 529ce4483cb83afb3a42a32ef2cb00cf04d6f9018fdBenson Huang * Same as {@link #setCapturePreset(int)} but authorizes the use of HOTWORD, 530ce4483cb83afb3a42a32ef2cb00cf04d6f9018fdBenson Huang * REMOTE_SUBMIX and FM_TUNER. 531701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @param preset 532701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @return the same Builder instance. 533701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi */ 534701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi public Builder setInternalCapturePreset(int preset) { 535701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi if ((preset == MediaRecorder.AudioSource.HOTWORD) 536ce4483cb83afb3a42a32ef2cb00cf04d6f9018fdBenson Huang || (preset == MediaRecorder.AudioSource.REMOTE_SUBMIX) 537ce4483cb83afb3a42a32ef2cb00cf04d6f9018fdBenson Huang || (preset == MediaRecorder.AudioSource.FM_TUNER)) { 538701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi mSource = preset; 539701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } else { 540701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi setCapturePreset(preset); 541d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 542d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 543d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 544d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }; 545d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 546b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 547b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public int describeContents() { 548b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return 0; 549b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 550b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 5518df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 5528df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * @hide 5538df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Used to indicate that when parcelling, the tags should be parcelled through the flattened 5548df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * formatted string, not through the array of strings. 5558df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Keep in sync with frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp 5568df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * see definition of kAudioAttributesMarshallTagFlattenTags 5578df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 5588df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi public final static int FLATTEN_TAGS = 0x1; 5598df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 5608df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * When adding tags for writeToParcel(Parcel, int), add them in the list of flags (| NEW_FLAG) 5618df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 5628df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi private final static int ALL_PARCEL_FLAGS = FLATTEN_TAGS; 563b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 564b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public void writeToParcel(Parcel dest, int flags) { 565b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mUsage); 566b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mContentType); 567701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi dest.writeInt(mSource); 568b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mFlags); 5698df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeInt(flags & ALL_PARCEL_FLAGS); 5708df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if ((flags & FLATTEN_TAGS) == 0) { 5718df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = new String[mTags.size()]; 5728df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.toArray(tagsArray); 5738df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeStringArray(tagsArray); 5748df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else if ((flags & FLATTEN_TAGS) == FLATTEN_TAGS) { 5758df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeString(mFormattedTags); 5768df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 577b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 578b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 579b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi private AudioAttributes(Parcel in) { 580b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mUsage = in.readInt(); 581b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mContentType = in.readInt(); 582701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi mSource = in.readInt(); 583b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mFlags = in.readInt(); 5848df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi boolean hasFlattenedTags = ((in.readInt() & FLATTEN_TAGS) == FLATTEN_TAGS); 585b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mTags = new HashSet<String>(); 5868df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if (hasFlattenedTags) { 587cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi mFormattedTags = new String(in.readString()); 588cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi mTags.add(mFormattedTags); 5898df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else { 5908df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = in.readStringArray(); 5918df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi for (int i = tagsArray.length - 1 ; i >= 0 ; i--) { 5928df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.add(tagsArray[i]); 5938df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 594cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi mFormattedTags = TextUtils.join(";", mTags); 595b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 596b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 597b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 598b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public static final Parcelable.Creator<AudioAttributes> CREATOR 599b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi = new Parcelable.Creator<AudioAttributes>() { 600b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi /** 601b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * Rebuilds an AudioAttributes previously stored with writeToParcel(). 602b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @param p Parcel object to read the AudioAttributes from 603b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @return a new AudioAttributes created from the data in the parcel 604b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi */ 605b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes createFromParcel(Parcel p) { 606b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes(p); 607b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 608b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes[] newArray(int size) { 609b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes[size]; 610b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 611b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi }; 612b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 613e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi @Override 614e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi public boolean equals(Object o) { 615e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi if (this == o) return true; 616e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi if (o == null || getClass() != o.getClass()) return false; 617e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 618e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi AudioAttributes that = (AudioAttributes) o; 619e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 620e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi return ((mContentType == that.mContentType) 621e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mFlags == that.mFlags) 622e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mSource == that.mSource) 623e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mUsage == that.mUsage) 624e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi //mFormattedTags is never null due to assignment in Builder or unmarshalling 625e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mFormattedTags.equals(that.mFormattedTags))); 626e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi } 627e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 628e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi @Override 629e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi public int hashCode() { 630e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi return Objects.hash(mContentType, mFlags, mSource, mUsage, mFormattedTags); 631e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi } 632e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 633a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi @Override 634a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String toString () { 635a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("AudioAttributes:" 636a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " usage=" + mUsage 637a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " content=" + mContentType 638a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " flags=0x" + Integer.toHexString(mFlags).toUpperCase() 639cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi + " tags=" + mFormattedTags); 640a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 641a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi 642998ff75484f1eecb6ebef150de4ac8456d22e864Jean-Michel Trivi /** @hide */ 643a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String usageToString() { 6447b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return usageToString(mUsage); 6457b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 6467b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock 6477b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock /** @hide */ 6487b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock public static String usageToString(int usage) { 6497b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock switch(usage) { 650a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_UNKNOWN: 651a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_UNKNOWN"); 652a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_MEDIA: 653a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_MEDIA"); 654a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 655a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_VOICE_COMMUNICATION"); 656a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 657a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_VOICE_COMMUNICATION"); 658a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ALARM: 659a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ALARM"); 660a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION: 661a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 66289c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi case USAGE_NOTIFICATION_RINGTONE: 663a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 664a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 665a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 666a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 667a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_INSTANT"); 668a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 669a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_DELAYED"); 670a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 671a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_EVENT"); 672a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 673a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_ACCESSIBILITY"); 674a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 675a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"); 676a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 677a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_SONIFICATION"); 678a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_GAME: 679a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_GAME"); 680a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi default: 6817b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return new String("unknown usage " + usage); 6827b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 6837b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 6847b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock 6857b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock /** @hide */ 6867b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock public static int usageForLegacyStreamType(int streamType) { 6877b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock switch(streamType) { 6887b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_VOICE_CALL: 6897b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION; 6907b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_SYSTEM_ENFORCED: 6917b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_SYSTEM: 6927b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ASSISTANCE_SONIFICATION; 6937b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_RING: 69489c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi return USAGE_NOTIFICATION_RINGTONE; 6957b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_MUSIC: 6967b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_MEDIA; 6977b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_ALARM: 6987b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ALARM; 6997b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_NOTIFICATION: 7007b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_NOTIFICATION; 7017b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_BLUETOOTH_SCO: 7027b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION; 7037b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_DTMF: 7047b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION_SIGNALLING; 7057b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_TTS: 7067b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ASSISTANCE_ACCESSIBILITY; 7077b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock default: 7087b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_UNKNOWN; 709a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 710a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 711b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 712d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** @hide */ 71309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi public static int toLegacyStreamType(AudioAttributes aa) { 71409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi // flags to stream type mapping 71509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi if ((aa.getFlags() & FLAG_AUDIBILITY_ENFORCED) == FLAG_AUDIBILITY_ENFORCED) { 71609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_SYSTEM_ENFORCED; 71709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 71809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi if ((aa.getFlags() & FLAG_SCO) == FLAG_SCO) { 71909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_BLUETOOTH_SCO; 72009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 72109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi 72209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi // usage to stream type mapping 72309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi switch (aa.getUsage()) { 72409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_MEDIA: 72509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_GAME: 72609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 72709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 72809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_MUSIC; 72909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 73009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_SYSTEM; 73109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 73209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_VOICE_CALL; 73309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 73409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_DTMF; 73509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ALARM: 73609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_ALARM; 73789c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi case USAGE_NOTIFICATION_RINGTONE: 73809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_RING; 73909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION: 74009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 74109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 74209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 74309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 74409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_NOTIFICATION; 74509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_UNKNOWN: 74609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi default: 74709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_MUSIC; 74809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 74909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 75009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi 75109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi /** @hide */ 752d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 753d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_UNKNOWN, 754d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_MEDIA, 755d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION, 756d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION_SIGNALLING, 757d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ALARM, 758d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION, 75989c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi USAGE_NOTIFICATION_RINGTONE, 760d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_REQUEST, 761d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_INSTANT, 762d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_DELAYED, 763d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_EVENT, 764d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_ACCESSIBILITY, 765d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_NAVIGATION_GUIDANCE, 766d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_SONIFICATION, 767d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_GAME 768d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 769d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 770d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeUsage {} 771d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 772d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** @hide */ 773d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 774d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_UNKNOWN, 775d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SPEECH, 776d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MUSIC, 777d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MOVIE, 778d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SONIFICATION 779d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 780d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 781d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeContentType {} 782d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi} 783