Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e38c2cf5 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Vlad Popa
Browse files

Introduce MODIFY_AUDIO_SYSTEM_SETTINGS permission

Add MODIFY_AUDIO_SYSTEM_SETTINGS permission as system/signature.

Add it as a supported signature for set/getDeviceVolume methods.

Bug: 263417391
Test: atest android.media.audio.cts.AudioDeviceVolumeManagerTest
Change-Id: I604348e026cf5d947a2d3a9b2f0475842d28233f
parent 6f651d87
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -208,6 +208,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";
@@ -6608,8 +6609,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 {
+8 −0
Original line number Diff line number Diff line
@@ -5326,6 +5326,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>
+1 −0
Original line number Diff line number Diff line
@@ -464,6 +464,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 -->
+9 −4
Original line number Diff line number Diff line
@@ -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 {
+2 −0
Original line number Diff line number Diff line
@@ -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);

Loading