From b27a3676eb36e961c0464a9fd074ff843da5c80e Mon Sep 17 00:00:00 2001
From: Sylvain Berfini <sylvain.berfini@belledonne-communications.com>
Date: Tue, 9 Feb 2021 13:15:37 +0100
Subject: [PATCH] Added a setting to disable automatic call pause when audio
 focus is lost

---
 .../core/tools/service/CoreManager.java       | 20 ++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/wrappers/java/classes/org/linphone/core/tools/service/CoreManager.java b/wrappers/java/classes/org/linphone/core/tools/service/CoreManager.java
index de276f47fc..aa81c15c55 100644
--- a/wrappers/java/classes/org/linphone/core/tools/service/CoreManager.java
+++ b/wrappers/java/classes/org/linphone/core/tools/service/CoreManager.java
@@ -32,6 +32,7 @@ import android.os.Build;
 
 import org.linphone.core.AudioDevice;
 import org.linphone.core.Call;
+import org.linphone.core.Config;
 import org.linphone.core.Core;
 import org.linphone.core.CoreListenerStub;
 import org.linphone.core.tools.Log;
@@ -255,12 +256,17 @@ public class CoreManager {
 
     public void onAudioFocusLost() {
         if (mCore != null) {
-            if (mCore.isInConference()) {
-              Log.i("[Core Manager] App has lost audio focus, leaving conference");
-              mCore.leaveConference();
+            boolean pauseCallsWhenAudioFocusIsLost = mCore.getConfig().getBool("audio", "android_pause_calls_when_audio_focus_lost", true);
+            if (pauseCallsWhenAudioFocusIsLost) {
+                if (mCore.isInConference()) {
+                    Log.i("[Core Manager] App has lost audio focus, leaving conference");
+                    mCore.leaveConference();
+                } else {
+                    Log.i("[Core Manager] App has lost audio focus, pausing all calls");
+                    mCore.pauseAllCalls();
+                }
             } else {
-              Log.i("[Core Manager] App has lost audio focus, pausing all calls");
-              mCore.pauseAllCalls();
+                Log.w("[Core Manager] Audio focus lost but keeping calls running");
             }
         }
     }
@@ -352,7 +358,7 @@ public class CoreManager {
             sb.append(abi).append(", ");
         }
         Log.i(sb.substring(0, sb.length() - 2));
-		Log.i("=========================================");
+        Log.i("=========================================");
     }
 
     private void dumpLinphoneInformation() {
@@ -367,6 +373,6 @@ public class CoreManager {
         Log.i(sb.substring(0, sb.length() - 2));
         Log.i("PACKAGE=", org.linphone.core.BuildConfig.LIBRARY_PACKAGE_NAME);
         Log.i("BUILD TYPE=", org.linphone.core.BuildConfig.BUILD_TYPE);
-		Log.i("=========================================");
+        Log.i("=========================================");
     }
 }
-- 
GitLab