From 3ea30de47bb4b6e8ec83217168b56a1ca582a2b5 Mon Sep 17 00:00:00 2001 From: Carter Hsu Date: Tue, 15 Feb 2022 15:59:00 +0800 Subject: [PATCH] add permission check for isUltrasoundSupported Bug: 217366076 Test: build pass Signed-off-by: Carter Hsu Change-Id: I7f68e5f6244637973b7ca468c4eef1dc5b05aaad --- core/api/system-current.txt | 2 +- media/java/android/media/AudioManager.java | 9 +++++++-- media/java/android/media/IAudioService.aidl | 2 ++ .../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 c3c53673aa159..5ca3ea2af02ed 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 cdc31631637ee..0a3b2c38ad709 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 fec14def618c8..7b48fa029d989 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 05955c3cab449..deef8677e862c 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(