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; 20d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Triviimport android.annotation.NonNull; 216894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Triviimport android.annotation.SystemApi; 22f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Triviimport android.os.Bundle; 23b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Triviimport android.os.Parcel; 24b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Triviimport android.os.Parcelable; 25cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Triviimport android.text.TextUtils; 26d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport android.util.Log; 27e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Triviimport android.util.SparseIntArray; 28d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 29d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.lang.annotation.Retention; 30d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.lang.annotation.RetentionPolicy; 31d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.Collections; 32d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.HashSet; 33e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Triviimport java.util.Objects; 34d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.Set; 35d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 36d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi/** 37d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * A class to encapsulate a collection of attributes describing information about an audio 3804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * stream. 3904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p><code>AudioAttributes</code> supersede the notion of stream types (see for instance 4004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioManager#STREAM_MUSIC} or {@link AudioManager#STREAM_ALARM}) for defining the 4104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * behavior of audio playback. Attributes allow an application to specify more information than is 4204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * conveyed in a stream type by allowing the application to define: 4304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <ul> 4404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <li>usage: "why" you are playing a sound, what is this sound used for. This is achieved with 4504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * the "usage" information. Examples of usage are {@link #USAGE_MEDIA} and {@link #USAGE_ALARM}. 4604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * These two examples are the closest to stream types, but more detailed use cases are 4704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * available. Usage information is more expressive than a stream type, and allows certain 4804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * platforms or routing policies to use this information for more refined volume or routing 4904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * decisions. Usage is the most important information to supply in <code>AudioAttributes</code> 5004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * and it is recommended to build any instance with this information supplied, see 5104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioAttributes.Builder} for exceptions.</li> 5204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <li>content type: "what" you are playing. The content type expresses the general category of 5304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * the content. This information is optional. But in case it is known (for instance 5404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link #CONTENT_TYPE_MOVIE} for a movie streaming service or {@link #CONTENT_TYPE_MUSIC} for 5504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * a music playback application) this information might be used by the audio framework to 5604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * selectively configure some audio post-processing blocks.</li> 5704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <li>flags: "how" is playback to be affected, see the flag definitions for the specific playback 5804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * behaviors they control. </li> 5904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * </ul> 6004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p><code>AudioAttributes</code> are used for example in one of the {@link AudioTrack} 6104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * constructors (see {@link AudioTrack#AudioTrack(AudioAttributes, AudioFormat, int, int, int)}), 6204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * to configure a {@link MediaPlayer} 6304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * (see {@link MediaPlayer#setAudioAttributes(AudioAttributes)} or a 6404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link android.app.Notification} (see {@link android.app.Notification#audioAttributes}). An 6504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <code>AudioAttributes</code> instance is built through its builder, 6604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioAttributes.Builder}. 67d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 68b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivipublic final class AudioAttributes implements Parcelable { 69d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private final static String TAG = "AudioAttributes"; 70d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 71d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 72d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is unknown, or other than the ones defined. 73d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 74d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_UNKNOWN = 0; 75d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 76d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is speech. 77d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 78d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_SPEECH = 1; 79d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 80d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is music. 81d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 82d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_MUSIC = 2; 83d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 84d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is a soundtrack, typically accompanying 85d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a movie or TV program. 86d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 87d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_MOVIE = 3; 88d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 89d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is a sound used to accompany a user 90d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * action, such as a beep or sound effect expressing a key click, or event, such as the 91d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * type of a sound for a bonus being received in a game. These sounds are mostly synthesized 92d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or short Foley sounds. 93d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 94d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_SONIFICATION = 4; 95d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 96d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 97d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is unknown. 98d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 99d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_UNKNOWN = 0; 100d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 101d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is media, such as music, or movie 102d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * soundtracks. 103d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 104d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_MEDIA = 1; 105d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 106d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is voice communications, such as telephony 107d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or VoIP. 108d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 109d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_VOICE_COMMUNICATION = 2; 110d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 111d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is in-call signalling, such as with 112d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a "busy" beep, or DTMF tones. 113d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 114d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; 115d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 116d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is an alarm (e.g. wake-up alarm). 117d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 118d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ALARM = 4; 119d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 120d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification. See other 121d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * notification usages for more specialized uses. 122d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 123d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION = 5; 124d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 125d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is telephony ringtone. 126d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 12789c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi public final static int USAGE_NOTIFICATION_RINGTONE = 6; 12889c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi /** 129d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is a request to enter/end a 130d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * communication, such as a VoIP communication or video-conference. 131d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 132d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; 133d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 134d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification for an "instant" 135d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * communication such as a chat, or SMS. 136d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 137d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; 138d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 139d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification for a 140d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * non-immediate type of communication such as e-mail. 141d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 142d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; 143d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 144d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is to attract the user's attention, 145d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * such as a reminder or low battery warning. 146d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 147d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_EVENT = 10; 148d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 149d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is for accessibility, such as with 150d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a screen reader. 151d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 152d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_ACCESSIBILITY = 11; 153d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 154d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is driving or navigation directions. 155d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 156d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; 157d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 158d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is sonification, such as with user 159d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * interface sounds. 160d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 161d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_SONIFICATION = 13; 162d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 163d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is for game audio. 164d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 165d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_GAME = 14; 1668fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi /** 1678fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi * @hide 1688fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi * Usage value to use when feeding audio to the platform and replacing "traditional" audio 1698fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi * source, such as audio capture devices. 1708fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi */ 1718fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi public final static int USAGE_VIRTUAL_SOURCE = 15; 172d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 173d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 174e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * IMPORTANT: when adding new usage types, add them to SDK_USAGES and update SUPPRESSIBLE_USAGES 175e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * if applicable. 176e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi */ 177e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi 178e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi /** 179e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * @hide 180e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * Denotes a usage for notifications that do not expect immediate intervention from the user, 181e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * will be muted when the Zen mode disables notifications 182e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * @see #SUPPRESSIBLE_USAGES 183e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi */ 184e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi public final static int SUPPRESSIBLE_NOTIFICATION = 1; 185e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi /** 186e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * @hide 187e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * Denotes a usage for notifications that do expect immediate intervention from the user, 188e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * will be muted when the Zen mode disables calls 189e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * @see #SUPPRESSIBLE_USAGES 190e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi */ 191e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi public final static int SUPPRESSIBLE_CALL = 2; 192e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi 193e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi /** 194e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * @hide 195e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * Array of all usage types for calls and notifications to assign the suppression behavior, 196e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * used by the Zen mode restrictions. 197e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * @see com.android.server.notification.ZenModeHelper 198e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi */ 199e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi public static final SparseIntArray SUPPRESSIBLE_USAGES; 200e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi 201e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi static { 202e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi SUPPRESSIBLE_USAGES = new SparseIntArray(); 203e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION, SUPPRESSIBLE_NOTIFICATION); 204e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_RINGTONE, SUPPRESSIBLE_CALL); 205e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_REQUEST,SUPPRESSIBLE_CALL); 206e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_INSTANT,SUPPRESSIBLE_NOTIFICATION); 207e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_DELAYED,SUPPRESSIBLE_NOTIFICATION); 208e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_EVENT, SUPPRESSIBLE_NOTIFICATION); 209e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi } 210e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi 211e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi /** 212e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * @hide 213e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi * Array of all usage types exposed in the SDK that applications can use. 214e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi */ 215e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi public final static int[] SDK_USAGES = { 216e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_UNKNOWN, 217e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_MEDIA, 218e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_VOICE_COMMUNICATION, 219e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_VOICE_COMMUNICATION_SIGNALLING, 220e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_ALARM, 221e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_NOTIFICATION, 222e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_NOTIFICATION_RINGTONE, 223e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_REQUEST, 224e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_INSTANT, 225e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_DELAYED, 226e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_NOTIFICATION_EVENT, 227e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_ASSISTANCE_ACCESSIBILITY, 228e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_ASSISTANCE_NAVIGATION_GUIDANCE, 229e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_ASSISTANCE_SONIFICATION, 230e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi USAGE_GAME 231e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi }; 232e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi 233e743bda5dec3c81ed6292c06b97b0c9f41464907Jean-Michel Trivi /** 234d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag defining a behavior where the audibility of the sound will be ensured by the system. 235d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 236d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_AUDIBILITY_ENFORCED = 0x1 << 0; 237d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 238d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 239d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag defining a behavior where the playback of the sound is ensured without 240d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * degradation only when going to a secure sink. 241d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 242d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // FIXME not guaranteed yet 2436894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi // TODO add in FLAG_ALL_PUBLIC when supported and in public API 244d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_SECURE = 0x1 << 1; 245d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 246d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 247d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag to enable when the stream is associated with SCO usage. 248d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Internal use only for dealing with legacy STREAM_BLUETOOTH_SCO 249d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 250d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_SCO = 0x1 << 2; 2516894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi /** 2526894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * @hide 2536894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * Flag defining a behavior where the system ensures that the playback of the sound will 2546894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * be compatible with its use as a broadcast for surrounding people and/or devices. 2556894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi * Ensures audibility with no or minimal post-processing applied. 2566894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi */ 2576894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi @SystemApi 2586894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi public final static int FLAG_BEACON = 0x1 << 3; 259d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 260b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent /** 261b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent * Flag requesting the use of an output stream supporting hardware A/V synchronization. 262b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent */ 263b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public final static int FLAG_HW_AV_SYNC = 0x1 << 4; 264d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 265bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent /** 266bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * @hide 267bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * Flag requesting capture from the source used for hardware hotword detection. 268bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * To be used with capture preset MediaRecorder.AudioSource.HOTWORD or 269bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent * MediaRecorder.AudioSource.VOICE_RECOGNITION. 270bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent */ 271bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent @SystemApi 272bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent public final static int FLAG_HW_HOTWORD = 0x1 << 5; 273bdad1afa92a6e7cd688061d5432f25a3dd15b64eEric Laurent 274bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock /** 275bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock * @hide 276bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock * Flag requesting audible playback even under limited interruptions. 277bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock */ 278bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock @SystemApi 279bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock public final static int FLAG_BYPASS_INTERRUPTION_POLICY = 0x1 << 6; 280bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock 281bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock /** 282bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock * @hide 283bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock * Flag requesting audible playback even when the underlying stream is muted. 284bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock */ 285bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock @SystemApi 286bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock public final static int FLAG_BYPASS_MUTE = 0x1 << 7; 287bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock 288dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk /** 2892050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * Flag requesting a low latency path when creating an AudioTrack. 290dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk * When using this flag, the sample rate must match the native sample rate 291dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk * of the device. Effects processing is also unavailable. 2922050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * 2932050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * Note that if this flag is used without specifying a bufferSizeInBytes then the 2942050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * AudioTrack's actual buffer size may be too small. It is recommended that a fairly 2952050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * large buffer should be specified when the AudioTrack is created. 2962050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * Then the actual size can be reduced by calling 2972050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * {@link AudioTrack#setBufferSizeInFrames(int)}. The buffer size can be optimized 2982050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * by lowering it after each write() call until the audio glitches, which is detected by calling 2992050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * {@link AudioTrack#getUnderrunCount()}. Then the buffer size can be increased 3002050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * until there are no glitches. 3012050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * This tuning step should be done while playing silence. 3022050f6cb431a6d86734f0e998ca7916619144e3fPhil Burk * This technique provides a compromise between latency and glitch rate. 303dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk */ 304dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk public final static int FLAG_LOW_LATENCY = 0x1 << 8; 305dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk 3066894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi private final static int FLAG_ALL = FLAG_AUDIBILITY_ENFORCED | FLAG_SECURE | FLAG_SCO | 307bbfd31a5d4f126167e20fa8bd256c810cf8c2c85John Spurlock FLAG_BEACON | FLAG_HW_AV_SYNC | FLAG_HW_HOTWORD | FLAG_BYPASS_INTERRUPTION_POLICY | 308dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk FLAG_BYPASS_MUTE | FLAG_LOW_LATENCY; 309dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk private final static int FLAG_ALL_PUBLIC = FLAG_AUDIBILITY_ENFORCED | 310dd73142b53e8f693c17335ea4895b84d37ccbae4Phil Burk FLAG_HW_AV_SYNC | FLAG_LOW_LATENCY; 3116894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi 312d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mUsage = USAGE_UNKNOWN; 313d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mContentType = CONTENT_TYPE_UNKNOWN; 314701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi private int mSource = MediaRecorder.AudioSource.AUDIO_SOURCE_INVALID; 315d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mFlags = 0x0; 316d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private HashSet<String> mTags; 317a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi private String mFormattedTags; 318f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi private Bundle mBundle; // lazy-initialized, may be null 319d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 320d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private AudioAttributes() { 321d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 322d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 323d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 324d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the content type. 325d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return one of the values that can be set in {@link Builder#setContentType(int)} 326d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 327d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getContentType() { 328d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return mContentType; 329d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 330d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 331d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 332d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the usage. 333d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return one of the values that can be set in {@link Builder#setUsage(int)} 334d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 335d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getUsage() { 336d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return mUsage; 337d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 338d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 339d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 340701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @hide 341701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * Return the capture preset. 342701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @return one of the values that can be set in {@link Builder#setCapturePreset(int)} or a 343701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * negative value if none has been set. 344701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi */ 3451b3541d5eedb332ea01066b4a78a2d06d5304044Jean-Michel Trivi @SystemApi 346701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi public int getCapturePreset() { 347701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi return mSource; 348701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 349701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi 350701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi /** 351d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the flags. 352d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a combined mask of all flags 353d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 354d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getFlags() { 355d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // only return the flags that are public 3566894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi return (mFlags & (FLAG_ALL_PUBLIC)); 357d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 358d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 359d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 360d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 361d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return all the flags, even the non-public ones. 362d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Internal use only 363d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a combined mask of all flags 364d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 36500a009204e51997249d60eab4f147eff566e2b1fEric Laurent @SystemApi 366d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getAllFlags() { 3676894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi return (mFlags & FLAG_ALL); 368d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 369d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 370d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 371b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @hide 372f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi * Return the Bundle of data. 373f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi * @return a copy of the Bundle for this instance, may be null. 374f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi */ 375f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi @SystemApi 376f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi public Bundle getBundle() { 377f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi if (mBundle == null) { 378f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi return mBundle; 379f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } else { 380f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi return new Bundle(mBundle); 381f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 382f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 383f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi 384f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi /** 385f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi * @hide 386d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the set of tags. 387d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a read-only set of all tags stored as strings. 388d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 389d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Set<String> getTags() { 390d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return Collections.unmodifiableSet(mTags); 391d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 392d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 393d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 394d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Builder class for {@link AudioAttributes} objects. 39504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p> Here is an example where <code>Builder</code> is used to define the 39604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link AudioAttributes} to be used by a new <code>AudioTrack</code> instance: 39704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * 39804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <pre class="prettyprint"> 39904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * AudioTrack myTrack = new AudioTrack( 40004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * new AudioAttributes.Builder() 40104f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * .setUsage(AudioAttributes.USAGE_MEDIA) 40204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 40304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * .build(), 40404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession); 40504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * </pre> 40604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * 40704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <p>By default all types of information (usage, content type, flags) conveyed by an 40804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * <code>AudioAttributes</code> instance are set to "unknown". Unknown information will be 40904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * interpreted as a default value that is dependent on the context of use, for instance a 41004f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * {@link MediaPlayer} will use a default usage of {@link AudioAttributes#USAGE_MEDIA}. 411d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 412d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public static class Builder { 413d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mUsage = USAGE_UNKNOWN; 414d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mContentType = CONTENT_TYPE_UNKNOWN; 415701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi private int mSource = MediaRecorder.AudioSource.AUDIO_SOURCE_INVALID; 416d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mFlags = 0x0; 417d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private HashSet<String> mTags = new HashSet<String>(); 418f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi private Bundle mBundle; 419d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 420d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 421d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Constructs a new Builder with the defaults. 42204f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * By default, usage and content type are respectively {@link AudioAttributes#USAGE_UNKNOWN} 42304f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * and {@link AudioAttributes#CONTENT_TYPE_UNKNOWN}, and flags are 0. It is recommended to 42404f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * configure the usage (with {@link #setUsage(int)}) or deriving attributes from a legacy 42504f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * stream type (with {@link #setLegacyStreamType(int)}) before calling {@link #build()} 42604f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * to override any default playback behavior in terms of routing and volume management. 427d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 428d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder() { 429d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 430d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 431d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 432d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Constructs a new Builder from a given AudioAttributes 433d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param aa the AudioAttributes object whose data will be reused in the new Builder. 434d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 435d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @SuppressWarnings("unchecked") // for cloning of mTags 436d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder(AudioAttributes aa) { 437d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = aa.mUsage; 438d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = aa.mContentType; 439d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags = aa.mFlags; 440d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mTags = (HashSet<String>) aa.mTags.clone(); 441d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 442d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 443d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 444d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Combines all of the attributes that have been set and return a new 445d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes} object. 446d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a new {@link AudioAttributes} object 447d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 448d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @SuppressWarnings("unchecked") // for cloning of mTags 449d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public AudioAttributes build() { 450d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi AudioAttributes aa = new AudioAttributes(); 451d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mContentType = mContentType; 452d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mUsage = mUsage; 453701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi aa.mSource = mSource; 454d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mFlags = mFlags; 455d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mTags = (HashSet<String>) mTags.clone(); 456cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi aa.mFormattedTags = TextUtils.join(";", mTags); 457f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi if (mBundle != null) { 458f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi aa.mBundle = new Bundle(mBundle); 459f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 460d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return aa; 461d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 462d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 463d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 464d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the attribute describing what is the intended use of the the audio signal, 465d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * such as alarm or ringtone. 466d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param usage one of {@link AudioAttributes#USAGE_UNKNOWN}, 467d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_MEDIA}, 468d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_VOICE_COMMUNICATION}, 469d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_VOICE_COMMUNICATION_SIGNALLING}, 470d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ALARM}, {@link AudioAttributes#USAGE_NOTIFICATION}, 47189c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_RINGTONE}, 472d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_REQUEST}, 473d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_INSTANT}, 474d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_DELAYED}, 475d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_EVENT}, 476d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_ACCESSIBILITY}, 477d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_NAVIGATION_GUIDANCE}, 478d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_SONIFICATION}, 479d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_GAME}. 480d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 481d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 482d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setUsage(@AttributeUsage int usage) { 483d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch (usage) { 484d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_UNKNOWN: 485d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_MEDIA: 486d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 487d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 488d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ALARM: 489d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION: 49089c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi case USAGE_NOTIFICATION_RINGTONE: 491d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 492d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 493d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 494d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 495d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 496d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 497d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 498d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_GAME: 4998fdb0d4defb6ee2ca8057d3442ead36b408b6c17Jean-Michel Trivi case USAGE_VIRTUAL_SOURCE: 500d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = usage; 501d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 502d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 503d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_UNKNOWN; 504d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 505d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 506d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 507d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 508d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 509d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the attribute describing the content type of the audio signal, such as speech, 510d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or music. 511d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param contentType the content type values, one of 512d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_MOVIE}, 513d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_MUSIC}, 514d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_SONIFICATION}, 515d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_SPEECH}, 516d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_UNKNOWN}. 517d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 518d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 519d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setContentType(@AttributeContentType int contentType) { 520d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch (contentType) { 521d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_UNKNOWN: 522d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_MOVIE: 523d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_MUSIC: 524d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_SONIFICATION: 525d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_SPEECH: 526d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = contentType; 527d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 528d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 529d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = CONTENT_TYPE_UNKNOWN; 530d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 531d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 532d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 533d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 534d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 535d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the combination of flags. 53626d2fdbba3dab2b46db3c68514cad6f428b88406Jean-Michel Trivi * @param flags a combination of {@link AudioAttributes#FLAG_AUDIBILITY_ENFORCED}, 53726d2fdbba3dab2b46db3c68514cad6f428b88406Jean-Michel Trivi * {@link AudioAttributes#FLAG_HW_AV_SYNC}. 538d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 539d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 540d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setFlags(int flags) { 5416894cd38ebb619a0b7e47831b623655c9c0f6e12Jean-Michel Trivi flags &= AudioAttributes.FLAG_ALL; 542d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= flags; 543d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 544d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 545d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 546d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 547b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @hide 548f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi * Adds a Bundle of data 549f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi * @param bundle a non-null Bundle 550f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi * @return the same builder instance 551f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi */ 552f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi @SystemApi 553f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi public Builder addBundle(@NonNull Bundle bundle) { 554f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi if (bundle == null) { 555f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi throw new IllegalArgumentException("Illegal null bundle"); 556f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 557f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi if (mBundle == null) { 558f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi mBundle = new Bundle(bundle); 559f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } else { 560f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi mBundle.putAll(bundle); 561f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 562f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi return this; 563f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 564f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi 565f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi /** 566f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi * @hide 567d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Add a custom tag stored as a string 568d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param tag 569d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 570d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 571d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder addTag(String tag) { 572d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mTags.add(tag); 573d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 574d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 575d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 576d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 57704f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * Sets attributes as inferred from the legacy stream types. 57804f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * Use this method when building an {@link AudioAttributes} instance to initialize some of 57904f55a490d0479f73ac5b749eeb7716d9a2d17dbJean-Michel Trivi * the attributes by information derived from a legacy stream type. 580d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param streamType one of {@link AudioManager#STREAM_VOICE_CALL}, 581d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioManager#STREAM_SYSTEM}, {@link AudioManager#STREAM_RING}, 582d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioManager#STREAM_MUSIC}, {@link AudioManager#STREAM_ALARM}, 583d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or {@link AudioManager#STREAM_NOTIFICATION}. 584d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 585d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 586d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setLegacyStreamType(int streamType) { 587d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return setInternalLegacyStreamType(streamType); 588d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 589d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 590d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 591d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 592d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * For internal framework use only, enables building from hidden stream types. 593d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param streamType 594d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 595d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 596d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setInternalLegacyStreamType(int streamType) { 597d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch(streamType) { 598d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_VOICE_CALL: 599d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 600d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 601d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM_ENFORCED: 602d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_AUDIBILITY_ENFORCED; 603d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // intended fall through, attributes in common with STREAM_SYSTEM 604d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM: 605d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 606d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 607d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_RING: 608d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 609d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 610d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_MUSIC: 611d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_MUSIC; 612d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 613d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_ALARM: 614d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 615d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 616d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_NOTIFICATION: 617d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 618d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 619d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_BLUETOOTH_SCO: 620d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 621d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_SCO; 622d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 623d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_DTMF: 624d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 625d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 626d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_TTS: 627d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 628d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 629d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 630701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi Log.e(TAG, "Invalid stream type " + streamType + " for AudioAttributes"); 631701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 632c1601f73b98b004b6210631830d2184255037948Jean-Michel Trivi mUsage = usageForLegacyStreamType(streamType); 633701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi return this; 634701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 635701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi 636701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi /** 637701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @hide 638701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * Sets the capture preset. 639701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * Use this audio attributes configuration method when building an {@link AudioRecord} 640701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * instance with {@link AudioRecord#AudioRecord(AudioAttributes, AudioFormat, int)}. 641701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @param preset one of {@link MediaRecorder.AudioSource#DEFAULT}, 642701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * {@link MediaRecorder.AudioSource#MIC}, {@link MediaRecorder.AudioSource#CAMCORDER}, 643a7cc59c3187711d390c5a483d26c463a1bcbd331rago * {@link MediaRecorder.AudioSource#VOICE_RECOGNITION}, 644a7cc59c3187711d390c5a483d26c463a1bcbd331rago * {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION} or 645a7cc59c3187711d390c5a483d26c463a1bcbd331rago * {@link MediaRecorder.AudioSource#UNPROCESSED} 646701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @return the same Builder instance. 647701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi */ 6481b3541d5eedb332ea01066b4a78a2d06d5304044Jean-Michel Trivi @SystemApi 649701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi public Builder setCapturePreset(int preset) { 650701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi switch (preset) { 651701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.DEFAULT: 652701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.MIC: 653701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.CAMCORDER: 654701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.VOICE_RECOGNITION: 655701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi case MediaRecorder.AudioSource.VOICE_COMMUNICATION: 656a7cc59c3187711d390c5a483d26c463a1bcbd331rago case MediaRecorder.AudioSource.UNPROCESSED: 657701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi mSource = preset; 658701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi break; 659701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi default: 660701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi Log.e(TAG, "Invalid capture preset " + preset + " for AudioAttributes"); 661701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 662701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi return this; 663701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } 664701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi 665701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi /** 666701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @hide 667ce4483cb83afb3a42a32ef2cb00cf04d6f9018fdBenson Huang * Same as {@link #setCapturePreset(int)} but authorizes the use of HOTWORD, 66800a009204e51997249d60eab4f147eff566e2b1fEric Laurent * REMOTE_SUBMIX and RADIO_TUNER. 669701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @param preset 670701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi * @return the same Builder instance. 671701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi */ 67200a009204e51997249d60eab4f147eff566e2b1fEric Laurent @SystemApi 673701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi public Builder setInternalCapturePreset(int preset) { 674701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi if ((preset == MediaRecorder.AudioSource.HOTWORD) 675ce4483cb83afb3a42a32ef2cb00cf04d6f9018fdBenson Huang || (preset == MediaRecorder.AudioSource.REMOTE_SUBMIX) 67600a009204e51997249d60eab4f147eff566e2b1fEric Laurent || (preset == MediaRecorder.AudioSource.RADIO_TUNER)) { 677701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi mSource = preset; 678701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi } else { 679701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi setCapturePreset(preset); 680d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 681d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 682d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 683d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }; 684d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 685b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 686b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public int describeContents() { 687b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return 0; 688b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 689b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 6908df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 6918df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * @hide 6928df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Used to indicate that when parcelling, the tags should be parcelled through the flattened 6938df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * formatted string, not through the array of strings. 6948df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Keep in sync with frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp 6958df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * see definition of kAudioAttributesMarshallTagFlattenTags 6968df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 6978df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi public final static int FLATTEN_TAGS = 0x1; 698f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi 699f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi private final static int ATTR_PARCEL_IS_NULL_BUNDLE = -1977; 700f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi private final static int ATTR_PARCEL_IS_VALID_BUNDLE = 1980; 701f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi 7028df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 7038df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * When adding tags for writeToParcel(Parcel, int), add them in the list of flags (| NEW_FLAG) 7048df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 7058df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi private final static int ALL_PARCEL_FLAGS = FLATTEN_TAGS; 706b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 707b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public void writeToParcel(Parcel dest, int flags) { 708b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mUsage); 709b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mContentType); 710701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi dest.writeInt(mSource); 711b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mFlags); 7128df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeInt(flags & ALL_PARCEL_FLAGS); 7138df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if ((flags & FLATTEN_TAGS) == 0) { 7148df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = new String[mTags.size()]; 7158df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.toArray(tagsArray); 7168df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeStringArray(tagsArray); 7178df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else if ((flags & FLATTEN_TAGS) == FLATTEN_TAGS) { 7188df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeString(mFormattedTags); 7198df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 720f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi if (mBundle == null) { 721f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi dest.writeInt(ATTR_PARCEL_IS_NULL_BUNDLE); 722f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } else { 723f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi dest.writeInt(ATTR_PARCEL_IS_VALID_BUNDLE); 724f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi dest.writeBundle(mBundle); 725f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 726b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 727b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 728b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi private AudioAttributes(Parcel in) { 729b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mUsage = in.readInt(); 730b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mContentType = in.readInt(); 731701d6ff12f36bf5e9de0dafdaced06744fd411ebJean-Michel Trivi mSource = in.readInt(); 732b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mFlags = in.readInt(); 7338df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi boolean hasFlattenedTags = ((in.readInt() & FLATTEN_TAGS) == FLATTEN_TAGS); 734b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mTags = new HashSet<String>(); 7358df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if (hasFlattenedTags) { 736cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi mFormattedTags = new String(in.readString()); 737cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi mTags.add(mFormattedTags); 7388df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else { 7398df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = in.readStringArray(); 7408df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi for (int i = tagsArray.length - 1 ; i >= 0 ; i--) { 7418df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.add(tagsArray[i]); 7428df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 743cc58c76cf038343020331060d19ae39308f2a5cfJean-Michel Trivi mFormattedTags = TextUtils.join(";", mTags); 744b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 745f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi switch (in.readInt()) { 746f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi case ATTR_PARCEL_IS_NULL_BUNDLE: 747f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi mBundle = null; 748f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi break; 749f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi case ATTR_PARCEL_IS_VALID_BUNDLE: 750f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi mBundle = new Bundle(in.readBundle()); 751f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi break; 752f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi default: 753f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi Log.e(TAG, "Illegal value unmarshalling AudioAttributes, can't initialize bundle"); 754f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi } 755b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 756b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 757b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public static final Parcelable.Creator<AudioAttributes> CREATOR 758b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi = new Parcelable.Creator<AudioAttributes>() { 759b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi /** 760b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * Rebuilds an AudioAttributes previously stored with writeToParcel(). 761b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @param p Parcel object to read the AudioAttributes from 762b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @return a new AudioAttributes created from the data in the parcel 763b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi */ 764b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes createFromParcel(Parcel p) { 765b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes(p); 766b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 767b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes[] newArray(int size) { 768b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes[size]; 769b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 770b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi }; 771b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 772e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi @Override 773e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi public boolean equals(Object o) { 774e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi if (this == o) return true; 775e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi if (o == null || getClass() != o.getClass()) return false; 776e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 777e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi AudioAttributes that = (AudioAttributes) o; 778e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 779e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi return ((mContentType == that.mContentType) 780e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mFlags == that.mFlags) 781e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mSource == that.mSource) 782e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mUsage == that.mUsage) 783e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi //mFormattedTags is never null due to assignment in Builder or unmarshalling 784e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi && (mFormattedTags.equals(that.mFormattedTags))); 785e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi } 786e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 787e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi @Override 788e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi public int hashCode() { 789f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi return Objects.hash(mContentType, mFlags, mSource, mUsage, mFormattedTags, mBundle); 790e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi } 791e9c19a5a8e020b11935511b37f51f9007994f4b6Jean-Michel Trivi 792a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi @Override 793a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String toString () { 794a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("AudioAttributes:" 795a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " usage=" + mUsage 796a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " content=" + mContentType 797a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " flags=0x" + Integer.toHexString(mFlags).toUpperCase() 798f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi + " tags=" + mFormattedTags 799f82f746903729314e09ebe0e05b0c97d33a876c7Jean-Michel Trivi + " bundle=" + (mBundle == null ? "null" : mBundle.toString())); 800a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 801a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi 802998ff75484f1eecb6ebef150de4ac8456d22e864Jean-Michel Trivi /** @hide */ 803a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String usageToString() { 8047b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return usageToString(mUsage); 8057b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 8067b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock 8077b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock /** @hide */ 8087b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock public static String usageToString(int usage) { 8097b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock switch(usage) { 810a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_UNKNOWN: 811a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_UNKNOWN"); 812a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_MEDIA: 813a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_MEDIA"); 814a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 815a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_VOICE_COMMUNICATION"); 816a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 81745228bf3e0c0c99be912dc9c8c663f4e8ce96233Zach Johnson return new String("USAGE_VOICE_COMMUNICATION_SIGNALLING"); 818a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ALARM: 819a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ALARM"); 820a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION: 821a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 82289c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi case USAGE_NOTIFICATION_RINGTONE: 82345228bf3e0c0c99be912dc9c8c663f4e8ce96233Zach Johnson return new String("USAGE_NOTIFICATION_RINGTONE"); 824a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 82545228bf3e0c0c99be912dc9c8c663f4e8ce96233Zach Johnson return new String("USAGE_NOTIFICATION_COMMUNICATION_REQUEST"); 826a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 827a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_INSTANT"); 828a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 829a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_DELAYED"); 830a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 831a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_EVENT"); 832a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 833a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_ACCESSIBILITY"); 834a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 835a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"); 836a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 837a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_SONIFICATION"); 838a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_GAME: 839a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_GAME"); 840a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi default: 8417b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return new String("unknown usage " + usage); 8427b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 8437b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 8447b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock 8457b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock /** @hide */ 8467b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock public static int usageForLegacyStreamType(int streamType) { 8477b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock switch(streamType) { 8487b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_VOICE_CALL: 8497b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION; 8507b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_SYSTEM_ENFORCED: 8517b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_SYSTEM: 8527b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ASSISTANCE_SONIFICATION; 8537b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_RING: 85489c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi return USAGE_NOTIFICATION_RINGTONE; 8557b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_MUSIC: 8567b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_MEDIA; 8577b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_ALARM: 8587b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ALARM; 8597b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_NOTIFICATION: 8607b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_NOTIFICATION; 8617b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_BLUETOOTH_SCO: 8627b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION; 8637b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_DTMF: 8647b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION_SIGNALLING; 8657b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_TTS: 8667b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ASSISTANCE_ACCESSIBILITY; 8677b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock default: 8687b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_UNKNOWN; 869a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 870a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 871d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi /** 872d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * @hide 873d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * CANDIDATE FOR PUBLIC (or at least SYSTEM) API 874d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * Returns the stream type matching the given attributes for volume control. 875d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * Use this method to derive the stream type needed to configure the volume 876d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * control slider in an {@link Activity} with {@link Activity#setVolumeControlStream(int)}. 877d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * <BR>Do not use this method to set the stream type on an audio player object 878d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * (e.g. {@link AudioTrack}, {@link MediaPlayer}), use <code>AudioAttributes</code> instead. 879d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * @param aa non-null AudioAttributes. 880d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * @return a valid stream type for <code>Activity</code> or stream volume control that matches 881d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * the attributes, or {@link AudioManager#USE_DEFAULT_STREAM_TYPE} if there isn't a direct 882d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * match. Note that <code>USE_DEFAULT_STREAM_TYPE</code> is not a valid value 883d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi * for {@link AudioManager#setStreamVolume(int, int, int)}. 884d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi */ 885d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi public static int getVolumeControlStream(@NonNull AudioAttributes aa) { 886d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi if (aa == null) { 887d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi throw new IllegalArgumentException("Invalid null audio attributes"); 888d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi } 889d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi return toVolumeStreamType(true /*fromGetVolumeControlStream*/, aa); 890d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi } 891b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 8923d22bf04e399123e07ae9c2075784b63c8678d04Jean-Michel Trivi /** 8933d22bf04e399123e07ae9c2075784b63c8678d04Jean-Michel Trivi * @hide 8943d22bf04e399123e07ae9c2075784b63c8678d04Jean-Michel Trivi * Only use to get which stream type should be used for volume control, NOT for audio playback 8953d22bf04e399123e07ae9c2075784b63c8678d04Jean-Michel Trivi * (all audio playback APIs are supposed to take AudioAttributes as input parameters) 8963d22bf04e399123e07ae9c2075784b63c8678d04Jean-Michel Trivi * @param aa non-null AudioAttributes. 8973d22bf04e399123e07ae9c2075784b63c8678d04Jean-Michel Trivi * @return a valid stream type for volume control that matches the attributes. 8983d22bf04e399123e07ae9c2075784b63c8678d04Jean-Michel Trivi */ 899d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi public static int toLegacyStreamType(@NonNull AudioAttributes aa) { 900d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi return toVolumeStreamType(false /*fromGetVolumeControlStream*/, aa); 901d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi } 902d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi 903d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi private static int toVolumeStreamType(boolean fromGetVolumeControlStream, AudioAttributes aa) { 90409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi // flags to stream type mapping 90509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi if ((aa.getFlags() & FLAG_AUDIBILITY_ENFORCED) == FLAG_AUDIBILITY_ENFORCED) { 906d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi return fromGetVolumeControlStream ? 907d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi AudioSystem.STREAM_SYSTEM : AudioSystem.STREAM_SYSTEM_ENFORCED; 90809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 90909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi if ((aa.getFlags() & FLAG_SCO) == FLAG_SCO) { 910d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi return fromGetVolumeControlStream ? 911d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi AudioSystem.STREAM_VOICE_CALL : AudioSystem.STREAM_BLUETOOTH_SCO; 91209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 91309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi 91409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi // usage to stream type mapping 91509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi switch (aa.getUsage()) { 91609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_MEDIA: 91709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_GAME: 91809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 91909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 92009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_MUSIC; 92109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 92209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_SYSTEM; 92309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 92409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_VOICE_CALL; 92509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 926d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi return fromGetVolumeControlStream ? 927d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi AudioSystem.STREAM_VOICE_CALL : AudioSystem.STREAM_DTMF; 92809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ALARM: 92909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_ALARM; 93089c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi case USAGE_NOTIFICATION_RINGTONE: 93109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_RING; 93209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION: 93309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 93409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 93509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 93609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 93709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_NOTIFICATION; 93809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_UNKNOWN: 939d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi return fromGetVolumeControlStream ? 940d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi AudioManager.USE_DEFAULT_STREAM_TYPE : AudioSystem.STREAM_MUSIC; 94109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi default: 942d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi if (fromGetVolumeControlStream) { 943d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi throw new IllegalArgumentException("Unknown usage value " + aa.getUsage() + 944d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi " in audio attributes"); 945d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi } else { 946d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi return AudioSystem.STREAM_MUSIC; 947d1d5a0a0801a2d73becb7424f2608f42816a97e8Jean-Michel Trivi } 94809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 94909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 95009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi 95109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi /** @hide */ 952d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 953d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_UNKNOWN, 954d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_MEDIA, 955d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION, 956d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION_SIGNALLING, 957d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ALARM, 958d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION, 95989c3b29a9bfa0ae9858b913bc1ab6604c4613a15Jean-Michel Trivi USAGE_NOTIFICATION_RINGTONE, 960d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_REQUEST, 961d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_INSTANT, 962d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_DELAYED, 963d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_EVENT, 964d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_ACCESSIBILITY, 965d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_NAVIGATION_GUIDANCE, 966d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_SONIFICATION, 967d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_GAME 968d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 969d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 970d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeUsage {} 971d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 972d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** @hide */ 973d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 974d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_UNKNOWN, 975d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SPEECH, 976d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MUSIC, 977d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MOVIE, 978d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SONIFICATION 979d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 980d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 981d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeContentType {} 982d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi} 983