Added linphone-config scheme to (automatically or not) do a remote provisioning step using an URL

This commit is contained in:
Sylvain Berfini 2023-03-28 15:26:15 +02:00
parent ea190fdfb7
commit df4d136305
5 changed files with 58 additions and 1 deletions

View file

@ -130,6 +130,13 @@
<data android:scheme="sip-linphone" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="linphone-config" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />

View file

@ -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
@ -289,11 +290,23 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
Log.i("[Main Activity] Found contact URI parameter in intent: $uri")
navigateToContact(contactId)
}
} else {
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)
}
}
}
}
Intent.ACTION_DIAL, Intent.ACTION_CALL -> {
val uri = intent.data
if (uri != null) {
@ -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()
}
}

View file

@ -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

View file

@ -772,4 +772,6 @@
<string name="account_setting_delete_sip_linphone_org_confirmation_dialog">Votre compte sera supprimé localement.\nPour le supprimer de manière définitive, rendez-vous sur notre plateforme de gestion des comptes :</string>
<string name="call_action_attended_transfer_call">Transfert supervisé</string>
<string name="chat_room_last_message_sender_format">%s :</string>
<string name="dialog_apply_remote_provisioning_title">Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</string>
<string name="dialog_apply_remote_provisioning_button">Appliquer</string>
</resources>

View file

@ -761,6 +761,8 @@
<string name="dialog_update_available">An update is available</string>
<string name="dialog_try_open_file_as_text_title">No app found for this kind of file</string>
<string name="dialog_try_open_file_as_text_body">Would you like to try opening it as a plain text file?</string>
<string name="dialog_apply_remote_provisioning_title">Do you want to download and apply configuration from this URL?</string>
<string name="dialog_apply_remote_provisioning_button">Apply</string>
<!-- Content description -->
<string name="content_description_add_sip_address_field">Add a SIP address field</string>