From d113797dfb50b0d79afbeeb15d3dcb5f285796d2 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 12 May 2025 09:56:38 +0200 Subject: [PATCH] Added auto answer with video in both directions advanced call setting --- .../java/org/linphone/core/CoreContext.kt | 12 ++++++-- .../java/org/linphone/core/CorePreferences.kt | 7 +++++ .../settings/viewmodel/SettingsViewModel.kt | 12 ++++++++ .../res/layout/settings_advanced_calls.xml | 30 +++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 60 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index efc4c07fc..c70966735 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -295,12 +295,12 @@ class CoreContext val autoAnswerDelay = corePreferences.autoAnswerDelay if (autoAnswerDelay == 0) { Log.w("$TAG Auto answering call immediately") - answerCall(call) + answerCall(call, true) } else { Log.i("$TAG Scheduling auto answering in $autoAnswerDelay milliseconds") postOnCoreThreadDelayed({ Log.w("$TAG Auto answering call") - answerCall(call) + answerCall(call, true) }, autoAnswerDelay.toLong()) } } @@ -916,7 +916,7 @@ class CoreContext } @WorkerThread - fun answerCall(call: Call) { + fun answerCall(call: Call, autoAnswer: Boolean = false) { Log.i( "$TAG Answering call with remote address [${call.remoteAddress.asStringUriOnly()}] and to address [${call.toAddress.asStringUriOnly()}]" ) @@ -942,6 +942,12 @@ class CoreContext Log.i( "$TAG Enabling video on call params to prevent audio-only layout when answering" ) + } else if (autoAnswer) { + val videoBothWays = corePreferences.autoAnswerVideoCallsWithVideoDirectionSendReceive + if (videoBothWays) { + Log.i("$TAG Call is being auto-answered, requesting video in both ways according to user setting") + params.videoDirection = MediaDirection.SendRecv + } } call.acceptWithParams(params) diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 8c3b186a0..b91feaefd 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -183,6 +183,13 @@ class CorePreferences config.setInt("app", "auto_answer_delay", value) } + @get:WorkerThread @set:WorkerThread + var autoAnswerVideoCallsWithVideoDirectionSendReceive: Boolean + get() = config.getBool("app", "auto_answer_video_send_receive", false) + set(value) { + config.setBool("app", "auto_answer_video_send_receive", value) + } + // Conversation related @get:WorkerThread @set:WorkerThread diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt index 3b59e3c82..4586b2192 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/SettingsViewModel.kt @@ -217,6 +217,7 @@ class SettingsViewModel val allowOutgoingEarlyMedia = MutableLiveData() val autoAnswerIncomingCalls = MutableLiveData() val autoAnswerIncomingCallsDelay = MutableLiveData() + val autoAnswerIncomingCallsWithVideoDirectionSendReceive = MutableLiveData() val expandAudioDevices = MutableLiveData() val inputAudioDeviceIndex = MutableLiveData() @@ -356,6 +357,7 @@ class SettingsViewModel allowOutgoingEarlyMedia.postValue(corePreferences.allowOutgoingEarlyMedia) autoAnswerIncomingCalls.postValue(corePreferences.autoAnswerEnabled) autoAnswerIncomingCallsDelay.postValue(corePreferences.autoAnswerDelay) + autoAnswerIncomingCallsWithVideoDirectionSendReceive.postValue(corePreferences.autoAnswerVideoCallsWithVideoDirectionSendReceive) setupMediaEncryption() setupAudioDevices() @@ -889,6 +891,16 @@ class SettingsViewModel } } + @UiThread + fun toggleEnableAutoAnswerIncomingCallsWithVideoDirectionSendReceive() { + val newValue = autoAnswerIncomingCallsWithVideoDirectionSendReceive.value == false + + coreContext.postOnCoreThread { core -> + corePreferences.autoAnswerVideoCallsWithVideoDirectionSendReceive = newValue + autoAnswerIncomingCallsWithVideoDirectionSendReceive.postValue(newValue) + } + } + @UiThread fun updateDeviceName() { coreContext.postOnCoreThread { diff --git a/app/src/main/res/layout/settings_advanced_calls.xml b/app/src/main/res/layout/settings_advanced_calls.xml index 241c37a2a..636e03283 100644 --- a/app/src/main/res/layout/settings_advanced_calls.xml +++ b/app/src/main/res/layout/settings_advanced_calls.xml @@ -317,6 +317,36 @@ app:layout_constraintStart_toStartOf="@id/auto_answer_incoming_calls_delay_title" app:layout_constraintEnd_toEndOf="parent"/> + + + + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d19c684c3..318cad9a4 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -281,6 +281,7 @@ Décrocher automatiquement les appels entrants Délai avant le décrochage automatique Délai en millisecondes + Décrocher automatiquement avec la vidéo activée dans les deux sens URL de configuration distante Télécharger & appliquer Périphériques audio diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e6a98591d..e4d24c061 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -321,6 +321,7 @@ Auto answer incoming calls Delay before auto answering call Delay in milliseconds + Auto answer with video enabled in both directions Remote provisioning URL Download & apply Audio devices