summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt2
-rw-r--r--media/java/android/media/AudioManager.java9
-rwxr-xr-xmedia/java/android/media/IAudioService.aidl2
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java13
4 files changed, 23 insertions, 3 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index c3c53673aa15..5ca3ea2af02e 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -6013,7 +6013,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.ACCESS_ULTRASOUND) public 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/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index cdc31631637e..0a3b2c38ad70 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -7293,8 +7293,13 @@ public class AudioManager {
* Ultrasound playback and capture, false otherwise.
*/
@SystemApi
- public static boolean isUltrasoundSupported() {
- return AudioSystem.isUltrasoundSupported();
+ @RequiresPermission(android.Manifest.permission.ACCESS_ULTRASOUND)
+ public boolean isUltrasoundSupported() {
+ try {
+ return getService().isUltrasoundSupported();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
/**
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index fec14def618c..7b48fa029d98 100755
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -136,6 +136,8 @@ interface IAudioService {
boolean isMicrophoneMuted();
+ boolean isUltrasoundSupported();
+
void setMicrophoneMute(boolean on, String callingPackage, int userId, in String attributionTag);
oneway void setMicrophoneMuteFromSwitch(boolean on);
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 05955c3cab44..deef8677e862 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -3249,6 +3249,13 @@ public class AudioService extends IAudioService.Stub
}
}
+ private void enforceAccessUltrasoundPermission() {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.ACCESS_ULTRASOUND)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Missing ACCESS_ULTRASOUND permission");
+ }
+ }
+
private void enforceQueryStatePermission() {
if (mContext.checkCallingOrSelfPermission(Manifest.permission.QUERY_AUDIO_STATE)
!= PackageManager.PERMISSION_GRANTED) {
@@ -3381,6 +3388,12 @@ public class AudioService extends IAudioService.Stub
attributionTag, Binder.getCallingUid(), callingOrSelfHasAudioSettingsPermission());
}
+ /** @see AudioManager#isUltrasoundSupported() */
+ public boolean isUltrasoundSupported() {
+ enforceAccessUltrasoundPermission();
+ return AudioSystem.isUltrasoundSupported();
+ }
+
private boolean canChangeAccessibilityVolume() {
synchronized (mAccessibilityServiceUidsLock) {
if (PackageManager.PERMISSION_GRANTED == mContext.checkCallingOrSelfPermission(