diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 6db4fe6da8..daa35e08bf 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -906,7 +906,7 @@ public class EntityRule { @Override public void run() { try { - if (MediaPlayerHelper.isInCall(context)) + if (MediaPlayerHelper.isInCall(context) || MediaPlayerHelper.isDnd(context)) return; speak(context, EntityRule.this, message); } catch (Throwable ex) { diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index 8f592e92a5..cafd67a3c4 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -2688,6 +2688,10 @@ public class Log { Helper.getInterruptionFilter(filter), (filter == NotificationManager.INTERRUPTION_FILTER_ALL ? "" : "!!!"))); + size += write(os, String.format("InCall=%b DND=%b\r\n\r\n", + MediaPlayerHelper.isInCall(context), + MediaPlayerHelper.isDnd(context))); + for (NotificationChannel channel : nm.getNotificationChannels()) try { JSONObject jchannel = NotificationHelper.channelToJSON(channel); diff --git a/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java b/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java index fe5711025c..5bd0dd0620 100644 --- a/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java +++ b/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java @@ -1,5 +1,6 @@ package eu.faircode.email; +import android.app.NotificationManager; import android.content.Context; import android.media.AudioAttributes; import android.media.AudioManager; @@ -38,8 +39,9 @@ public class MediaPlayerHelper { @Override public void run() { try { - if (!isInCall(context)) - play(context, uri, alarm, duration); + if (isInCall(context) || isDnd(context)) + return; + play(context, uri, alarm, duration); } catch (Throwable ex) { Log.e(ex); } @@ -146,6 +148,15 @@ public class MediaPlayerHelper { } } + static boolean isDnd(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) + return false; + NotificationManager nm = Helper.getSystemService(context, NotificationManager.class); + int filter = nm.getCurrentInterruptionFilter(); + // All: no notifications are suppressed + return (filter != NotificationManager.INTERRUPTION_FILTER_ALL); + } + static boolean isInCall(int mode) { return (mode == AudioManager.MODE_RINGTONE || mode == AudioManager.MODE_IN_CALL ||