diff options
| -rw-r--r-- | core/api/system-current.txt | 2 | ||||
| -rw-r--r-- | media/java/android/media/AudioManager.java | 9 | ||||
| -rwxr-xr-x | media/java/android/media/IAudioService.aidl | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 13 |
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( |