From 4a5d6be29b37cc50904ebffdb28ae8a32595ccd7 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 10 Jan 2022 18:18:40 +0100 Subject: [PATCH] Check if in-call via audio manager --- .../main/java/eu/faircode/email/EntityRule.java | 7 +++++++ .../java/eu/faircode/email/MediaPlayerHelper.java | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index c823d9d544..4b07c3331c 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -822,6 +822,9 @@ public class EntityRule { private boolean onActionTts(Context context, EntityMessage message, JSONObject jargs) { DB db = DB.getInstance(context); + if (message.ui_seen) + return false; + if (!message.content) { EntityOperation.queue(context, message, EntityOperation.BODY); EntityOperation.queue(context, message, EntityOperation.RULE, this.id); @@ -832,6 +835,8 @@ public class EntityRule { @Override public void run() { try { + if (MediaPlayerHelper.isInCall(context)) + return; speak(context, EntityRule.this, message); } catch (Throwable ex) { db.message().setMessageError(message.id, Log.formatThrowable(ex)); @@ -974,6 +979,8 @@ public class EntityRule { @Override public void run() { try { + if (MediaPlayerHelper.isInCall(context)) + return; MediaPlayerHelper.play(context, uri, alarm, duration); } catch (Throwable ex) { Log.e(ex); diff --git a/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java b/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java index 629a4ac8fe..4b6014eddf 100644 --- a/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java +++ b/app/src/main/java/eu/faircode/email/MediaPlayerHelper.java @@ -2,6 +2,7 @@ package eu.faircode.email; import android.content.Context; import android.media.AudioAttributes; +import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; @@ -49,4 +50,18 @@ public class MediaPlayerHelper { Log.w(ex); } } + + static boolean isInCall(Context context) { + AudioManager am = + (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + if (am == null) + return false; + + // This doesn't require READ_PHONE_STATE permission + int mode = am.getMode(); + EntityLog.log(context, "Audio mode=" + mode); + return (mode == AudioManager.MODE_RINGTONE || + mode == AudioManager.MODE_IN_CALL || + mode == AudioManager.MODE_IN_COMMUNICATION); + } }