Merge "Introduce MODIFY_AUDIO_SYSTEM_SETTINGS permission"
This commit is contained in:
@@ -209,6 +209,7 @@ package android {
|
||||
field public static final String MIGRATE_HEALTH_CONNECT_DATA = "android.permission.MIGRATE_HEALTH_CONNECT_DATA";
|
||||
field public static final String MODIFY_APPWIDGET_BIND_PERMISSIONS = "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS";
|
||||
field public static final String MODIFY_AUDIO_ROUTING = "android.permission.MODIFY_AUDIO_ROUTING";
|
||||
field public static final String MODIFY_AUDIO_SYSTEM_SETTINGS = "android.permission.MODIFY_AUDIO_SYSTEM_SETTINGS";
|
||||
field public static final String MODIFY_CELL_BROADCASTS = "android.permission.MODIFY_CELL_BROADCASTS";
|
||||
field public static final String MODIFY_DAY_NIGHT_MODE = "android.permission.MODIFY_DAY_NIGHT_MODE";
|
||||
field @Deprecated public static final String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING";
|
||||
@@ -6609,8 +6610,8 @@ package android.media {
|
||||
}
|
||||
|
||||
public class AudioDeviceVolumeManager {
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.VolumeInfo getDeviceVolume(@NonNull android.media.VolumeInfo, @NonNull android.media.AudioDeviceAttributes);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setDeviceVolume(@NonNull android.media.VolumeInfo, @NonNull android.media.AudioDeviceAttributes);
|
||||
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS}) public android.media.VolumeInfo getDeviceVolume(@NonNull android.media.VolumeInfo, @NonNull android.media.AudioDeviceAttributes);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS}) public void setDeviceVolume(@NonNull android.media.VolumeInfo, @NonNull android.media.AudioDeviceAttributes);
|
||||
}
|
||||
|
||||
public final class AudioFocusInfo implements android.os.Parcelable {
|
||||
|
||||
@@ -5335,6 +5335,14 @@
|
||||
<permission android:name="android.permission.MODIFY_AUDIO_ROUTING"
|
||||
android:protectionLevel="signature|privileged|role" />
|
||||
|
||||
<!--@SystemApi Allows an application to modify system audio settings that shouldn't be
|
||||
controllable by external apps, such as volume settings or volume behaviors for audio
|
||||
devices, regardless of their connection status.
|
||||
<p>Not for use by third-party applications.
|
||||
@hide -->
|
||||
<permission android:name="android.permission.MODIFY_AUDIO_SYSTEM_SETTINGS"
|
||||
android:protectionLevel="signature|privileged" />
|
||||
|
||||
<!-- @SystemApi Allows an application to access the uplink and downlink audio of an ongoing
|
||||
call.
|
||||
<p>Not for use by third-party applications.</p>
|
||||
|
||||
@@ -465,6 +465,7 @@ applications that come with the platform
|
||||
<!-- Permission required for CTS test - SystemMediaRouter2Test -->
|
||||
<permission name="android.permission.MEDIA_CONTENT_CONTROL"/>
|
||||
<permission name="android.permission.MODIFY_AUDIO_ROUTING"/>
|
||||
<permission name="android.permission.MODIFY_AUDIO_SYSTEM_SETTINGS"/>
|
||||
<!-- Permission required for CTS test - CallAudioInterceptionTest -->
|
||||
<permission name="android.permission.CALL_AUDIO_INTERCEPTION"/>
|
||||
<!-- Permission required for CTS test - CtsPermission5TestCases -->
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.media;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.CallbackExecutor;
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
@@ -318,8 +319,10 @@ public class AudioDeviceVolumeManager {
|
||||
* @param ada the device for which volume is to be modified
|
||||
*/
|
||||
@SystemApi
|
||||
// TODO alternatively require MODIFY_AUDIO_SYSTEM_SETTINGS when defined
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
@RequiresPermission(anyOf = {
|
||||
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
||||
Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS
|
||||
})
|
||||
public void setDeviceVolume(@NonNull VolumeInfo vi, @NonNull AudioDeviceAttributes ada) {
|
||||
try {
|
||||
getService().setDeviceVolume(vi, ada, mPackageName);
|
||||
@@ -340,8 +343,10 @@ public class AudioDeviceVolumeManager {
|
||||
* @param ada the device for which volume is to be retrieved
|
||||
*/
|
||||
@SystemApi
|
||||
// TODO alternatively require MODIFY_AUDIO_SYSTEM_SETTINGS when defined
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
@RequiresPermission(anyOf = {
|
||||
Manifest.permission.MODIFY_AUDIO_ROUTING,
|
||||
Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS
|
||||
})
|
||||
public @NonNull VolumeInfo getDeviceVolume(@NonNull VolumeInfo vi,
|
||||
@NonNull AudioDeviceAttributes ada) {
|
||||
try {
|
||||
|
||||
@@ -106,9 +106,11 @@ interface IAudioService {
|
||||
void setStreamVolumeWithAttribution(int streamType, int index, int flags,
|
||||
in String callingPackage, in String attributionTag);
|
||||
|
||||
@EnforcePermission(anyOf = {"MODIFY_AUDIO_ROUTING", "MODIFY_AUDIO_SYSTEM_SETTINGS"})
|
||||
void setDeviceVolume(in VolumeInfo vi, in AudioDeviceAttributes ada,
|
||||
in String callingPackage);
|
||||
|
||||
@EnforcePermission(anyOf = {"MODIFY_AUDIO_ROUTING", "MODIFY_AUDIO_SYSTEM_SETTINGS"})
|
||||
VolumeInfo getDeviceVolume(in VolumeInfo vi, in AudioDeviceAttributes ada,
|
||||
in String callingPackage);
|
||||
|
||||
|
||||
@@ -3733,18 +3733,6 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
}
|
||||
|
||||
// TODO enforce MODIFY_AUDIO_SYSTEM_SETTINGS when defined
|
||||
private void enforceModifyAudioRoutingOrSystemSettingsPermission() {
|
||||
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
!= PackageManager.PERMISSION_GRANTED
|
||||
/*&& mContext.checkCallingOrSelfPermission(
|
||||
android.Manifest.permission.MODIFY_AUDIO_SYSTEM_SETTINGS)
|
||||
!= PackageManager.PERMISSION_DENIED*/) {
|
||||
throw new SecurityException(
|
||||
"Missing MODIFY_AUDIO_ROUTING or MODIFY_AUDIO_SYSTEM_SETTINGS permission");
|
||||
}
|
||||
}
|
||||
|
||||
private void enforceAccessUltrasoundPermission() {
|
||||
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.ACCESS_ULTRASOUND)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
@@ -3859,13 +3847,16 @@ public class AudioService extends IAudioService.Stub
|
||||
return AudioSystem.getMinVolumeIndexForAttributes(attr);
|
||||
}
|
||||
|
||||
@Override
|
||||
@android.annotation.EnforcePermission(anyOf =
|
||||
{"MODIFY_AUDIO_ROUTING", "MODIFY_AUDIO_SYSTEM_SETTINGS"})
|
||||
/** @see AudioDeviceVolumeManager#setDeviceVolume(VolumeInfo, AudioDeviceAttributes)
|
||||
* Part of service interface, check permissions and parameters here
|
||||
* Note calling package is for logging purposes only, not to be trusted
|
||||
*/
|
||||
public void setDeviceVolume(@NonNull VolumeInfo vi, @NonNull AudioDeviceAttributes ada,
|
||||
@NonNull String callingPackage) {
|
||||
enforceModifyAudioRoutingOrSystemSettingsPermission();
|
||||
super.setDeviceVolume_enforcePermission();
|
||||
Objects.requireNonNull(vi);
|
||||
Objects.requireNonNull(ada);
|
||||
Objects.requireNonNull(callingPackage);
|
||||
@@ -4805,12 +4796,15 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@android.annotation.EnforcePermission(anyOf =
|
||||
{"MODIFY_AUDIO_ROUTING", "MODIFY_AUDIO_SYSTEM_SETTINGS"})
|
||||
/**
|
||||
* @see AudioDeviceVolumeManager#getDeviceVolume(VolumeInfo, AudioDeviceAttributes)
|
||||
*/
|
||||
public @NonNull VolumeInfo getDeviceVolume(@NonNull VolumeInfo vi,
|
||||
@NonNull AudioDeviceAttributes ada, @NonNull String callingPackage) {
|
||||
enforceModifyAudioRoutingOrSystemSettingsPermission();
|
||||
super.getDeviceVolume_enforcePermission();
|
||||
Objects.requireNonNull(vi);
|
||||
Objects.requireNonNull(ada);
|
||||
Objects.requireNonNull(callingPackage);
|
||||
|
||||
Reference in New Issue
Block a user