From e178f8f635815f8d0ee68fe07289e4f9f02f7f82 Mon Sep 17 00:00:00 2001 From: wescande Date: Tue, 19 Oct 2021 20:15:09 +0200 Subject: [PATCH] Add `SystemApi` tag on getLastAudibleStreamVolume Bug: 190422401 Tag: #refactor Test: Build Change-Id: I2cbb69292465b4271caeb0c563fa1db62d025dce --- core/api/system-current.txt | 1 + media/java/android/media/AudioManager.java | 3 ++- .../core/java/com/android/server/audio/AudioService.java | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index bb454a642ff18..66f5acef12186 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5252,6 +5252,7 @@ package android.media { method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List getAudioVolumeGroups(); method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public int getDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public java.util.List getDevicesForAttributes(@NonNull android.media.AudioAttributes); + method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int getLastAudibleStreamVolume(int); method @IntRange(from=0) public long getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo); method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes); diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 60f4a5a226db0..2d93d0b21413c 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -1172,7 +1172,8 @@ public class AudioManager { * * @hide */ - @UnsupportedAppUsage + @SystemApi + @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int getLastAudibleStreamVolume(int streamType) { final IAudioService service = getService(); try { diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index df5d60c3a74d5..e00c8a39074a5 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -3193,6 +3193,13 @@ public class AudioService extends IAudioService.Stub } } + private void enforceQueryStatePermission() { + if (mContext.checkCallingOrSelfPermission(Manifest.permission.QUERY_AUDIO_STATE) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Missing QUERY_AUDIO_STATE permissions"); + } + } + private void enforceQueryStateOrModifyRoutingPermission() { if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) != PackageManager.PERMISSION_GRANTED @@ -4094,6 +4101,7 @@ public class AudioService extends IAudioService.Stub /** Get last audible volume before stream was muted. */ public int getLastAudibleStreamVolume(int streamType) { + enforceQueryStatePermission(); ensureValidStreamType(streamType); int device = getDeviceForStream(streamType); return (mStreamStates[streamType].getIndex(device) + 5) / 10;