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

Commit 00d10d24 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[audio] Add playback hardening override shell cmd" into main

parents 081f7f15 d4aa7681
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -10406,6 +10406,23 @@ public class AudioManager {
        }
    }

    /**
     * Enable strict audio hardening (background) enforcement, regardless of release or temporary
     * exemptions for debugging purposes.
     * Enforced hardening can be found in the audio dumpsys with the API being restricted and the
     * level of restriction which was encountered.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED)
    public void setEnableHardening(boolean shouldEnable) {
        final IAudioService service = getService();
        try {
            service.setEnableHardening(shouldEnable);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    //====================================================================
    // Mute await connection

+4 −0
Original line number Diff line number Diff line
@@ -819,4 +819,8 @@ interface IAudioService {
    @EnforcePermission("QUERY_AUDIO_STATE")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.QUERY_AUDIO_STATE)")
    boolean shouldNotificationSoundPlay(in AudioAttributes aa);

    @EnforcePermission("MODIFY_AUDIO_SETTINGS_PRIVILEGED")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED)")
    void setEnableHardening(in boolean shouldEnable);
}
+18 −0
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ class AudioManagerShellCommand extends ShellCommand {
                return setGroupVolume();
            case "adj-group-volume":
                return adjGroupVolume();
            case "set-hardening":
                return setEnableHardening();
        }
        return 0;
    }
@@ -130,6 +132,8 @@ class AudioManagerShellCommand extends ShellCommand {
        pw.println("    Sets the volume for GROUP_ID to VOLUME_INDEX");
        pw.println("  adj-group-volume GROUP_ID <RAISE|LOWER|MUTE|UNMUTE>");
        pw.println("    Adjusts the group volume for GROUP_ID given the specified direction");
        pw.println("  set-enable-hardening <1|0>");
        pw.println("    Enables full audio hardening enforcement, disabling any exemptions");
    }

    private int setSurroundFormatEnabled() {
@@ -405,6 +409,20 @@ class AudioManagerShellCommand extends ShellCommand {
        return 0;
    }

    private int setEnableHardening() {
        final Context context = mService.mContext;
        final AudioManager am = context.getSystemService(AudioManager.class);
        final boolean shouldEnable = !(readIntArg() == 0);
        getOutPrintWriter().println(
                "calling AudioManager.setEnableHardening(" + shouldEnable + ")");
        try {
            am.setEnableHardening(shouldEnable);
        } catch (Exception e) {
            getOutPrintWriter().println("Exception: " + e);
        }
        return 0;
    }

    private int readIntArg() throws IllegalArgumentException {
        final String argText = getNextArg();

+1 −0
Original line number Diff line number Diff line
@@ -26,4 +26,5 @@ public interface AudioPolicyFacade {
    public boolean isHotwordStreamSupported(boolean lookbackAudio);
    public INativePermissionController getPermissionController();
    public void registerOnStartTask(Runnable r);
    public void setEnableHardening(boolean shouldEnable);
}
+19 −0
Original line number Diff line number Diff line
@@ -1192,6 +1192,11 @@ public class AudioService extends IAudioService.Stub
    private @AttributeSystemUsage int[] mSupportedSystemUsages =
            new int[]{AudioAttributes.USAGE_CALL_ASSISTANT};
    // Tracks the API/shell override of hardening enforcement used for debugging
    // When this is set to true, enforcement is on regardless of flag state and any specific
    // exemptions in place for compat purposes.
    private final AtomicBoolean mShouldEnableAllHardening = new AtomicBoolean(false);
    // Defines the format for the connection "address" for ALSA devices
    public static String makeAlsaAddressString(int card, int device) {
        return "card=" + card + ";device=" + device;
@@ -1335,6 +1340,10 @@ public class AudioService extends IAudioService.Stub
        mAudioVolumeGroupHelper = audioVolumeGroupHelper;
        mSettings = settings;
        mAudioPolicy = audioPolicy;
        mAudioPolicy.registerOnStartTask(() -> {
            mAudioPolicy.setEnableHardening(mShouldEnableAllHardening.get());
        });
        mPlatformType = AudioSystem.getPlatformType(context);
        mBroadcastHandlerThread = new HandlerThread("AudioService Broadcast");
@@ -15020,6 +15029,16 @@ public class AudioService extends IAudioService.Stub
        return true;
    }
    /**
     * @see AudioManager#setEnableHardening(boolean)
     */
    @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED)
    public void setEnableHardening(boolean shouldEnable) {
        super.setEnableHardening_enforcePermission();
        mShouldEnableAllHardening.set(shouldEnable);
        mAudioPolicy.setEnableHardening(shouldEnable);
    }
    //======================
    // Audioserver state dispatch
    //======================
Loading