From 2065d1ed12f54b45350d2d59cf243d8632c8dece Mon Sep 17 00:00:00 2001 From: Carter Hsu Date: Wed, 19 Jan 2022 19:54:50 +0800 Subject: [PATCH] audio: add API for querying the Ultrasound support Bug: 200256985 Test: atest AudioManagerTest Signed-off-by: Carter Hsu Change-Id: I0925471021513424cd23c13c0334e2f480de88fe --- core/api/system-current.txt | 1 + core/jni/android_media_AudioSystem.cpp | 5 +++++ media/java/android/media/AudioManager.java | 20 +++++++++++++++++++- media/java/android/media/AudioSystem.java | 6 ++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 88b0086b9fdaf..13ff54c83840f 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5758,6 +5758,7 @@ package android.media { method public boolean isAudioServerRunning(); method public boolean isHdmiSystemAudioSupported(); method @RequiresPermission(android.Manifest.permission.CALL_AUDIO_INTERCEPTION) public boolean isPstnCallAudioInterceptable(); + method public static boolean isUltrasoundSupported(); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void muteAwaitConnection(@NonNull int[], @NonNull android.media.AudioDeviceAttributes, long, @NonNull java.util.concurrent.TimeUnit) throws java.lang.IllegalStateException; method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy); method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void registerMuteAwaitConnectionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.MuteAwaitConnectionCallback); diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index 3e2b25853a6a2..6b54d465389d6 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -2479,6 +2479,10 @@ android_media_AudioSystem_isHapticPlaybackSupported(JNIEnv *env, jobject thiz) return AudioSystem::isHapticPlaybackSupported(); } +static jboolean android_media_AudioSystem_isUltrasoundSupported(JNIEnv *env, jobject thiz) { + return AudioSystem::isUltrasoundSupported(); +} + static jint android_media_AudioSystem_setSupportedSystemUsages(JNIEnv *env, jobject thiz, jintArray systemUsages) { std::vector nativeSystemUsagesVector; @@ -2915,6 +2919,7 @@ static const JNINativeMethod gMethods[] = {"setA11yServicesUids", "([I)I", (void *)android_media_AudioSystem_setA11yServicesUids}, {"isHapticPlaybackSupported", "()Z", (void *)android_media_AudioSystem_isHapticPlaybackSupported}, + {"isUltrasoundSupported", "()Z", (void *)android_media_AudioSystem_isUltrasoundSupported}, {"getHwOffloadFormatsSupportedForBluetoothMedia", "(ILjava/util/ArrayList;)I", (void *)android_media_AudioSystem_getHwOffloadFormatsSupportedForBluetoothMedia}, {"setSupportedSystemUsages", "([I)I", diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 68e5d94f75595..26f56dbb774de 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -7236,6 +7236,24 @@ public class AudioManager { return AudioSystem.isHapticPlaybackSupported(); } + /** + * @hide + * Indicates whether a platform supports the Ultrasound feature which covers the playback + * and recording of 20kHz~ sounds. If platform supports Ultrasound, then the + * usage will be + * To start the Ultrasound playback: + * - Create an AudioTrack with {@link AudioAttributes.CONTENT_TYPE_ULTRASOUND}. + * To start the Ultrasound capture: + * - Create an AudioRecord with {@link MediaRecorder.AudioSource.ULTRASOUND}. + * + * @return whether the ultrasound feature is supported, true when platform supports both + * Ultrasound playback and capture, false otherwise. + */ + @SystemApi + public static boolean isUltrasoundSupported() { + return AudioSystem.isUltrasoundSupported(); + } + /** * @hide * Introspection API to retrieve audio product strategies. @@ -8348,4 +8366,4 @@ public class AudioManager { return mHandler; } } -} \ No newline at end of file +} diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 50bf1e5e0a262..d53d3e3505318 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -1862,6 +1862,12 @@ public class AudioSystem */ public static native boolean isHapticPlaybackSupported(); + /** + * @hide + * @see AudioManager#isUltrasoundSupported() + */ + public static native boolean isUltrasoundSupported(); + /** * @hide * Send audio HAL server process pids to native audioserver process for use