From d51d398383c99aa0e1c84e46aafa593006d5120d Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Tue, 10 Oct 2017 16:32:38 -0700 Subject: [PATCH] Fix alarm preview volume SeekBarVolumizer: do not use FLAG_BYPASS_INTERRUPTION_POLICY as there is no need to bypass DnD modes in seek bar for volume since they are disabled according to the DnD mode. AudioService (PlaybackActivityMonitor): check both AudioAttributes flags BYPASS_INTERRUPTION_POLICY and BYPASS_MUTE for forced alarm playback (see b/63617557). Test: see bug Bug: 67578783 Change-Id: Iaf43f16d96d1ad8a1eacc73a050db767004ba96b --- core/java/android/preference/SeekBarVolumizer.java | 3 +-- .../com/android/server/audio/PlaybackActivityMonitor.java | 8 ++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/java/android/preference/SeekBarVolumizer.java b/core/java/android/preference/SeekBarVolumizer.java index ee8eed1906f4c..3d2e1d1f1d24a 100644 --- a/core/java/android/preference/SeekBarVolumizer.java +++ b/core/java/android/preference/SeekBarVolumizer.java @@ -206,8 +206,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba try { mRingtone.setAudioAttributes(new AudioAttributes.Builder(mRingtone .getAudioAttributes()) - .setFlags(AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY | - AudioAttributes.FLAG_BYPASS_MUTE) + .setFlags(AudioAttributes.FLAG_BYPASS_MUTE) .build()); mRingtone.play(); } catch (Throwable e) { diff --git a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java index 6506cf7fa1897..494317334f439 100644 --- a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java +++ b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java @@ -184,11 +184,15 @@ public final class PlaybackActivityMonitor } } + private static final int FLAGS_FOR_SILENCE_OVERRIDE = + AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY | + AudioAttributes.FLAG_BYPASS_MUTE; + private void checkVolumeForPrivilegedAlarm(AudioPlaybackConfiguration apc, int event) { if (event == AudioPlaybackConfiguration.PLAYER_STATE_STARTED || apc.getPlayerState() == AudioPlaybackConfiguration.PLAYER_STATE_STARTED) { - if ((apc.getAudioAttributes().getAllFlags() & - AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY) != 0 && + if ((apc.getAudioAttributes().getAllFlags() & FLAGS_FOR_SILENCE_OVERRIDE) + == FLAGS_FOR_SILENCE_OVERRIDE && apc.getAudioAttributes().getUsage() == AudioAttributes.USAGE_ALARM && mContext.checkPermission(android.Manifest.permission.MODIFY_PHONE_STATE, apc.getClientPid(), apc.getClientUid()) ==