diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 80a3136ad..0ec17de66 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -130,6 +130,13 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt
index fc954b82a..af2f51350 100644
--- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt
+++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt
@@ -53,6 +53,7 @@ import org.linphone.R
import org.linphone.activities.*
import org.linphone.activities.assistant.AssistantActivity
import org.linphone.activities.main.viewmodels.CallOverlayViewModel
+import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToDialer
import org.linphone.compatibility.Compatibility
@@ -290,7 +291,19 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
navigateToContact(contactId)
}
} else {
- handleTelOrSipUri(uri)
+ val stringUri = uri.toString()
+ if (stringUri.startsWith("linphone-config:")) {
+ val remoteConfigUri = stringUri.substring("linphone-config:".length)
+ if (corePreferences.autoRemoteProvisioningOnConfigUriHandler) {
+ Log.w("[Main Activity] Remote provisioning URL set to [$remoteConfigUri], restarting Core now")
+ applyRemoteProvisioning(remoteConfigUri)
+ } else {
+ Log.i("[Main Activity] Remote provisioning URL found [$remoteConfigUri], asking for user validation")
+ showAcceptRemoteConfigurationDialog(remoteConfigUri)
+ }
+ } else {
+ handleTelOrSipUri(uri)
+ }
}
}
}
@@ -545,4 +558,34 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
coreContext.onCallOverlayClick()
}
}
+
+ private fun applyRemoteProvisioning(remoteConfigUri: String) {
+ coreContext.core.provisioningUri = remoteConfigUri
+ coreContext.core.stop()
+ coreContext.core.start()
+ }
+
+ private fun showAcceptRemoteConfigurationDialog(remoteConfigUri: String) {
+ val dialogViewModel = DialogViewModel(remoteConfigUri, getString(R.string.dialog_apply_remote_provisioning_title))
+ val dialog = DialogUtils.getDialog(this, dialogViewModel)
+
+ dialogViewModel.showCancelButton {
+ Log.i("[Main Activity] User cancelled remote provisioning config")
+ dialog.dismiss()
+ }
+
+ val okLabel = getString(
+ R.string.dialog_apply_remote_provisioning_button
+ )
+ dialogViewModel.showOkButton(
+ {
+ Log.w("[Main Activity] Remote provisioning URL set to [$remoteConfigUri], restarting Core now")
+ applyRemoteProvisioning(remoteConfigUri)
+ dialog.dismiss()
+ },
+ okLabel
+ )
+
+ dialog.show()
+ }
}
diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt
index 6805ac67f..cba0b5c10 100644
--- a/app/src/main/java/org/linphone/core/CorePreferences.kt
+++ b/app/src/main/java/org/linphone/core/CorePreferences.kt
@@ -510,6 +510,9 @@ class CorePreferences constructor(private val context: Context) {
val showContactInviteBySms: Boolean
get() = config.getBool("app", "show_invite_contact_by_sms", true)
+ val autoRemoteProvisioningOnConfigUriHandler: Boolean
+ get() = config.getBool("app", "auto_apply_provisioning_config_uri_scheme", false)
+
/* Default values related */
val echoCancellerCalibration: Int
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 5f199ea88..ea3dbff57 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -772,4 +772,6 @@
Votre compte sera supprimé localement.\nPour le supprimer de manière définitive, rendez-vous sur notre plateforme de gestion des comptes :
Transfert supervisé
%s :
+ Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?
+ Appliquer
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cc35810b3..d6d4fa904 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -761,6 +761,8 @@
An update is available
No app found for this kind of file
Would you like to try opening it as a plain text file?
+ Do you want to download and apply configuration from this URL?
+ Apply
Add a SIP address field