AudioAttributes.java revision 998ff75484f1eecb6ebef150de4ac8456d22e864
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; 20b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Triviimport android.os.Parcel; 21b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Triviimport android.os.Parcelable; 22d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport android.util.Log; 23d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 24d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.lang.annotation.Retention; 25d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.lang.annotation.RetentionPolicy; 26d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.Collections; 27d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.HashSet; 28a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Triviimport java.util.Iterator; 29d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Triviimport java.util.Set; 30d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 31d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi/** 32d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * A class to encapsulate a collection of attributes describing information about an audio 33d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * player or recorder. 34d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 35b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivipublic final class AudioAttributes implements Parcelable { 36d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private final static String TAG = "AudioAttributes"; 37d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 38d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 39d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is unknown, or other than the ones defined. 40d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 41d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_UNKNOWN = 0; 42d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 43d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is speech. 44d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 45d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_SPEECH = 1; 46d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 47d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is music. 48d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 49d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_MUSIC = 2; 50d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 51d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is a soundtrack, typically accompanying 52d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a movie or TV program. 53d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 54d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_MOVIE = 3; 55d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 56d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Content type value to use when the content type is a sound used to accompany a user 57d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * action, such as a beep or sound effect expressing a key click, or event, such as the 58d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * type of a sound for a bonus being received in a game. These sounds are mostly synthesized 59d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or short Foley sounds. 60d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 61d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int CONTENT_TYPE_SONIFICATION = 4; 62d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 63d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 64d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is unknown. 65d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 66d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_UNKNOWN = 0; 67d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 68d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is media, such as music, or movie 69d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * soundtracks. 70d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 71d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_MEDIA = 1; 72d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 73d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is voice communications, such as telephony 74d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or VoIP. 75d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 76d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_VOICE_COMMUNICATION = 2; 77d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 78d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is in-call signalling, such as with 79d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a "busy" beep, or DTMF tones. 80d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 81d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; 82d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 83d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is an alarm (e.g. wake-up alarm). 84d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 85d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ALARM = 4; 86d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 87d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification. See other 88d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * notification usages for more specialized uses. 89d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 90d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION = 5; 91d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 92d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is telephony ringtone. 93d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 94d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_TELEPHONY_RINGTONE = 6; 95d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 96d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is a request to enter/end a 97d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * communication, such as a VoIP communication or video-conference. 98d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 99d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; 100d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 101d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification for an "instant" 102d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * communication such as a chat, or SMS. 103d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 104d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; 105d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 106d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is notification for a 107d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * non-immediate type of communication such as e-mail. 108d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 109d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; 110d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 111d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is to attract the user's attention, 112d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * such as a reminder or low battery warning. 113d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 114d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_NOTIFICATION_EVENT = 10; 115d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 116d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is for accessibility, such as with 117d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * a screen reader. 118d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 119d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_ACCESSIBILITY = 11; 120d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 121d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is driving or navigation directions. 122d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 123d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; 124d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 125d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is sonification, such as with user 126d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * interface sounds. 127d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 128d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_ASSISTANCE_SONIFICATION = 13; 129d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 130d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Usage value to use when the usage is for game audio. 131d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 132d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int USAGE_GAME = 14; 133d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 134d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 135d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag defining a behavior where the audibility of the sound will be ensured by the system. 136d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 137d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_AUDIBILITY_ENFORCED = 0x1 << 0; 138d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 139d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 140d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag defining a behavior where the playback of the sound is ensured without 141d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * degradation only when going to a secure sink. 142d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 143d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // FIXME not guaranteed yet 144d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // TODO add OR to getFlags() when supported and in public API 145d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_SECURE = 0x1 << 1; 146d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 147d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 148d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Flag to enable when the stream is associated with SCO usage. 149d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Internal use only for dealing with legacy STREAM_BLUETOOTH_SCO 150d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 151d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public final static int FLAG_SCO = 0x1 << 2; 152d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 153d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 154d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mUsage = USAGE_UNKNOWN; 155d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mContentType = CONTENT_TYPE_UNKNOWN; 156d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mFlags = 0x0; 157d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private HashSet<String> mTags; 158a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi private String mFormattedTags; 159d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 160d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private AudioAttributes() { 161d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 162d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 163d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 164d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the content type. 165d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return one of the values that can be set in {@link Builder#setContentType(int)} 166d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 167d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getContentType() { 168d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return mContentType; 169d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 170d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 171d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 172d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the usage. 173d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return one of the values that can be set in {@link Builder#setUsage(int)} 174d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 175d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getUsage() { 176d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return mUsage; 177d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 178d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 179d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 180d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the flags. 181d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a combined mask of all flags 182d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 183d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getFlags() { 184d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // only return the flags that are public 185d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return (mFlags & (FLAG_AUDIBILITY_ENFORCED)); 186d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 187d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 188d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 189d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 190d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return all the flags, even the non-public ones. 191d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Internal use only 192d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a combined mask of all flags 193d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 194d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public int getAllFlags() { 195d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return mFlags; 196d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 197d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 198d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 199b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @hide 200d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Return the set of tags. 201d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a read-only set of all tags stored as strings. 202d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 203d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Set<String> getTags() { 204d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return Collections.unmodifiableSet(mTags); 205d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 206d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 207d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 208d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Builder class for {@link AudioAttributes} objects. 209d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 210d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public static class Builder { 211d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mUsage = USAGE_UNKNOWN; 212d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mContentType = CONTENT_TYPE_UNKNOWN; 213d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private int mFlags = 0x0; 214d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi private HashSet<String> mTags = new HashSet<String>(); 215d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 216d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 217d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Constructs a new Builder with the defaults. 218d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 219d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder() { 220d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 221d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 222d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 223d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Constructs a new Builder from a given AudioAttributes 224d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param aa the AudioAttributes object whose data will be reused in the new Builder. 225d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 226d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @SuppressWarnings("unchecked") // for cloning of mTags 227d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder(AudioAttributes aa) { 228d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = aa.mUsage; 229d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = aa.mContentType; 230d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags = aa.mFlags; 231d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mTags = (HashSet<String>) aa.mTags.clone(); 232d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 233d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 234d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 235d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Combines all of the attributes that have been set and return a new 236d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes} object. 237d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return a new {@link AudioAttributes} object 238d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 239d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @SuppressWarnings("unchecked") // for cloning of mTags 240d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public AudioAttributes build() { 241d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi AudioAttributes aa = new AudioAttributes(); 242d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mContentType = mContentType; 243d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mUsage = mUsage; 244d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mFlags = mFlags; 245d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi aa.mTags = (HashSet<String>) mTags.clone(); 246a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi final Iterator<String> tagIterator = mTags.iterator(); 247a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi String allTagsInOne = new String(); 248a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi while (tagIterator.hasNext()) { 249a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi allTagsInOne += tagIterator.next() + ";"; 250a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi } 251a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi aa.mFormattedTags = allTagsInOne; 252d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return aa; 253d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 254d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 255d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 256d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the attribute describing what is the intended use of the the audio signal, 257d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * such as alarm or ringtone. 258d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param usage one of {@link AudioAttributes#USAGE_UNKNOWN}, 259d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_MEDIA}, 260d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_VOICE_COMMUNICATION}, 261d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_VOICE_COMMUNICATION_SIGNALLING}, 262d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ALARM}, {@link AudioAttributes#USAGE_NOTIFICATION}, 263d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_TELEPHONY_RINGTONE}, 264d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_REQUEST}, 265d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_INSTANT}, 266d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_COMMUNICATION_DELAYED}, 267d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_NOTIFICATION_EVENT}, 268d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_ACCESSIBILITY}, 269d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_NAVIGATION_GUIDANCE}, 270d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_ASSISTANCE_SONIFICATION}, 271d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#USAGE_GAME}. 272d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 273d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 274d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setUsage(@AttributeUsage int usage) { 275d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch (usage) { 276d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_UNKNOWN: 277d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_MEDIA: 278d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 279d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 280d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ALARM: 281d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION: 282d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_TELEPHONY_RINGTONE: 283d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 284d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 285d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 286d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 287d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 288d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 289d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 290d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case USAGE_GAME: 291d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = usage; 292d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 293d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 294d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_UNKNOWN; 295d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 296d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 297d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 298d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 299d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 300d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the attribute describing the content type of the audio signal, such as speech, 301d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or music. 302d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param contentType the content type values, one of 303d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_MOVIE}, 304d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_MUSIC}, 305d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_SONIFICATION}, 306d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_SPEECH}, 307d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioAttributes#CONTENT_TYPE_UNKNOWN}. 308d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 309d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 310d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setContentType(@AttributeContentType int contentType) { 311d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch (contentType) { 312d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_UNKNOWN: 313d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_MOVIE: 314d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_MUSIC: 315d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_SONIFICATION: 316d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case CONTENT_TYPE_SPEECH: 317d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = contentType; 318d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 319d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 320d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = CONTENT_TYPE_UNKNOWN; 321d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 322d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 323d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 324d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 325d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 326d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Sets the combination of flags. 327d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param flags the {@link AudioAttributes#FLAG_AUDIBILITY_ENFORCED} flag. 328d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 329d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 330d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setFlags(int flags) { 331d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi flags &= (AudioAttributes.FLAG_AUDIBILITY_ENFORCED | AudioAttributes.FLAG_SCO 332d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi | AudioAttributes.FLAG_SECURE); 333d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= flags; 334d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 335d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 336d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 337d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 338b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @hide 339d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Add a custom tag stored as a string 340d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param tag 341d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 342d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 343d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder addTag(String tag) { 344d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mTags.add(tag); 345d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 346d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 347d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 348d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 349d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * Adds attributes inferred from the legacy stream types. 350d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param streamType one of {@link AudioManager#STREAM_VOICE_CALL}, 351d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioManager#STREAM_SYSTEM}, {@link AudioManager#STREAM_RING}, 352d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * {@link AudioManager#STREAM_MUSIC}, {@link AudioManager#STREAM_ALARM}, 353d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * or {@link AudioManager#STREAM_NOTIFICATION}. 354d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 355d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 356d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setLegacyStreamType(int streamType) { 357d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return setInternalLegacyStreamType(streamType); 358d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 359d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 360d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** 361d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @hide 362d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * For internal framework use only, enables building from hidden stream types. 363d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @param streamType 364d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi * @return the same Builder instance. 365d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi */ 366d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public Builder setInternalLegacyStreamType(int streamType) { 367d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi switch(streamType) { 368d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_VOICE_CALL: 369d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 370d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_VOICE_COMMUNICATION; 371d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 372d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM_ENFORCED: 373d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_AUDIBILITY_ENFORCED; 374d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // intended fall through, attributes in common with STREAM_SYSTEM 375d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM: 376d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 377d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_ASSISTANCE_SONIFICATION; 378d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 379d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_RING: 380d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 381d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_NOTIFICATION_TELEPHONY_RINGTONE; 382d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 383d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_MUSIC: 384d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_MUSIC; 385d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_MEDIA; 386d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 387d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_ALARM: 388d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 389d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_ALARM; 390d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 391d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_NOTIFICATION: 392d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 393d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_NOTIFICATION; 394d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 395d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_BLUETOOTH_SCO: 396d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 397d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_VOICE_COMMUNICATION; 398d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_SCO; 399d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 400d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_DTMF: 401d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 402d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_VOICE_COMMUNICATION_SIGNALLING; 403d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 404d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_TTS: 405d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 406d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mUsage = USAGE_ASSISTANCE_ACCESSIBILITY; 407d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 408d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 409d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi Log.e(TAG, "Invalid stream type " + streamType + " in for AudioAttributes"); 410d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 411d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 412d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 413d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }; 414d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 415b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 416b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public int describeContents() { 417b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return 0; 418b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 419b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 4208df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 4218df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * @hide 4228df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Used to indicate that when parcelling, the tags should be parcelled through the flattened 4238df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * formatted string, not through the array of strings. 4248df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Keep in sync with frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp 4258df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * see definition of kAudioAttributesMarshallTagFlattenTags 4268df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 4278df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi public final static int FLATTEN_TAGS = 0x1; 4288df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 4298df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * When adding tags for writeToParcel(Parcel, int), add them in the list of flags (| NEW_FLAG) 4308df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 4318df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi private final static int ALL_PARCEL_FLAGS = FLATTEN_TAGS; 432b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 433b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public void writeToParcel(Parcel dest, int flags) { 434b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mUsage); 435b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mContentType); 436b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mFlags); 4378df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeInt(flags & ALL_PARCEL_FLAGS); 4388df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if ((flags & FLATTEN_TAGS) == 0) { 4398df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = new String[mTags.size()]; 4408df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.toArray(tagsArray); 4418df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeStringArray(tagsArray); 4428df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else if ((flags & FLATTEN_TAGS) == FLATTEN_TAGS) { 4438df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeString(mFormattedTags); 4448df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 445b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 446b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 447b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi private AudioAttributes(Parcel in) { 448b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mUsage = in.readInt(); 449b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mContentType = in.readInt(); 450b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mFlags = in.readInt(); 4518df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi boolean hasFlattenedTags = ((in.readInt() & FLATTEN_TAGS) == FLATTEN_TAGS); 452b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mTags = new HashSet<String>(); 4538df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if (hasFlattenedTags) { 4548df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.add(in.readString()); 4558df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else { 4568df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = in.readStringArray(); 4578df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi for (int i = tagsArray.length - 1 ; i >= 0 ; i--) { 4588df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.add(tagsArray[i]); 4598df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 460b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 461b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 462b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 463b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi /** @hide */ 464b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public static final Parcelable.Creator<AudioAttributes> CREATOR 465b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi = new Parcelable.Creator<AudioAttributes>() { 466b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi /** 467b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * Rebuilds an AudioAttributes previously stored with writeToParcel(). 468b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @param p Parcel object to read the AudioAttributes from 469b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @return a new AudioAttributes created from the data in the parcel 470b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi */ 471b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes createFromParcel(Parcel p) { 472b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes(p); 473b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 474b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes[] newArray(int size) { 475b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes[size]; 476b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 477b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi }; 478b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 479a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi /** @hide */ 480a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi @Override 481a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String toString () { 482a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("AudioAttributes:" 483a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " usage=" + mUsage 484a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " content=" + mContentType 485a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " flags=0x" + Integer.toHexString(mFlags).toUpperCase() 486a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " tags=" + mTags); 487a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 488a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi 489998ff75484f1eecb6ebef150de4ac8456d22e864Jean-Michel Trivi /** @hide */ 490a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String usageToString() { 491a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi switch(mUsage) { 492a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_UNKNOWN: 493a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_UNKNOWN"); 494a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_MEDIA: 495a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_MEDIA"); 496a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 497a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_VOICE_COMMUNICATION"); 498a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 499a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_VOICE_COMMUNICATION"); 500a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ALARM: 501a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ALARM"); 502a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION: 503a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 504a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_TELEPHONY_RINGTONE: 505a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 506a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 507a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 508a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 509a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_INSTANT"); 510a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 511a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_DELAYED"); 512a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 513a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_EVENT"); 514a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 515a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_ACCESSIBILITY"); 516a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 517a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"); 518a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 519a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_SONIFICATION"); 520a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_GAME: 521a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_GAME"); 522a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi default: 523a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("unknown usage " + mUsage); 524a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 525a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 526b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 527d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** @hide */ 528d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 529d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_UNKNOWN, 530d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_MEDIA, 531d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION, 532d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION_SIGNALLING, 533d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ALARM, 534d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION, 535d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_TELEPHONY_RINGTONE, 536d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_REQUEST, 537d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_INSTANT, 538d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_DELAYED, 539d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_EVENT, 540d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_ACCESSIBILITY, 541d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_NAVIGATION_GUIDANCE, 542d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_SONIFICATION, 543d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_GAME 544d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 545d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 546d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeUsage {} 547d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 548d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** @hide */ 549d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 550d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_UNKNOWN, 551d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SPEECH, 552d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MUSIC, 553d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MOVIE, 554d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SONIFICATION 555d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 556d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 557d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeContentType {} 558d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi} 559