Loading media/java/android/media/AudioManager.java +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading media/java/android/media/IAudioService.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -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); } services/core/java/com/android/server/audio/AudioManagerShellCommand.java +18 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ class AudioManagerShellCommand extends ShellCommand { return setGroupVolume(); case "adj-group-volume": return adjGroupVolume(); case "set-hardening": return setEnableHardening(); } return 0; } Loading Loading @@ -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() { Loading Loading @@ -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(); Loading services/core/java/com/android/server/audio/AudioPolicyFacade.java +1 −0 Original line number Diff line number Diff line Loading @@ -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); } services/core/java/com/android/server/audio/AudioService.java +19 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); Loading Loading @@ -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
media/java/android/media/AudioManager.java +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
media/java/android/media/IAudioService.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -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); }
services/core/java/com/android/server/audio/AudioManagerShellCommand.java +18 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ class AudioManagerShellCommand extends ShellCommand { return setGroupVolume(); case "adj-group-volume": return adjGroupVolume(); case "set-hardening": return setEnableHardening(); } return 0; } Loading Loading @@ -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() { Loading Loading @@ -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(); Loading
services/core/java/com/android/server/audio/AudioPolicyFacade.java +1 −0 Original line number Diff line number Diff line Loading @@ -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); }
services/core/java/com/android/server/audio/AudioService.java +19 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); Loading Loading @@ -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 //======================