AudioAttributes.java revision 7b41467704f941b11af6aace3e40993afc7f6c6f
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 break; 371d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM_ENFORCED: 372d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_AUDIBILITY_ENFORCED; 373d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi // intended fall through, attributes in common with STREAM_SYSTEM 374d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_SYSTEM: 375d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 376d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 377d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_RING: 378d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 379d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 380d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_MUSIC: 381d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_MUSIC; 382d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 383d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_ALARM: 384d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 385d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 386d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_NOTIFICATION: 387d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 388d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 389d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_BLUETOOTH_SCO: 390d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 391d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mFlags |= FLAG_SCO; 392d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 393d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_DTMF: 394d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SONIFICATION; 395d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 396d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi case AudioSystem.STREAM_TTS: 397d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi mContentType = CONTENT_TYPE_SPEECH; 398d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi break; 399d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi default: 400d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi Log.e(TAG, "Invalid stream type " + streamType + " in for AudioAttributes"); 401d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 4027b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock mUsage = usageForLegacyStreamType(streamType); 403d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi return this; 404d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi } 405d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }; 406d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 407b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 408b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public int describeContents() { 409b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return 0; 410b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 411b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 4128df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 4138df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * @hide 4148df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Used to indicate that when parcelling, the tags should be parcelled through the flattened 4158df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * formatted string, not through the array of strings. 4168df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * Keep in sync with frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp 4178df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * see definition of kAudioAttributesMarshallTagFlattenTags 4188df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 4198df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi public final static int FLATTEN_TAGS = 0x1; 4208df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi /** 4218df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi * When adding tags for writeToParcel(Parcel, int), add them in the list of flags (| NEW_FLAG) 4228df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi */ 4238df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi private final static int ALL_PARCEL_FLAGS = FLATTEN_TAGS; 424b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi @Override 425b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public void writeToParcel(Parcel dest, int flags) { 426b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mUsage); 427b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mContentType); 428b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi dest.writeInt(mFlags); 4298df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeInt(flags & ALL_PARCEL_FLAGS); 4308df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if ((flags & FLATTEN_TAGS) == 0) { 4318df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = new String[mTags.size()]; 4328df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.toArray(tagsArray); 4338df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeStringArray(tagsArray); 4348df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else if ((flags & FLATTEN_TAGS) == FLATTEN_TAGS) { 4358df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi dest.writeString(mFormattedTags); 4368df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 437b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 438b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 439b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi private AudioAttributes(Parcel in) { 440b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mUsage = in.readInt(); 441b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mContentType = in.readInt(); 442b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mFlags = in.readInt(); 4438df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi boolean hasFlattenedTags = ((in.readInt() & FLATTEN_TAGS) == FLATTEN_TAGS); 444b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi mTags = new HashSet<String>(); 4458df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi if (hasFlattenedTags) { 4468df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.add(in.readString()); 4478df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } else { 4488df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi String[] tagsArray = in.readStringArray(); 4498df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi for (int i = tagsArray.length - 1 ; i >= 0 ; i--) { 4508df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi mTags.add(tagsArray[i]); 4518df982dfa5408afe67cd6a4b45bfbf26c94299d0Jean-Michel Trivi } 452b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 453b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 454b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 455b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi /** @hide */ 456b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public static final Parcelable.Creator<AudioAttributes> CREATOR 457b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi = new Parcelable.Creator<AudioAttributes>() { 458b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi /** 459b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * Rebuilds an AudioAttributes previously stored with writeToParcel(). 460b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @param p Parcel object to read the AudioAttributes from 461b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi * @return a new AudioAttributes created from the data in the parcel 462b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi */ 463b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes createFromParcel(Parcel p) { 464b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes(p); 465b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 466b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi public AudioAttributes[] newArray(int size) { 467b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi return new AudioAttributes[size]; 468b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi } 469b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi }; 470b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 471a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi /** @hide */ 472a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi @Override 473a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String toString () { 474a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("AudioAttributes:" 475a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " usage=" + mUsage 476a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " content=" + mContentType 477a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " flags=0x" + Integer.toHexString(mFlags).toUpperCase() 478a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi + " tags=" + mTags); 479a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 480a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi 481998ff75484f1eecb6ebef150de4ac8456d22e864Jean-Michel Trivi /** @hide */ 482a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi public String usageToString() { 4837b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return usageToString(mUsage); 4847b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 4857b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock 4867b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock /** @hide */ 4877b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock public static String usageToString(int usage) { 4887b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock switch(usage) { 489a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_UNKNOWN: 490a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_UNKNOWN"); 491a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_MEDIA: 492a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_MEDIA"); 493a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 494a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_VOICE_COMMUNICATION"); 495a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 496a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_VOICE_COMMUNICATION"); 497a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ALARM: 498a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ALARM"); 499a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION: 500a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 501a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_TELEPHONY_RINGTONE: 502a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 503a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 504a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION"); 505a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 506a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_INSTANT"); 507a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 508a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_COMMUNICATION_DELAYED"); 509a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 510a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_NOTIFICATION_EVENT"); 511a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 512a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_ACCESSIBILITY"); 513a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 514a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"); 515a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 516a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_ASSISTANCE_SONIFICATION"); 517a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi case USAGE_GAME: 518a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi return new String("USAGE_GAME"); 519a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi default: 5207b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return new String("unknown usage " + usage); 5217b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 5227b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock } 5237b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock 5247b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock /** @hide */ 5257b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock public static int usageForLegacyStreamType(int streamType) { 5267b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock switch(streamType) { 5277b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_VOICE_CALL: 5287b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION; 5297b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_SYSTEM_ENFORCED: 5307b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_SYSTEM: 5317b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ASSISTANCE_SONIFICATION; 5327b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_RING: 5337b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_NOTIFICATION_TELEPHONY_RINGTONE; 5347b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_MUSIC: 5357b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_MEDIA; 5367b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_ALARM: 5377b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ALARM; 5387b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_NOTIFICATION: 5397b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_NOTIFICATION; 5407b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_BLUETOOTH_SCO: 5417b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION; 5427b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_DTMF: 5437b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_VOICE_COMMUNICATION_SIGNALLING; 5447b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock case AudioSystem.STREAM_TTS: 5457b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_ASSISTANCE_ACCESSIBILITY; 5467b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock default: 5477b41467704f941b11af6aace3e40993afc7f6c6fJohn Spurlock return USAGE_UNKNOWN; 548a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 549a8b6bd88cfb010c9e9aa1339e504fd593919e1e0Jean-Michel Trivi } 550b45c27303339e5baa9fe40e4f8ecd211e382982fJean-Michel Trivi 551d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** @hide */ 55209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi public static int toLegacyStreamType(AudioAttributes aa) { 55309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi // flags to stream type mapping 55409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi if ((aa.getFlags() & FLAG_AUDIBILITY_ENFORCED) == FLAG_AUDIBILITY_ENFORCED) { 55509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_SYSTEM_ENFORCED; 55609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 55709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi if ((aa.getFlags() & FLAG_SCO) == FLAG_SCO) { 55809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_BLUETOOTH_SCO; 55909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 56009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi 56109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi // usage to stream type mapping 56209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi switch (aa.getUsage()) { 56309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_MEDIA: 56409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_GAME: 56509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_ACCESSIBILITY: 56609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 56709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_MUSIC; 56809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ASSISTANCE_SONIFICATION: 56909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_SYSTEM; 57009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION: 57109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_VOICE_CALL; 57209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_VOICE_COMMUNICATION_SIGNALLING: 57309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_DTMF; 57409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_ALARM: 57509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_ALARM; 57609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_TELEPHONY_RINGTONE: 57709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_RING; 57809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION: 57909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 58009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 58109818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 58209818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_NOTIFICATION_EVENT: 58309818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_NOTIFICATION; 58409818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi case USAGE_UNKNOWN: 58509818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi default: 58609818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi return AudioSystem.STREAM_MUSIC; 58709818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 58809818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi } 58909818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi 59009818c15500a04eac6b9998144c1ca54b8a54109Jean-Michel Trivi /** @hide */ 591d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 592d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_UNKNOWN, 593d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_MEDIA, 594d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION, 595d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_VOICE_COMMUNICATION_SIGNALLING, 596d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ALARM, 597d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION, 598d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_TELEPHONY_RINGTONE, 599d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_REQUEST, 600d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_INSTANT, 601d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_COMMUNICATION_DELAYED, 602d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_NOTIFICATION_EVENT, 603d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_ACCESSIBILITY, 604d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_NAVIGATION_GUIDANCE, 605d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_ASSISTANCE_SONIFICATION, 606d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi USAGE_GAME 607d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 608d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 609d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeUsage {} 610d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi 611d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi /** @hide */ 612d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @IntDef({ 613d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_UNKNOWN, 614d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SPEECH, 615d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MUSIC, 616d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_MOVIE, 617d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi CONTENT_TYPE_SONIFICATION 618d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi }) 619d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi @Retention(RetentionPolicy.SOURCE) 620d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi public @interface AttributeContentType {} 621d60e875a97867c1a6ed84325bb70f7ffe8ce4521Jean-Michel Trivi} 622