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