AudioSystem.java revision 4bcdba848449b33d7022de527c526943aff1f5fd
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.media; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 196156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlockimport android.content.Context; 206156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlockimport android.content.pm.PackageManager; 217f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurentimport android.media.audiopolicy.AudioMix; 225a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Triviimport android.util.Log; 236156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 24b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurentimport java.util.ArrayList; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* IF YOU CHANGE ANY OF THE CONSTANTS IN THIS FILE, DO NOT FORGET 278b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten * TO UPDATE THE CORRESPONDING NATIVE GLUE AND AudioManager.java. 288b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten * THANK YOU FOR YOUR COOPERATION. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AudioSystem 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 365a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static final String TAG = "AudioSystem"; 37a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi /* These values must be kept in sync with system/audio.h */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If these are modified, please also update Settings.System.VOLUME_SETTINGS 408b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten * and attrs.xml and AudioManager.java. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 42a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi /* The default audio stream */ 43a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi public static final int STREAM_DEFAULT = -1; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for phone calls */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_VOICE_CALL = 0; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for system sounds */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_SYSTEM = 1; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for the phone ring and message alerts */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_RING = 2; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for music playback */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_MUSIC = 3; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for alarms */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_ALARM = 4; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for notifications */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_NOTIFICATION = 5; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* @hide The audio stream for phone calls when connected on bluetooth */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_BLUETOOTH_SCO = 6; 58a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan) */ 59a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_SYSTEM_ENFORCED = 7; 60a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* @hide The audio stream for DTMF tones */ 61a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_DTMF = 8; 62a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* @hide The audio stream for text to speech (TTS) */ 63a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_TTS = 9; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated Use {@link #numStreamTypes() instead} 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NUM_STREAMS = 5; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Expose only the getter method publicly so we can change it in the future 70a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent private static final int NUM_STREAM_TYPES = 10; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int getNumStreamTypes() { return NUM_STREAM_TYPES; } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 736156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final String[] STREAM_NAMES = new String[] { 746156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_VOICE_CALL", 756156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_SYSTEM", 766156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_RING", 776156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_MUSIC", 786156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_ALARM", 796156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_NOTIFICATION", 806156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_BLUETOOTH_SCO", 816156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_SYSTEM_ENFORCED", 826156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_DTMF", 836156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_TTS" 846156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock }; 856156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the microphone mute on or off. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @param on set <var>true</var> to mute the microphone; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>false</var> to turn mute off 91ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native int muteMicrophone(boolean on); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether the microphone mute is on or off. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 98ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @return true if microphone is muted, false if it's not 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native boolean isMicrophoneMuted(); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 102ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten /* modes for setPhoneState, must match AudioSystem.h audio_mode */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_INVALID = -2; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_CURRENT = -1; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_NORMAL = 0; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_RINGTONE = 1; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_IN_CALL = 2; 1088f677d66d9c3ba34c97e69b2bb9e161f129af0eeJean-Michel Trivi public static final int MODE_IN_COMMUNICATION = 3; 1098f677d66d9c3ba34c97e69b2bb9e161f129af0eeJean-Michel Trivi public static final int NUM_MODES = 4; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 112ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten /* Routing bits for the former setRouting/getRouting API */ 113a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 114a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_EARPIECE = (1 << 0); 115a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 116a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_SPEAKER = (1 << 1); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @deprecated use {@link #ROUTE_BLUETOOTH_SCO} */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated public static final int ROUTE_BLUETOOTH = (1 << 2); 119a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 120a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_BLUETOOTH_SCO = (1 << 2); 121a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 122a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_HEADSET = (1 << 3); 123a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 124a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_BLUETOOTH_A2DP = (1 << 4); 125a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 126a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_ALL = 0xFFFFFFFF; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 128b2b292317482d00d067bc91669322b273be61926Rom Lemarchand // Keep in sync with system/media/audio/include/system/audio.h 12960bd67f7b1b85ed0ee19f77b056b90350a3d5343Glenn Kasten public static final int AUDIO_SESSION_ALLOCATE = 0; 13060bd67f7b1b85ed0ee19f77b056b90350a3d5343Glenn Kasten 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 13223f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent * Checks whether the specified stream type is active. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13423f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent * return true if any track playing on this stream is active. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent public static native boolean isStreamActive(int stream, int inPastMs); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 139679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * Checks whether the specified stream type is active on a remotely connected device. The notion 140679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * of what constitutes a remote device is enforced by the audio policy manager of the platform. 141679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * 142679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * return true if any track playing on this stream is active on a remote device. 143679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi */ 144679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi public static native boolean isStreamActiveRemotely(int stream, int inPastMs); 145679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi 146679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi /* 147d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * Checks whether the specified audio source is active. 148d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * 149d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * return true if any recorder using this source is currently recording 150d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi */ 151d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi public static native boolean isSourceActive(int source); 152d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi 153d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi /* 1548a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi * Returns a new unused audio session ID 1558a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi */ 1568a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi public static native int newAudioSessionId(); 1578a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi 1588a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi /* 159a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Sets a group generic audio configuration parameters. The use of these parameters 160ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * are platform dependent, see libaudio 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 162a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * param keyValuePairs list of parameters key value pairs in the form: 163a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * key1=value1;key2=value2;... 164a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent */ 165a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setParameters(String keyValuePairs); 166a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 167a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* 168a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Gets a group generic audio configuration parameters. The use of these parameters 169ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * are platform dependent, see libaudio 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 171a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * param keys list of parameters 172a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * return value: list of parameters key value pairs in the form: 173a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * key1=value1;key2=value2;... 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 175a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native String getParameters(String keys); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 177ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // These match the enum AudioError in frameworks/base/core/jni/android_media_AudioSystem.cpp 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Command sucessful or Media server restarted. see ErrorCallback */ 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_OK = 0; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Command failed or unspecified audio error. see ErrorCallback */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_ERROR = 1; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Media server died. see ErrorCallback */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_SERVER_DIED = 100; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static ErrorCallback mErrorCallback; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handles the audio error callback. 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface ErrorCallback 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Callback for audio server errors. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * param error error code: 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - AUDIO_STATUS_OK 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - AUDIO_STATUS_SERVER_DIED 197ef02827d4c3b9c0601eddc9c348fc2ea866420a2Eric Laurent * - AUDIO_STATUS_ERROR 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onError(int error); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Registers a callback to be invoked when an error occurs. 204ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @param cb the callback to run 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void setErrorCallback(ErrorCallback cb) 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 208a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent synchronized (AudioSystem.class) { 209a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent mErrorCallback = cb; 210dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent if (cb != null) { 211dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent cb.onError(checkAudioFlinger()); 212dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent } 213a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void errorCallbackFromNative(int error) 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 218a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent ErrorCallback errorCallback = null; 219a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent synchronized (AudioSystem.class) { 220a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent if (mErrorCallback != null) { 221a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent errorCallback = mErrorCallback; 222a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 223a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 224a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent if (errorCallback != null) { 225a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent errorCallback.onError(error); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 228a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 2295a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi /** 2305a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi * Handles events for the audio policy manager about dynamic audio policies 2315a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi * @see android.media.audiopolicy.AudioPolicy 2325a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi */ 2335a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi public interface DynamicPolicyCallback 2345a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2355a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi void onDynamicPolicyMixStateUpdate(String regId, int state); 2365a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2375a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2385a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi //keep in sync with include/media/AudioPolicy.h 2395a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private final static int DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE = 0; 2405a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2415a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static DynamicPolicyCallback sDynPolicyCallback; 2425a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2435a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi public static void setDynamicPolicyCallback(DynamicPolicyCallback cb) 2445a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2455a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi synchronized (AudioSystem.class) { 2465a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi sDynPolicyCallback = cb; 2475a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi native_register_dynamic_policy_callback(); 2485a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2495a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2505a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2515a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static void dynamicPolicyCallbackFromNative(int event, String regId, int val) 2525a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2535a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi DynamicPolicyCallback cb = null; 2545a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi synchronized (AudioSystem.class) { 2555a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi if (sDynPolicyCallback != null) { 2565a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi cb = sDynPolicyCallback; 2575a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2585a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2595a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi if (cb != null) { 2605a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi switch(event) { 2615a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi case DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE: 2625a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi cb.onDynamicPolicyMixStateUpdate(regId, val); 2635a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi break; 2645a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi default: 2655a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi Log.e(TAG, "dynamicPolicyCallbackFromNative: unknown event " + event); 2665a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2675a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2685a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2695a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2705a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 271bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent /* 272bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent * Error codes used by public APIs (AudioTrack, AudioRecord, AudioManager ...) 273bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent * Must be kept in sync with frameworks/base/core/jni/android_media_AudioErrors.h 274bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent */ 275bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int SUCCESS = 0; 276bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int ERROR = -1; 277bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int BAD_VALUE = -2; 278bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int INVALID_OPERATION = -3; 279bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int PERMISSION_DENIED = -4; 280bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int NO_INIT = -5; 281bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int DEAD_OBJECT = -6; 2829bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 283a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* 284a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * AudioPolicyService methods 285a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent */ 286a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 28753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // 28853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // audio device definitions: must be kept in sync with values in system/core/audio.h 28953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // 29053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent 291d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public static final int DEVICE_NONE = 0x0; 29253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // reserved bits 29353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_BIT_IN = 0x80000000; 29453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_BIT_DEFAULT = 0x40000000; 2958b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten // output devices, be sure to update AudioManager.java also 296a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_EARPIECE = 0x1; 297a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_SPEAKER = 0x2; 298a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_WIRED_HEADSET = 0x4; 299a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_WIRED_HEADPHONE = 0x8; 300a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO = 0x10; 301a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20; 302a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40; 303a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP = 0x80; 304a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100; 305a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200; 306a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_AUX_DIGITAL = 0x400; 307948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_HDMI = DEVICE_OUT_AUX_DIGITAL; 30821e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800; 30921e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000; 31059f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_USB_ACCESSORY = 0x2000; 31159f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_USB_DEVICE = 0x4000; 31253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_OUT_REMOTE_SUBMIX = 0x8000; 313948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_TELEPHONY_TX = 0x10000; 314948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_LINE = 0x20000; 315948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_HDMI_ARC = 0x40000; 316948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_SPDIF = 0x80000; 317948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_FM = 0x100000; 31812307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int DEVICE_OUT_AUX_LINE = 0x200000; 31907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000; 32059f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent 32153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT; 3222ac2afeac989ea1dc326b0db996d6c6c8e00cc29Jean-Michel Trivi 3239bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final int DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | 3249bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_SPEAKER | 3259bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_WIRED_HEADSET | 3269bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_WIRED_HEADPHONE | 3279bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO | 3289bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 3299bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 3309bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP | 3319bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 3329bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 333948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_HDMI | 3349bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_ANLG_DOCK_HEADSET | 3359bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_DGTL_DOCK_HEADSET | 33659f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_ACCESSORY | 33759f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_DEVICE | 33853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_OUT_REMOTE_SUBMIX | 339948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_TELEPHONY_TX | 340948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_LINE | 341948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_HDMI_ARC | 342948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_SPDIF | 343948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_FM | 34412307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang DEVICE_OUT_AUX_LINE | 34507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood DEVICE_OUT_SPEAKER_SAFE | 3469bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_DEFAULT); 3479bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | 3489bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 3499bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER); 35059f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_ALL_SCO = (DEVICE_OUT_BLUETOOTH_SCO | 35159f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 35259f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_CARKIT); 35359f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_ALL_USB = (DEVICE_OUT_USB_ACCESSORY | 35459f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_DEVICE); 35512307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO = (DEVICE_OUT_AUX_LINE | 35641d974631c5f525da49c88d34cecedd5a4cfeda8Jungshik Jang DEVICE_OUT_HDMI_ARC | 35741d974631c5f525da49c88d34cecedd5a4cfeda8Jungshik Jang DEVICE_OUT_SPDIF); 3586f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang public static final int DEVICE_ALL_HDMI_SYSTEM_AUDIO_AND_SPEAKER = 3596f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang (DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO | 3606f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang DEVICE_OUT_SPEAKER); 36159f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent 362a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent // input devices 36353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_COMMUNICATION = DEVICE_BIT_IN | 0x1; 36453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_AMBIENT = DEVICE_BIT_IN | 0x2; 36553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BUILTIN_MIC = DEVICE_BIT_IN | 0x4; 36653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BLUETOOTH_SCO_HEADSET = DEVICE_BIT_IN | 0x8; 36753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_WIRED_HEADSET = DEVICE_BIT_IN | 0x10; 36853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_AUX_DIGITAL = DEVICE_BIT_IN | 0x20; 369948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_HDMI = DEVICE_IN_AUX_DIGITAL; 37053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_VOICE_CALL = DEVICE_BIT_IN | 0x40; 371948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_TELEPHONY_RX = DEVICE_IN_VOICE_CALL; 37253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BACK_MIC = DEVICE_BIT_IN | 0x80; 37353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_REMOTE_SUBMIX = DEVICE_BIT_IN | 0x100; 37453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ANLG_DOCK_HEADSET = DEVICE_BIT_IN | 0x200; 37553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_DGTL_DOCK_HEADSET = DEVICE_BIT_IN | 0x400; 37653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_USB_ACCESSORY = DEVICE_BIT_IN | 0x800; 37753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_USB_DEVICE = DEVICE_BIT_IN | 0x1000; 378948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_FM_TUNER = DEVICE_BIT_IN | 0x2000; 379948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_TV_TUNER = DEVICE_BIT_IN | 0x4000; 380948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_LINE = DEVICE_BIT_IN | 0x8000; 381948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_SPDIF = DEVICE_BIT_IN | 0x10000; 3820a40ec2192e4836b2fcb6ba51a7688aa6bd4ee98Mike Lockwood public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000; 383112c19ee8b459439c3462767199832e5394b37a8Terry Heo public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000; 38453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT; 38553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent 38653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | 38753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_AMBIENT | 38853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BUILTIN_MIC | 38953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BLUETOOTH_SCO_HEADSET | 39053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_WIRED_HEADSET | 391948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_HDMI | 392948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_TELEPHONY_RX | 39353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BACK_MIC | 39453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_REMOTE_SUBMIX | 39553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_ANLG_DOCK_HEADSET | 39653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_DGTL_DOCK_HEADSET | 39753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_USB_ACCESSORY | 39853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_USB_DEVICE | 399948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_FM_TUNER | 400948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_TV_TUNER | 401948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_LINE | 402948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_SPDIF | 4030a40ec2192e4836b2fcb6ba51a7688aa6bd4ee98Mike Lockwood DEVICE_IN_BLUETOOTH_A2DP | 404112c19ee8b459439c3462767199832e5394b37a8Terry Heo DEVICE_IN_LOOPBACK | 40553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_DEFAULT); 40653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET; 407c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY | 408c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean DEVICE_IN_USB_DEVICE); 409a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 410ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // device states, must match AudioSystem::device_connection_state 411a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_STATE_UNAVAILABLE = 0; 412a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_STATE_AVAILABLE = 1; 413ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten private static final int NUM_DEVICE_STATES = 1; 414a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 4159bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_EARPIECE_NAME = "earpiece"; 4169bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_SPEAKER_NAME = "speaker"; 4179bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_WIRED_HEADSET_NAME = "headset"; 4189bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_WIRED_HEADPHONE_NAME = "headphone"; 4199bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_NAME = "bt_sco"; 4209bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 4219bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME = "bt_sco_carkit"; 4229bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 4239bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME = "bt_a2dp_hp"; 4249bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME = "bt_a2dp_spk"; 4259bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_AUX_DIGITAL_NAME = "aux_digital"; 426948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_HDMI_NAME = "hdmi"; 4279bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 4289bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 429bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent public static final String DEVICE_OUT_USB_ACCESSORY_NAME = "usb_accessory"; 430bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent public static final String DEVICE_OUT_USB_DEVICE_NAME = "usb_device"; 43153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final String DEVICE_OUT_REMOTE_SUBMIX_NAME = "remote_submix"; 432948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_TELEPHONY_TX_NAME = "telephony_tx"; 433948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_LINE_NAME = "line"; 434948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_HDMI_ARC_NAME = "hmdi_arc"; 435948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_SPDIF_NAME = "spdif"; 436948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_FM_NAME = "fm_transmitter"; 4372b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock public static final String DEVICE_OUT_AUX_LINE_NAME = "aux_line"; 43807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe"; 43907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood 44007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_COMMUNICATION_NAME = "communication"; 44107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_AMBIENT_NAME = "ambient"; 44207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BUILTIN_MIC_NAME = "mic"; 44307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 44407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_WIRED_HEADSET_NAME = "headset"; 44507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_AUX_DIGITAL_NAME = "aux_digital"; 44607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_TELEPHONY_RX_NAME = "telephony_rx"; 44707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BACK_MIC_NAME = "back_mic"; 44807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_REMOTE_SUBMIX_NAME = "remote_submix"; 44907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 45007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 45107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_USB_ACCESSORY_NAME = "usb_accessory"; 45207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_USB_DEVICE_NAME = "usb_device"; 45307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_FM_TUNER_NAME = "fm_tuner"; 45407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_TV_TUNER_NAME = "tv_tuner"; 45507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_LINE_NAME = "line"; 45607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_SPDIF_NAME = "spdif"; 45707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 45807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_LOOPBACK_NAME = "loopback"; 4599bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 460948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static String getOutputDeviceName(int device) 4619bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent { 4629bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent switch(device) { 4639bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_EARPIECE: 4649bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_EARPIECE_NAME; 4659bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_SPEAKER: 4669bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_SPEAKER_NAME; 4679bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_WIRED_HEADSET: 4689bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_WIRED_HEADSET_NAME; 4699bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_WIRED_HEADPHONE: 4709bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_WIRED_HEADPHONE_NAME; 4719bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO: 4729bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_NAME; 4739bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO_HEADSET: 4749bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME; 4759bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO_CARKIT: 4769bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME; 4779bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP: 4789bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_NAME; 4799bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES: 4809bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME; 4819bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER: 4829bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME; 483948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_HDMI: 484948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_HDMI_NAME; 4859bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_ANLG_DOCK_HEADSET: 4869bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_ANLG_DOCK_HEADSET_NAME; 4879bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_DGTL_DOCK_HEADSET: 4889bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_DGTL_DOCK_HEADSET_NAME; 489bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent case DEVICE_OUT_USB_ACCESSORY: 490bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent return DEVICE_OUT_USB_ACCESSORY_NAME; 491bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent case DEVICE_OUT_USB_DEVICE: 492bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent return DEVICE_OUT_USB_DEVICE_NAME; 49353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent case DEVICE_OUT_REMOTE_SUBMIX: 49453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent return DEVICE_OUT_REMOTE_SUBMIX_NAME; 495948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_TELEPHONY_TX: 496948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_TELEPHONY_TX_NAME; 497948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_LINE: 498948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_LINE_NAME; 499948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_HDMI_ARC: 500948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_HDMI_ARC_NAME; 501948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_SPDIF: 502948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_SPDIF_NAME; 503948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_FM: 504948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_FM_NAME; 5052b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock case DEVICE_OUT_AUX_LINE: 5062b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock return DEVICE_OUT_AUX_LINE_NAME; 50707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_OUT_SPEAKER_SAFE: 50807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_OUT_SPEAKER_SAFE_NAME; 50953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent case DEVICE_OUT_DEFAULT: 5109bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent default: 51107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return Integer.toString(device); 5129bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent } 5139bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent } 5149bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 51507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static String getInputDeviceName(int device) 51607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood { 51707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood switch(device) { 51807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_COMMUNICATION: 51907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_COMMUNICATION_NAME; 52007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_AMBIENT: 52107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_AMBIENT_NAME; 52207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BUILTIN_MIC: 52307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BUILTIN_MIC_NAME; 52407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BLUETOOTH_SCO_HEADSET: 52507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BLUETOOTH_SCO_HEADSET_NAME; 52607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_WIRED_HEADSET: 52707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_WIRED_HEADSET_NAME; 52807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_AUX_DIGITAL: 52907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_AUX_DIGITAL_NAME; 53007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_TELEPHONY_RX: 53107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_TELEPHONY_RX_NAME; 53207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BACK_MIC: 53307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BACK_MIC_NAME; 53407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_REMOTE_SUBMIX: 53507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_REMOTE_SUBMIX_NAME; 53607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_ANLG_DOCK_HEADSET: 53707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_ANLG_DOCK_HEADSET_NAME; 53807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_DGTL_DOCK_HEADSET: 53907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_DGTL_DOCK_HEADSET_NAME; 54007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_USB_ACCESSORY: 54107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_USB_ACCESSORY_NAME; 54207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_USB_DEVICE: 54307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_USB_DEVICE_NAME; 54407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_FM_TUNER: 54507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_FM_TUNER_NAME; 54607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_TV_TUNER: 54707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_TV_TUNER_NAME; 54807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_LINE: 54907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_LINE_NAME; 55007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_SPDIF: 55107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_SPDIF_NAME; 55207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BLUETOOTH_A2DP: 55307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BLUETOOTH_A2DP_NAME; 55407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_LOOPBACK: 55507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_LOOPBACK_NAME; 55607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_DEFAULT: 55707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood default: 55807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return Integer.toString(device); 55907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood } 56007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood } 561948d32748caaac5be06c991ebf00f74265a7849fEric Laurent 562ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // phone state, match audio_mode??? 563a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_OFFCALL = 0; 564a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_RINGING = 1; 565a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_INCALL = 2; 566a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 567ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // device categories config for setForceUse, must match AudioSystem::forced_config 568a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_NONE = 0; 569a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_SPEAKER = 1; 570a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_HEADPHONES = 2; 571a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_BT_SCO = 3; 572a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_BT_A2DP = 4; 573a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_WIRED_ACCESSORY = 5; 574eb14a783be073b5fd6e8c8c9bc87d2d1919f2c9eEric Laurent public static final int FORCE_BT_CAR_DOCK = 6; 575eb14a783be073b5fd6e8c8c9bc87d2d1919f2c9eEric Laurent public static final int FORCE_BT_DESK_DOCK = 7; 57621e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int FORCE_ANALOG_DOCK = 8; 57721e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int FORCE_DIGITAL_DOCK = 9; 5787847211fb4699bf6018e29d214a918ed6657319bEric Laurent public static final int FORCE_NO_BT_A2DP = 10; 579c203ecfd9f6c356542fcb10bc85b27b98b170ddfJean-Michel Trivi public static final int FORCE_SYSTEM_ENFORCED = 11; 58012307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int FORCE_HDMI_SYSTEM_AUDIO_ENFORCED = 12; 58112307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang private static final int NUM_FORCE_CONFIG = 13; 582a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_DEFAULT = FORCE_NONE; 583a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 584ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // usage for setForceUse, must match AudioSystem::force_use 585a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_COMMUNICATION = 0; 586a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_MEDIA = 1; 587a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_RECORD = 2; 5886154412ee8e07e9cde129cccb944dd7ed9dcef53Jean-Michel Trivi public static final int FOR_DOCK = 3; 589dd45d01128423a82652a3c9d77fa393631d95229Eric Laurent public static final int FOR_SYSTEM = 4; 59012307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int FOR_HDMI_SYSTEM_AUDIO = 5; 59112307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang private static final int NUM_FORCE_USE = 6; 592a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 593505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent // usage for AudioRecord.startRecordingSync(), must match AudioSystem::sync_event_t 594505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent public static final int SYNC_EVENT_NONE = 0; 595505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1; 596505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent 59710804eb2818ab59b763a37b4f6151693c2ebba7bPaul McLean public static native int setDeviceConnectionState(int device, int state, 59810804eb2818ab59b763a37b4f6151693c2ebba7bPaul McLean String device_address, String device_name); 599a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int getDeviceConnectionState(int device, String device_address); 600a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setPhoneState(int state); 601a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setForceUse(int usage, int config); 602a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int getForceUse(int usage); 603a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int initStreamVolume(int stream, int indexMin, int indexMax); 6049bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static native int setStreamVolumeIndex(int stream, int index, int device); 6059bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static native int getStreamVolumeIndex(int stream, int device); 606cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native int setMasterVolume(float value); 607cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native float getMasterVolume(); 608cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native int setMasterMute(boolean mute); 609cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native boolean getMasterMute(); 6108b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten public static native int getDevicesForStream(int stream); 611c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten 612c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten // helpers for android.media.AudioManager.getProperty(), see description there for meaning 613c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten public static native int getPrimaryOutputSamplingRate(); 614c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten public static native int getPrimaryOutputFrameCount(); 61561dcdf3764b614c6f01e77cb4342d192e3101f8aOliver Woodman public static native int getOutputLatency(int stream); 616c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten 617fd116ad1ab02f6060a0b2201f018317fa32e28b4Glenn Kasten public static native int setLowRamDevice(boolean isLowRamDevice); 618dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent public static native int checkAudioFlinger(); 619b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 620b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation); 621b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int createAudioPatch(AudioPatch[] patch, 622b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent AudioPortConfig[] sources, AudioPortConfig[] sinks); 623b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int releaseAudioPatch(AudioPatch patch); 624b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int listAudioPatches(ArrayList<AudioPatch> patches, int[] generation); 6253a24199a0fe9479802ff6096d82cb3745efa1f1fEric Laurent public static native int setAudioPortConfig(AudioPortConfig config); 626b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent 6275a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi // declare this instance as having a dynamic policy callback handler 6285a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static native final void native_register_dynamic_policy_callback(); 6295a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 630b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent // must be kept in sync with value in include/system/audio.h 631b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public static final int AUDIO_HW_SYNC_INVALID = 0; 632b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent 633b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public static native int getAudioHwSyncForSession(int sessionId); 6347f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurent 6357f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurent public static native int registerPolicyMixes(ArrayList<AudioMix> mixes, boolean register); 6366156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6376156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6386156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // Items shared with audio service 6396156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6406156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 6416156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * The delay before playing a sound. This small period exists so the user 6426156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * can press another key (non-volume keys, too) to have it NOT be audible. 6436156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <p> 6446156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * PhoneWindow will implement this part. 6456156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 6466156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLAY_SOUND_DELAY = 300; 6476156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6486156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 6496156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * Constant to identify a focus stack entry that is used to hold the focus while the phone 6506156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * is ringing or during a call. Used by com.android.internal.telephony.CallManager when 6516156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * entering and exiting calls. 6526156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 6536156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public final static String IN_VOICE_COMM_FOCUS_ID = "AudioFocus_For_Phone_Ring_And_Calls"; 6546156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6556156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 6566156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * @see AudioManager#setVibrateSetting(int, int) 6576156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 6586156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getValueForVibrateSetting(int existingValue, int vibrateType, 6596156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock int vibrateSetting) { 6606156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6616156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // First clear the existing setting. Each vibrate type has two bits in 6626156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // the value. Note '3' is '11' in binary. 6636156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock existingValue &= ~(3 << (vibrateType * 2)); 6646156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6656156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // Set into the old value 6666156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock existingValue |= (vibrateSetting & 3) << (vibrateType * 2); 6676156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6686156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return existingValue; 6696156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 6706156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6716156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getDefaultStreamVolume(int streamType) { 6726156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return DEFAULT_STREAM_VOLUME[streamType]; 6736156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 6746156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6756156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int[] DEFAULT_STREAM_VOLUME = new int[] { 6766156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 4, // STREAM_VOICE_CALL 6776156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_SYSTEM 6786156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 5, // STREAM_RING 6796156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11, // STREAM_MUSIC 6806156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6, // STREAM_ALARM 6816156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 5, // STREAM_NOTIFICATION 6826156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_BLUETOOTH_SCO 6836156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_SYSTEM_ENFORCED 6846156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11, // STREAM_DTMF 6856156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11 // STREAM_TTS 6866156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock }; 6876156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6886156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static String streamToString(int stream) { 6896156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (stream >= 0 && stream < STREAM_NAMES.length) return STREAM_NAMES[stream]; 6906156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (stream == AudioManager.USE_DEFAULT_STREAM_TYPE) return "USE_DEFAULT_STREAM_TYPE"; 6916156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return "UNKNOWN_STREAM_" + stream; 6926156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 6936156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6946156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform has no specific capabilities */ 6956156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_DEFAULT = 0; 6966156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform is voice call capable (a phone) */ 6976156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_VOICE = 1; 6986156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform is a television or a set-top box */ 6996156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_TELEVISION = 2; 7006156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7016156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 7026156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * Return the platform type that this is running on. One of: 7036156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <ul> 7046156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_VOICE}</li> 7056156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_TELEVISION}</li> 7066156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_DEFAULT}</li> 7076156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * </ul> 7086156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 7096156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getPlatformType(Context context) { 7106156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (context.getResources().getBoolean(com.android.internal.R.bool.config_voice_capable)) { 7116156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_VOICE; 7126156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } else if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)) { 7136156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_TELEVISION; 7146156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } else { 7156156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_DEFAULT; 7166156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 7176156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 7186156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7196156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int DEFAULT_MUTE_STREAMS_AFFECTED = 7206156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_MUSIC) | 7216156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_RING) | 7226156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_NOTIFICATION) | 7236156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_SYSTEM); 7244bcdba848449b33d7022de527c526943aff1f5fdEric Laurent 7254bcdba848449b33d7022de527c526943aff1f5fdEric Laurent /** 7264bcdba848449b33d7022de527c526943aff1f5fdEric Laurent * Event posted by AudioTrack and AudioRecord JNI (JNIDeviceCallback) when routing changes. 7274bcdba848449b33d7022de527c526943aff1f5fdEric Laurent * Keep in sync with core/jni/android_media_DeviceCallback.h. 7284bcdba848449b33d7022de527c526943aff1f5fdEric Laurent */ 7294bcdba848449b33d7022de527c526943aff1f5fdEric Laurent final static int NATIVE_EVENT_ROUTING_CHANGE = 1000; 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 731b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 732