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 */ 4246d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the default audio stream volume */ 43a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi public static final int STREAM_DEFAULT = -1; 4446d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for phone calls */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_VOICE_CALL = 0; 4646d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for system sounds */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_SYSTEM = 1; 4846d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for the phone ring and message alerts */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_RING = 2; 5046d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for music playback */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_MUSIC = 3; 5246d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for alarms */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_ALARM = 4; 5446d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for notifications */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_NOTIFICATION = 5; 5646d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for phone calls when connected on bluetooth */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_BLUETOOTH_SCO = 6; 5846d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for enforced system sounds in certain 5946d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi * countries (e.g camera in Japan) */ 60a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_SYSTEM_ENFORCED = 7; 6146d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams for DTMF tones */ 62a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_DTMF = 8; 6346d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi /** Used to identify the volume of audio streams exclusively transmitted through the 6446d5b820d7c4fc02cd650c46809d2307e0d7abf8Jean-Michel Trivi * speaker (TTS) of the device */ 65a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_TTS = 9; 663f0945a608197fa8919ebe909f6388d9d59e8c29Jean-Michel Trivi /** Used to identify the volume of audio streams for accessibility prompts */ 673f0945a608197fa8919ebe909f6388d9d59e8c29Jean-Michel Trivi public static final int STREAM_ACCESSIBILITY = 10; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated Use {@link #numStreamTypes() instead} 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NUM_STREAMS = 5; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Expose only the getter method publicly so we can change it in the future 743f0945a608197fa8919ebe909f6388d9d59e8c29Jean-Michel Trivi private static final int NUM_STREAM_TYPES = 11; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int getNumStreamTypes() { return NUM_STREAM_TYPES; } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 776156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final String[] STREAM_NAMES = new String[] { 786156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_VOICE_CALL", 796156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_SYSTEM", 806156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_RING", 816156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_MUSIC", 826156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_ALARM", 836156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_NOTIFICATION", 846156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_BLUETOOTH_SCO", 856156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_SYSTEM_ENFORCED", 866156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_DTMF", 873f0945a608197fa8919ebe909f6388d9d59e8c29Jean-Michel Trivi "STREAM_TTS", 883f0945a608197fa8919ebe909f6388d9d59e8c29Jean-Michel Trivi "STREAM_ACCESSIBILITY" 896156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock }; 906156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the microphone mute on or off. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 94ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @param on set <var>true</var> to mute the microphone; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>false</var> to turn mute off 96ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native int muteMicrophone(boolean on); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether the microphone mute is on or off. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 103ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @return true if microphone is muted, false if it's not 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native boolean isMicrophoneMuted(); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 107ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten /* modes for setPhoneState, must match AudioSystem.h audio_mode */ 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_INVALID = -2; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_CURRENT = -1; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_NORMAL = 0; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_RINGTONE = 1; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_IN_CALL = 2; 1138f677d66d9c3ba34c97e69b2bb9e161f129af0eeJean-Michel Trivi public static final int MODE_IN_COMMUNICATION = 3; 1148f677d66d9c3ba34c97e69b2bb9e161f129af0eeJean-Michel Trivi public static final int NUM_MODES = 4; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 117ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten /* Routing bits for the former setRouting/getRouting API */ 118a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 119a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_EARPIECE = (1 << 0); 120a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 121a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_SPEAKER = (1 << 1); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @deprecated use {@link #ROUTE_BLUETOOTH_SCO} */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated public static final int ROUTE_BLUETOOTH = (1 << 2); 124a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 125a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_BLUETOOTH_SCO = (1 << 2); 126a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 127a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_HEADSET = (1 << 3); 128a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 129a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_BLUETOOTH_A2DP = (1 << 4); 130a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 131a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_ALL = 0xFFFFFFFF; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 133b2b292317482d00d067bc91669322b273be61926Rom Lemarchand // Keep in sync with system/media/audio/include/system/audio.h 13460bd67f7b1b85ed0ee19f77b056b90350a3d5343Glenn Kasten public static final int AUDIO_SESSION_ALLOCATE = 0; 13560bd67f7b1b85ed0ee19f77b056b90350a3d5343Glenn Kasten 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 13723f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent * Checks whether the specified stream type is active. 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13923f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent * return true if any track playing on this stream is active. 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14125101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent public static native boolean isStreamActive(int stream, int inPastMs); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 144679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * Checks whether the specified stream type is active on a remotely connected device. The notion 145679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * of what constitutes a remote device is enforced by the audio policy manager of the platform. 146679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * 147679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * return true if any track playing on this stream is active on a remote device. 148679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi */ 149679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi public static native boolean isStreamActiveRemotely(int stream, int inPastMs); 150679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi 151679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi /* 152d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * Checks whether the specified audio source is active. 153d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * 154d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * return true if any recorder using this source is currently recording 155d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi */ 156d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi public static native boolean isSourceActive(int source); 157d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi 158d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi /* 1598a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi * Returns a new unused audio session ID 1608a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi */ 1618a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi public static native int newAudioSessionId(); 1628a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi 1638a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi /* 164292a6a4e9934a94eea97b018befde3baed895f7dJean-Michel Trivi * Returns a new unused audio player ID 165292a6a4e9934a94eea97b018befde3baed895f7dJean-Michel Trivi */ 166292a6a4e9934a94eea97b018befde3baed895f7dJean-Michel Trivi public static native int newAudioPlayerId(); 167292a6a4e9934a94eea97b018befde3baed895f7dJean-Michel Trivi 168292a6a4e9934a94eea97b018befde3baed895f7dJean-Michel Trivi 169292a6a4e9934a94eea97b018befde3baed895f7dJean-Michel Trivi /* 170a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Sets a group generic audio configuration parameters. The use of these parameters 171ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * are platform dependent, see libaudio 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 173a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * param keyValuePairs list of parameters key value pairs in the form: 174a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * key1=value1;key2=value2;... 175a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent */ 176a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setParameters(String keyValuePairs); 177a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 178a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* 179a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Gets a group generic audio configuration parameters. The use of these parameters 180ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * are platform dependent, see libaudio 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 182a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * param keys list of parameters 183a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * return value: list of parameters key value pairs in the form: 184a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * key1=value1;key2=value2;... 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 186a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native String getParameters(String keys); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 188ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // These match the enum AudioError in frameworks/base/core/jni/android_media_AudioSystem.cpp 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Command sucessful or Media server restarted. see ErrorCallback */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_OK = 0; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Command failed or unspecified audio error. see ErrorCallback */ 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_ERROR = 1; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Media server died. see ErrorCallback */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_SERVER_DIED = 100; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static ErrorCallback mErrorCallback; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handles the audio error callback. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface ErrorCallback 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Callback for audio server errors. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * param error error code: 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - AUDIO_STATUS_OK 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - AUDIO_STATUS_SERVER_DIED 208ef02827d4c3b9c0601eddc9c348fc2ea866420a2Eric Laurent * - AUDIO_STATUS_ERROR 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onError(int error); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Registers a callback to be invoked when an error occurs. 215ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @param cb the callback to run 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void setErrorCallback(ErrorCallback cb) 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 219a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent synchronized (AudioSystem.class) { 220a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent mErrorCallback = cb; 221dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent if (cb != null) { 222dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent cb.onError(checkAudioFlinger()); 223dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent } 224a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void errorCallbackFromNative(int error) 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 229a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent ErrorCallback errorCallback = null; 230a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent synchronized (AudioSystem.class) { 231a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent if (mErrorCallback != null) { 232a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent errorCallback = mErrorCallback; 233a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 234a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 235a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent if (errorCallback != null) { 236a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent errorCallback.onError(error); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 239a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 2405a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi /** 241d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi * Handles events from the audio policy manager about dynamic audio policies 2425a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi * @see android.media.audiopolicy.AudioPolicy 2435a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi */ 2445a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi public interface DynamicPolicyCallback 2455a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2465a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi void onDynamicPolicyMixStateUpdate(String regId, int state); 2475a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2485a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2495a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi //keep in sync with include/media/AudioPolicy.h 2505a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private final static int DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE = 0; 2515a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2525a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static DynamicPolicyCallback sDynPolicyCallback; 2535a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2545a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi public static void setDynamicPolicyCallback(DynamicPolicyCallback cb) 2555a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2565a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi synchronized (AudioSystem.class) { 2575a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi sDynPolicyCallback = cb; 2585a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi native_register_dynamic_policy_callback(); 2595a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2605a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2615a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2625a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static void dynamicPolicyCallbackFromNative(int event, String regId, int val) 2635a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2645a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi DynamicPolicyCallback cb = null; 2655a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi synchronized (AudioSystem.class) { 2665a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi if (sDynPolicyCallback != null) { 2675a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi cb = sDynPolicyCallback; 2685a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2695a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2705a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi if (cb != null) { 2715a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi switch(event) { 2725a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi case DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE: 2735a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi cb.onDynamicPolicyMixStateUpdate(regId, val); 2745a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi break; 2755a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi default: 2765a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi Log.e(TAG, "dynamicPolicyCallbackFromNative: unknown event " + event); 2775a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2785a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2795a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2805a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 281d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi /** 282d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi * Handles events from the audio policy manager about recording events 283d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi * @see android.media.AudioManager.AudioRecordingCallback 284d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi */ 285d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi public interface AudioRecordingCallback 286d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi { 28733fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi /** 28833fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * Callback for recording activity notifications events 28933fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param event 29033fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param session 29133fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param source 29233fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param recordingFormat an array of ints containing respectively the client and device 2938ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * recording configurations (2*3 ints), followed by the patch handle: 2948ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * index 0: client format 2958ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * 1: client channel mask 2968ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * 2: client sample rate 2978ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * 3: device format 2988ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * 4: device channel mask 2998ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * 5: device sample rate 3008ab728093eed85c176822d58a0d2ba1f4ebbb362Jean-Michel Trivi * 6: patch handle 30133fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi */ 30233fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi void onRecordingConfigurationChanged(int event, int session, int source, 30333fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi int[] recordingFormat); 304d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi } 305d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi 306d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi private static AudioRecordingCallback sRecordingCallback; 307d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi 308d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi public static void setRecordingCallback(AudioRecordingCallback cb) { 309d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi synchronized (AudioSystem.class) { 310d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi sRecordingCallback = cb; 311d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi native_register_recording_callback(); 312d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi } 313d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi } 314d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi 31533fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi /** 31633fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * Callback from native for recording configuration updates. 31733fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param event 31833fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param session 31933fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param source 32033fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * @param recordingFormat see 32133fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * {@link AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int, int[])} for 32233fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi * the description of the record format. 32333fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi */ 32433fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi private static void recordingCallbackFromNative(int event, int session, int source, 32533fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi int[] recordingFormat) { 326d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi AudioRecordingCallback cb = null; 327d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi synchronized (AudioSystem.class) { 328d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi cb = sRecordingCallback; 329d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi } 330d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi if (cb != null) { 33133fd8169cdb7e7fa33885b6f892bc4f6df68959bJean-Michel Trivi cb.onRecordingConfigurationChanged(event, session, source, recordingFormat); 332d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi } 333d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi } 3345a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 335bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent /* 336bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent * Error codes used by public APIs (AudioTrack, AudioRecord, AudioManager ...) 337bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent * Must be kept in sync with frameworks/base/core/jni/android_media_AudioErrors.h 338bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent */ 339bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int SUCCESS = 0; 340bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int ERROR = -1; 341bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int BAD_VALUE = -2; 342bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int INVALID_OPERATION = -3; 343bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int PERMISSION_DENIED = -4; 344bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int NO_INIT = -5; 345bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int DEAD_OBJECT = -6; 3464e1ccd370fc268f3207c5baee08ac8c943c3fdf9Eric Laurent public static final int WOULD_BLOCK = -7; 3479bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 348a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* 349a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * AudioPolicyService methods 350a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent */ 351a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 35253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // 35353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // audio device definitions: must be kept in sync with values in system/core/audio.h 35453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // 35553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent 356d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public static final int DEVICE_NONE = 0x0; 35753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // reserved bits 35853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_BIT_IN = 0x80000000; 35953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_BIT_DEFAULT = 0x40000000; 3608b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten // output devices, be sure to update AudioManager.java also 361a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_EARPIECE = 0x1; 362a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_SPEAKER = 0x2; 363a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_WIRED_HEADSET = 0x4; 364a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_WIRED_HEADPHONE = 0x8; 365a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO = 0x10; 366a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20; 367a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40; 368a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP = 0x80; 369a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100; 370a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200; 371a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_AUX_DIGITAL = 0x400; 372948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_HDMI = DEVICE_OUT_AUX_DIGITAL; 37321e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800; 37421e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000; 37559f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_USB_ACCESSORY = 0x2000; 37659f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_USB_DEVICE = 0x4000; 37753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_OUT_REMOTE_SUBMIX = 0x8000; 378948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_TELEPHONY_TX = 0x10000; 379948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_LINE = 0x20000; 380948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_HDMI_ARC = 0x40000; 381948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_SPDIF = 0x80000; 382948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_FM = 0x100000; 38312307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int DEVICE_OUT_AUX_LINE = 0x200000; 38407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000; 3851e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final int DEVICE_OUT_IP = 0x800000; 38693687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi public static final int DEVICE_OUT_BUS = 0x1000000; 3872eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final int DEVICE_OUT_PROXY = 0x2000000; 3882eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final int DEVICE_OUT_USB_HEADSET = 0x4000000; 38959f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent 39053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT; 3912ac2afeac989ea1dc326b0db996d6c6c8e00cc29Jean-Michel Trivi 3929bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final int DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | 3939bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_SPEAKER | 3949bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_WIRED_HEADSET | 3959bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_WIRED_HEADPHONE | 3969bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO | 3979bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 3989bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 3999bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP | 4009bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 4019bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 402948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_HDMI | 4039bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_ANLG_DOCK_HEADSET | 4049bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_DGTL_DOCK_HEADSET | 40559f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_ACCESSORY | 40659f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_DEVICE | 40753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_OUT_REMOTE_SUBMIX | 408948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_TELEPHONY_TX | 409948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_LINE | 410948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_HDMI_ARC | 411948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_SPDIF | 412948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_FM | 41312307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang DEVICE_OUT_AUX_LINE | 41407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood DEVICE_OUT_SPEAKER_SAFE | 4151e725f8137391474b71ebd9109a0968ecef5373fEric Laurent DEVICE_OUT_IP | 41693687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi DEVICE_OUT_BUS | 4172eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent DEVICE_OUT_PROXY | 4182eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent DEVICE_OUT_USB_HEADSET | 4199bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_DEFAULT); 4209bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | 4219bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 4229bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER); 42359f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_ALL_SCO = (DEVICE_OUT_BLUETOOTH_SCO | 42459f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 42559f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_CARKIT); 42659f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_ALL_USB = (DEVICE_OUT_USB_ACCESSORY | 42759f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_DEVICE); 42812307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO = (DEVICE_OUT_AUX_LINE | 42941d974631c5f525da49c88d34cecedd5a4cfeda8Jungshik Jang DEVICE_OUT_HDMI_ARC | 43041d974631c5f525da49c88d34cecedd5a4cfeda8Jungshik Jang DEVICE_OUT_SPDIF); 4316f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang public static final int DEVICE_ALL_HDMI_SYSTEM_AUDIO_AND_SPEAKER = 4326f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang (DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO | 4336f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang DEVICE_OUT_SPEAKER); 43459f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent 435a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent // input devices 43653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_COMMUNICATION = DEVICE_BIT_IN | 0x1; 43753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_AMBIENT = DEVICE_BIT_IN | 0x2; 43853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BUILTIN_MIC = DEVICE_BIT_IN | 0x4; 43953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BLUETOOTH_SCO_HEADSET = DEVICE_BIT_IN | 0x8; 44053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_WIRED_HEADSET = DEVICE_BIT_IN | 0x10; 44153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_AUX_DIGITAL = DEVICE_BIT_IN | 0x20; 442948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_HDMI = DEVICE_IN_AUX_DIGITAL; 44353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_VOICE_CALL = DEVICE_BIT_IN | 0x40; 444948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_TELEPHONY_RX = DEVICE_IN_VOICE_CALL; 44553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BACK_MIC = DEVICE_BIT_IN | 0x80; 44653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_REMOTE_SUBMIX = DEVICE_BIT_IN | 0x100; 44753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ANLG_DOCK_HEADSET = DEVICE_BIT_IN | 0x200; 44853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_DGTL_DOCK_HEADSET = DEVICE_BIT_IN | 0x400; 44953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_USB_ACCESSORY = DEVICE_BIT_IN | 0x800; 45053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_USB_DEVICE = DEVICE_BIT_IN | 0x1000; 451948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_FM_TUNER = DEVICE_BIT_IN | 0x2000; 452948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_TV_TUNER = DEVICE_BIT_IN | 0x4000; 453948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_LINE = DEVICE_BIT_IN | 0x8000; 454948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_SPDIF = DEVICE_BIT_IN | 0x10000; 4550a40ec2192e4836b2fcb6ba51a7688aa6bd4ee98Mike Lockwood public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000; 456112c19ee8b459439c3462767199832e5394b37a8Terry Heo public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000; 4571e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000; 45893687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi public static final int DEVICE_IN_BUS = DEVICE_BIT_IN | 0x100000; 4592eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final int DEVICE_IN_PROXY = DEVICE_BIT_IN | 0x1000000; 4602eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final int DEVICE_IN_USB_HEADSET = DEVICE_BIT_IN | 0x2000000; 46153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT; 46253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent 46353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | 46453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_AMBIENT | 46553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BUILTIN_MIC | 46653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BLUETOOTH_SCO_HEADSET | 46753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_WIRED_HEADSET | 468948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_HDMI | 469948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_TELEPHONY_RX | 47053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BACK_MIC | 47153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_REMOTE_SUBMIX | 47253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_ANLG_DOCK_HEADSET | 47353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_DGTL_DOCK_HEADSET | 47453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_USB_ACCESSORY | 47553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_USB_DEVICE | 476948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_FM_TUNER | 477948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_TV_TUNER | 478948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_LINE | 479948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_SPDIF | 4800a40ec2192e4836b2fcb6ba51a7688aa6bd4ee98Mike Lockwood DEVICE_IN_BLUETOOTH_A2DP | 481112c19ee8b459439c3462767199832e5394b37a8Terry Heo DEVICE_IN_LOOPBACK | 4821e725f8137391474b71ebd9109a0968ecef5373fEric Laurent DEVICE_IN_IP | 48393687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi DEVICE_IN_BUS | 4842eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent DEVICE_IN_PROXY | 4852eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent DEVICE_IN_USB_HEADSET | 48653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_DEFAULT); 48753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET; 488c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY | 489c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean DEVICE_IN_USB_DEVICE); 490a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 491ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // device states, must match AudioSystem::device_connection_state 492a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_STATE_UNAVAILABLE = 0; 493a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_STATE_AVAILABLE = 1; 494ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten private static final int NUM_DEVICE_STATES = 1; 495a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 4969bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_EARPIECE_NAME = "earpiece"; 4979bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_SPEAKER_NAME = "speaker"; 4989bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_WIRED_HEADSET_NAME = "headset"; 4999bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_WIRED_HEADPHONE_NAME = "headphone"; 5009bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_NAME = "bt_sco"; 5019bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 5029bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME = "bt_sco_carkit"; 5039bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 5049bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME = "bt_a2dp_hp"; 5059bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME = "bt_a2dp_spk"; 5069bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_AUX_DIGITAL_NAME = "aux_digital"; 507948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_HDMI_NAME = "hdmi"; 5089bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 5099bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 510bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent public static final String DEVICE_OUT_USB_ACCESSORY_NAME = "usb_accessory"; 511bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent public static final String DEVICE_OUT_USB_DEVICE_NAME = "usb_device"; 51253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final String DEVICE_OUT_REMOTE_SUBMIX_NAME = "remote_submix"; 513948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_TELEPHONY_TX_NAME = "telephony_tx"; 514948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_LINE_NAME = "line"; 515948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_HDMI_ARC_NAME = "hmdi_arc"; 516948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_SPDIF_NAME = "spdif"; 517948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_FM_NAME = "fm_transmitter"; 5182b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock public static final String DEVICE_OUT_AUX_LINE_NAME = "aux_line"; 51907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe"; 5201e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final String DEVICE_OUT_IP_NAME = "ip"; 52193687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi public static final String DEVICE_OUT_BUS_NAME = "bus"; 5222eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final String DEVICE_OUT_PROXY_NAME = "proxy"; 5232eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final String DEVICE_OUT_USB_HEADSET_NAME = "usb_headset"; 52407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood 52507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_COMMUNICATION_NAME = "communication"; 52607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_AMBIENT_NAME = "ambient"; 52707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BUILTIN_MIC_NAME = "mic"; 52807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 52907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_WIRED_HEADSET_NAME = "headset"; 53007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_AUX_DIGITAL_NAME = "aux_digital"; 53107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_TELEPHONY_RX_NAME = "telephony_rx"; 53207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BACK_MIC_NAME = "back_mic"; 53307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_REMOTE_SUBMIX_NAME = "remote_submix"; 53407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 53507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 53607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_USB_ACCESSORY_NAME = "usb_accessory"; 53707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_USB_DEVICE_NAME = "usb_device"; 53807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_FM_TUNER_NAME = "fm_tuner"; 53907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_TV_TUNER_NAME = "tv_tuner"; 54007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_LINE_NAME = "line"; 54107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_SPDIF_NAME = "spdif"; 54207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 54307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_LOOPBACK_NAME = "loopback"; 5441e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final String DEVICE_IN_IP_NAME = "ip"; 54593687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi public static final String DEVICE_IN_BUS_NAME = "bus"; 5462eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final String DEVICE_IN_PROXY_NAME = "proxy"; 5472eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent public static final String DEVICE_IN_USB_HEADSET_NAME = "usb_headset"; 5489bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 549948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static String getOutputDeviceName(int device) 5509bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent { 5519bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent switch(device) { 5529bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_EARPIECE: 5539bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_EARPIECE_NAME; 5549bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_SPEAKER: 5559bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_SPEAKER_NAME; 5569bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_WIRED_HEADSET: 5579bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_WIRED_HEADSET_NAME; 5589bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_WIRED_HEADPHONE: 5599bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_WIRED_HEADPHONE_NAME; 5609bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO: 5619bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_NAME; 5629bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO_HEADSET: 5639bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME; 5649bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO_CARKIT: 5659bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME; 5669bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP: 5679bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_NAME; 5689bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES: 5699bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME; 5709bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER: 5719bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME; 572948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_HDMI: 573948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_HDMI_NAME; 5749bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_ANLG_DOCK_HEADSET: 5759bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_ANLG_DOCK_HEADSET_NAME; 5769bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_DGTL_DOCK_HEADSET: 5779bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_DGTL_DOCK_HEADSET_NAME; 578bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent case DEVICE_OUT_USB_ACCESSORY: 579bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent return DEVICE_OUT_USB_ACCESSORY_NAME; 580bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent case DEVICE_OUT_USB_DEVICE: 581bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent return DEVICE_OUT_USB_DEVICE_NAME; 58253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent case DEVICE_OUT_REMOTE_SUBMIX: 58353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent return DEVICE_OUT_REMOTE_SUBMIX_NAME; 584948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_TELEPHONY_TX: 585948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_TELEPHONY_TX_NAME; 586948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_LINE: 587948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_LINE_NAME; 588948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_HDMI_ARC: 589948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_HDMI_ARC_NAME; 590948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_SPDIF: 591948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_SPDIF_NAME; 592948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_FM: 593948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_FM_NAME; 5942b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock case DEVICE_OUT_AUX_LINE: 5952b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock return DEVICE_OUT_AUX_LINE_NAME; 59607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_OUT_SPEAKER_SAFE: 59707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_OUT_SPEAKER_SAFE_NAME; 5981e725f8137391474b71ebd9109a0968ecef5373fEric Laurent case DEVICE_OUT_IP: 5991e725f8137391474b71ebd9109a0968ecef5373fEric Laurent return DEVICE_OUT_IP_NAME; 60093687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi case DEVICE_OUT_BUS: 60193687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi return DEVICE_OUT_BUS_NAME; 6022eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent case DEVICE_OUT_PROXY: 6032eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent return DEVICE_OUT_PROXY_NAME; 6042eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent case DEVICE_OUT_USB_HEADSET: 6052eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent return DEVICE_OUT_USB_HEADSET_NAME; 60653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent case DEVICE_OUT_DEFAULT: 6079bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent default: 60807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return Integer.toString(device); 6099bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent } 6109bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent } 6119bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 61207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static String getInputDeviceName(int device) 61307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood { 61407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood switch(device) { 61507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_COMMUNICATION: 61607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_COMMUNICATION_NAME; 61707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_AMBIENT: 61807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_AMBIENT_NAME; 61907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BUILTIN_MIC: 62007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BUILTIN_MIC_NAME; 62107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BLUETOOTH_SCO_HEADSET: 62207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BLUETOOTH_SCO_HEADSET_NAME; 62307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_WIRED_HEADSET: 62407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_WIRED_HEADSET_NAME; 62507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_AUX_DIGITAL: 62607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_AUX_DIGITAL_NAME; 62707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_TELEPHONY_RX: 62807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_TELEPHONY_RX_NAME; 62907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BACK_MIC: 63007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BACK_MIC_NAME; 63107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_REMOTE_SUBMIX: 63207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_REMOTE_SUBMIX_NAME; 63307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_ANLG_DOCK_HEADSET: 63407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_ANLG_DOCK_HEADSET_NAME; 63507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_DGTL_DOCK_HEADSET: 63607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_DGTL_DOCK_HEADSET_NAME; 63707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_USB_ACCESSORY: 63807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_USB_ACCESSORY_NAME; 63907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_USB_DEVICE: 64007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_USB_DEVICE_NAME; 64107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_FM_TUNER: 64207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_FM_TUNER_NAME; 64307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_TV_TUNER: 64407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_TV_TUNER_NAME; 64507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_LINE: 64607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_LINE_NAME; 64707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_SPDIF: 64807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_SPDIF_NAME; 64907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BLUETOOTH_A2DP: 65007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BLUETOOTH_A2DP_NAME; 65107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_LOOPBACK: 65207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_LOOPBACK_NAME; 6531e725f8137391474b71ebd9109a0968ecef5373fEric Laurent case DEVICE_IN_IP: 6541e725f8137391474b71ebd9109a0968ecef5373fEric Laurent return DEVICE_IN_IP_NAME; 65593687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi case DEVICE_IN_BUS: 65693687f2718fbaeff556c02f2a15f5c8cc61621dcJean-Michel Trivi return DEVICE_IN_BUS_NAME; 6572eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent case DEVICE_IN_PROXY: 6582eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent return DEVICE_IN_PROXY_NAME; 6592eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent case DEVICE_IN_USB_HEADSET: 6602eb39497bc6da4c793247d48db06b45a78903c97Eric Laurent return DEVICE_IN_USB_HEADSET_NAME; 66107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_DEFAULT: 66207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood default: 66307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return Integer.toString(device); 66407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood } 66507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood } 666948d32748caaac5be06c991ebf00f74265a7849fEric Laurent 667ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // phone state, match audio_mode??? 668a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_OFFCALL = 0; 669a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_RINGING = 1; 670a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_INCALL = 2; 671a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 672ac0f704b1a77cb27dc0975206825098df6b211bbPhil Burk // device categories config for setForceUse, must match audio_policy_forced_cfg_t 673a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_NONE = 0; 674a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_SPEAKER = 1; 675a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_HEADPHONES = 2; 676a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_BT_SCO = 3; 677a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_BT_A2DP = 4; 678a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_WIRED_ACCESSORY = 5; 679eb14a783be073b5fd6e8c8c9bc87d2d1919f2c9eEric Laurent public static final int FORCE_BT_CAR_DOCK = 6; 680eb14a783be073b5fd6e8c8c9bc87d2d1919f2c9eEric Laurent public static final int FORCE_BT_DESK_DOCK = 7; 68121e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int FORCE_ANALOG_DOCK = 8; 68221e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int FORCE_DIGITAL_DOCK = 9; 6837847211fb4699bf6018e29d214a918ed6657319bEric Laurent public static final int FORCE_NO_BT_A2DP = 10; 684c203ecfd9f6c356542fcb10bc85b27b98b170ddfJean-Michel Trivi public static final int FORCE_SYSTEM_ENFORCED = 11; 68512307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int FORCE_HDMI_SYSTEM_AUDIO_ENFORCED = 12; 686ac0f704b1a77cb27dc0975206825098df6b211bbPhil Burk public static final int FORCE_ENCODED_SURROUND_NEVER = 13; 687ac0f704b1a77cb27dc0975206825098df6b211bbPhil Burk public static final int FORCE_ENCODED_SURROUND_ALWAYS = 14; 688ac0f704b1a77cb27dc0975206825098df6b211bbPhil Burk public static final int NUM_FORCE_CONFIG = 15; 689a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_DEFAULT = FORCE_NONE; 690a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 691ac0f704b1a77cb27dc0975206825098df6b211bbPhil Burk // usage for setForceUse, must match audio_policy_force_use_t 692a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_COMMUNICATION = 0; 693a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_MEDIA = 1; 694a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_RECORD = 2; 6956154412ee8e07e9cde129cccb944dd7ed9dcef53Jean-Michel Trivi public static final int FOR_DOCK = 3; 696dd45d01128423a82652a3c9d77fa393631d95229Eric Laurent public static final int FOR_SYSTEM = 4; 69712307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int FOR_HDMI_SYSTEM_AUDIO = 5; 698ac0f704b1a77cb27dc0975206825098df6b211bbPhil Burk public static final int FOR_ENCODED_SURROUND = 6; 699ac0f704b1a77cb27dc0975206825098df6b211bbPhil Burk private static final int NUM_FORCE_USE = 7; 700a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 701505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent // usage for AudioRecord.startRecordingSync(), must match AudioSystem::sync_event_t 702505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent public static final int SYNC_EVENT_NONE = 0; 703505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1; 704505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent 7056d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi /** 7066d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi * @return command completion status, one of {@link #AUDIO_STATUS_OK}, 7076d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi * {@link #AUDIO_STATUS_ERROR} or {@link #AUDIO_STATUS_SERVER_DIED} 7086d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi */ 70910804eb2818ab59b763a37b4f6151693c2ebba7bPaul McLean public static native int setDeviceConnectionState(int device, int state, 71010804eb2818ab59b763a37b4f6151693c2ebba7bPaul McLean String device_address, String device_name); 711a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int getDeviceConnectionState(int device, String device_address); 71244a4ef0aa93ebb2912f36d65af42ffbb1bcdbc0fPavlin Radoslavov public static native int handleDeviceConfigChange(int device, 71344a4ef0aa93ebb2912f36d65af42ffbb1bcdbc0fPavlin Radoslavov String device_address, 71444a4ef0aa93ebb2912f36d65af42ffbb1bcdbc0fPavlin Radoslavov String device_name); 715a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setPhoneState(int state); 716a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setForceUse(int usage, int config); 717a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int getForceUse(int usage); 718a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int initStreamVolume(int stream, int indexMin, int indexMax); 7199bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static native int setStreamVolumeIndex(int stream, int index, int device); 7209bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static native int getStreamVolumeIndex(int stream, int device); 721cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native int setMasterVolume(float value); 722cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native float getMasterVolume(); 723cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native int setMasterMute(boolean mute); 724cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native boolean getMasterMute(); 7258b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten public static native int getDevicesForStream(int stream); 726c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten 727f04b84d4c66ea377ec6fe2b36f3a0994f3e94ebaAndy Hung /** @hide returns true if master mono is enabled. */ 728f04b84d4c66ea377ec6fe2b36f3a0994f3e94ebaAndy Hung public static native boolean getMasterMono(); 729f04b84d4c66ea377ec6fe2b36f3a0994f3e94ebaAndy Hung /** @hide enables or disables the master mono mode. */ 730f04b84d4c66ea377ec6fe2b36f3a0994f3e94ebaAndy Hung public static native int setMasterMono(boolean mono); 731f04b84d4c66ea377ec6fe2b36f3a0994f3e94ebaAndy Hung 732c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten // helpers for android.media.AudioManager.getProperty(), see description there for meaning 733c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten public static native int getPrimaryOutputSamplingRate(); 734c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten public static native int getPrimaryOutputFrameCount(); 73561dcdf3764b614c6f01e77cb4342d192e3101f8aOliver Woodman public static native int getOutputLatency(int stream); 736c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten 737fd116ad1ab02f6060a0b2201f018317fa32e28b4Glenn Kasten public static native int setLowRamDevice(boolean isLowRamDevice); 738dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent public static native int checkAudioFlinger(); 739b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 740b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation); 741b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int createAudioPatch(AudioPatch[] patch, 742b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent AudioPortConfig[] sources, AudioPortConfig[] sinks); 743b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int releaseAudioPatch(AudioPatch patch); 744b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int listAudioPatches(ArrayList<AudioPatch> patches, int[] generation); 7453a24199a0fe9479802ff6096d82cb3745efa1f1fEric Laurent public static native int setAudioPortConfig(AudioPortConfig config); 746b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent 7475a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi // declare this instance as having a dynamic policy callback handler 7485a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static native final void native_register_dynamic_policy_callback(); 749d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi // declare this instance as having a recording configuration update callback handler 750d3c71f075b139024e2bea39bbd75e3b976bfb7cbJean-Michel Trivi private static native final void native_register_recording_callback(); 7515a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 752b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent // must be kept in sync with value in include/system/audio.h 753b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public static final int AUDIO_HW_SYNC_INVALID = 0; 754b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent 755b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public static native int getAudioHwSyncForSession(int sessionId); 7567f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurent 7577f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurent public static native int registerPolicyMixes(ArrayList<AudioMix> mixes, boolean register); 7586156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7590867bed9ddb3bea3d7c252791f8b62ae21ad3de5Eric Laurent public static native int systemReady(); 7606156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7616156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // Items shared with audio service 7626156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7636156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 7646156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * The delay before playing a sound. This small period exists so the user 7656156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * can press another key (non-volume keys, too) to have it NOT be audible. 7666156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <p> 7676156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * PhoneWindow will implement this part. 7686156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 7696156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLAY_SOUND_DELAY = 300; 7706156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7716156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 7726156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * Constant to identify a focus stack entry that is used to hold the focus while the phone 7736156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * is ringing or during a call. Used by com.android.internal.telephony.CallManager when 7746156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * entering and exiting calls. 7756156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 7766156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public final static String IN_VOICE_COMM_FOCUS_ID = "AudioFocus_For_Phone_Ring_And_Calls"; 7776156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7786156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 7796156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * @see AudioManager#setVibrateSetting(int, int) 7806156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 7816156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getValueForVibrateSetting(int existingValue, int vibrateType, 7826156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock int vibrateSetting) { 7836156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7846156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // First clear the existing setting. Each vibrate type has two bits in 7856156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // the value. Note '3' is '11' in binary. 7866156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock existingValue &= ~(3 << (vibrateType * 2)); 7876156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7886156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // Set into the old value 7896156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock existingValue |= (vibrateSetting & 3) << (vibrateType * 2); 7906156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7916156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return existingValue; 7926156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 7936156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7946156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getDefaultStreamVolume(int streamType) { 7956156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return DEFAULT_STREAM_VOLUME[streamType]; 7966156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 7976156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7986156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int[] DEFAULT_STREAM_VOLUME = new int[] { 7996156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 4, // STREAM_VOICE_CALL 8006156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_SYSTEM 8016156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 5, // STREAM_RING 8026156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11, // STREAM_MUSIC 8036156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6, // STREAM_ALARM 8046156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 5, // STREAM_NOTIFICATION 8056156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_BLUETOOTH_SCO 8066156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_SYSTEM_ENFORCED 8076156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11, // STREAM_DTMF 8083f0945a608197fa8919ebe909f6388d9d59e8c29Jean-Michel Trivi 11, // STREAM_TTS 8093f0945a608197fa8919ebe909f6388d9d59e8c29Jean-Michel Trivi 11, // STREAM_ACCESSIBILITY 8106156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock }; 8116156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 8126156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static String streamToString(int stream) { 8136156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (stream >= 0 && stream < STREAM_NAMES.length) return STREAM_NAMES[stream]; 8146156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (stream == AudioManager.USE_DEFAULT_STREAM_TYPE) return "USE_DEFAULT_STREAM_TYPE"; 8156156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return "UNKNOWN_STREAM_" + stream; 8166156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 8176156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 8186156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform has no specific capabilities */ 8196156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_DEFAULT = 0; 8206156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform is voice call capable (a phone) */ 8216156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_VOICE = 1; 8226156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform is a television or a set-top box */ 8236156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_TELEVISION = 2; 8246156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 8256156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 8266156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * Return the platform type that this is running on. One of: 8276156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <ul> 8286156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_VOICE}</li> 8296156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_TELEVISION}</li> 8306156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_DEFAULT}</li> 8316156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * </ul> 8326156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 8336156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getPlatformType(Context context) { 8346156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (context.getResources().getBoolean(com.android.internal.R.bool.config_voice_capable)) { 8356156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_VOICE; 8366156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } else if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)) { 8376156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_TELEVISION; 8386156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } else { 8396156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_DEFAULT; 8406156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 8416156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 8426156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 8431ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li /** 8441ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li * @hide 8451ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li * @return whether the system uses a single volume stream. 8461ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li */ 8471ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li public static boolean isSingleVolume(Context context) { 8481ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li boolean forceSingleVolume = context.getResources().getBoolean( 8491ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li com.android.internal.R.bool.config_single_volume); 8501ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li return getPlatformType(context) == PLATFORM_TELEVISION || forceSingleVolume; 8511ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li } 8521ed6df6bcf8f21a78a42bc9dc293812585eff121Muyuan Li 8536156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int DEFAULT_MUTE_STREAMS_AFFECTED = 8546156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_MUSIC) | 8556156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_RING) | 8566156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_NOTIFICATION) | 8576156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_SYSTEM); 8584bcdba848449b33d7022de527c526943aff1f5fdEric Laurent 8594bcdba848449b33d7022de527c526943aff1f5fdEric Laurent /** 8604bcdba848449b33d7022de527c526943aff1f5fdEric Laurent * Event posted by AudioTrack and AudioRecord JNI (JNIDeviceCallback) when routing changes. 8614bcdba848449b33d7022de527c526943aff1f5fdEric Laurent * Keep in sync with core/jni/android_media_DeviceCallback.h. 8624bcdba848449b33d7022de527c526943aff1f5fdEric Laurent */ 8634bcdba848449b33d7022de527c526943aff1f5fdEric Laurent final static int NATIVE_EVENT_ROUTING_CHANGE = 1000; 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 865b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 866