Added advanced setting to choose between point to point and end to end encryption when creating a meeting or a group call

This commit is contained in:
Sylvain Berfini 2025-02-04 15:43:57 +01:00
parent 74394445c9
commit 3e91f3e5ff
7 changed files with 55 additions and 3 deletions

View file

@ -142,12 +142,22 @@ class CorePreferences
// Conversation related
@get:WorkerThread @set:WorkerThread
var markConversationAsReadWhenDismissingMessageNotification: Boolean
get() = config.getBool("app", "mark_as_read_notif_dismissal", false)
set(value) {
config.setBool("app", "mark_as_read_notif_dismissal", value)
}
// Conference related
@get:WorkerThread @set:WorkerThread
var createEndToEndEncryptedMeetingsAndGroupCalls: Boolean
get() = config.getBool("app", "create_e2e_encrypted_conferences", false)
set(value) {
config.setBool("app", "create_e2e_encrypted_conferences", value)
}
// Contacts related
@get:WorkerThread @set:WorkerThread

View file

@ -399,7 +399,7 @@ class ScheduleMeetingViewModel
conferenceInfo.setCapability(StreamType.Text, true)
// Enable end-to-end encryption if client supports it
conferenceInfo.securityLevel = if (LinphoneUtils.isEndToEndEncryptedChatAvailable(core)) {
conferenceInfo.securityLevel = if (corePreferences.createEndToEndEncryptedMeetingsAndGroupCalls) {
Log.i("$TAG Requesting EndToEnd security level for conference")
Conference.SecurityLevel.EndToEnd
} else {

View file

@ -187,6 +187,7 @@ class SettingsViewModel
val mediaEncryptionLabels = arrayListOf<String>()
private val mediaEncryptionValues = arrayListOf<MediaEncryption>()
val mediaEncryptionMandatory = MutableLiveData<Boolean>()
val createEndToEndEncryptedConferences = MutableLiveData<Boolean>()
val acceptEarlyMedia = MutableLiveData<Boolean>()
val allowOutgoingEarlyMedia = MutableLiveData<Boolean>()
@ -675,6 +676,7 @@ class SettingsViewModel
}
mediaEncryptionMandatory.postValue(core.isMediaEncryptionMandatory)
createEndToEndEncryptedConferences.postValue(corePreferences.createEndToEndEncryptedMeetingsAndGroupCalls)
acceptEarlyMedia.postValue(corePreferences.acceptEarlyMedia)
allowOutgoingEarlyMedia.postValue(corePreferences.allowOutgoingEarlyMedia)
}
@ -702,6 +704,16 @@ class SettingsViewModel
}
}
@UiThread
fun toggleConferencesEndToEndEncryption() {
val newValue = createEndToEndEncryptedConferences.value == false
coreContext.postOnCoreThread { core ->
corePreferences.createEndToEndEncryptedMeetingsAndGroupCalls = newValue
createEndToEndEncryptedConferences.postValue(newValue)
}
}
@UiThread
fun toggleAcceptEarlyMedia() {
val newValue = acceptEarlyMedia.value == false

View file

@ -272,7 +272,7 @@ class LinphoneUtils {
conferenceParams.subject = subject
// Enable end-to-end encryption if client supports it
conferenceParams.securityLevel = if (isEndToEndEncryptedChatAvailable(core)) {
conferenceParams.securityLevel = if (corePreferences.createEndToEndEncryptedMeetingsAndGroupCalls) {
Log.i("$TAG Requesting EndToEnd security level for conference")
Conference.SecurityLevel.EndToEnd
} else {

View file

@ -192,6 +192,34 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/media_encryption" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/settings_title_style"
android:onClick="@{() -> viewModel.toggleConferencesEndToEndEncryption()}"
android:id="@+id/e2e_encrypted_conferences_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="10dp"
android:text="@string/settings_advanced_create_e2e_encrypted_conferences_title"
android:maxLines="2"
android:ellipsize="end"
app:layout_constraintTop_toTopOf="@id/e2e_encrypted_conferences_switch"
app:layout_constraintBottom_toBottomOf="@id/e2e_encrypted_conferences_switch"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/e2e_encrypted_conferences_switch"/>
<com.google.android.material.materialswitch.MaterialSwitch
style="@style/material_switch_style"
android:id="@+id/e2e_encrypted_conferences_switch"
android:onClick="@{() -> viewModel.toggleConferencesEndToEndEncryption()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginEnd="16dp"
android:checked="@{viewModel.createEndToEndEncryptedConferences}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/media_encryption_mandatory_switch" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/settings_title_style"
android:onClick="@{() -> viewModel.toggleAcceptEarlyMedia()}"
@ -218,7 +246,7 @@
android:layout_marginEnd="16dp"
android:checked="@{viewModel.acceptEarlyMedia}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/media_encryption_mandatory_switch" />
app:layout_constraintTop_toBottomOf="@id/e2e_encrypted_conferences_switch" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/settings_title_style"

View file

@ -261,6 +261,7 @@
<string name="settings_advanced_upload_server_url">URL du serveur de partage de fichier</string>
<string name="settings_advanced_media_encryption_title">Chiffrement du média</string>
<string name="settings_advanced_media_encryption_mandatory_title">Rendre le chiffrement du média obligatoire</string>
<string name="settings_advanced_create_e2e_encrypted_conferences_title">Créer en mode chiffré de bout en bout les réunions et les appels de groupe</string>
<string name="settings_advanced_accept_early_media_title">Accepter l\'early media</string>
<string name="settings_advanced_allow_outgoing_early_media_title">Autoriser l\'early media pour les appels sortants</string>
<string name="settings_advanced_remote_provisioning_url">URL de configuration distante</string>

View file

@ -300,6 +300,7 @@
<string name="settings_advanced_upload_server_url">File sharing server URL</string>
<string name="settings_advanced_media_encryption_title">Media encryption</string>
<string name="settings_advanced_media_encryption_mandatory_title">Media encryption mandatory</string>
<string name="settings_advanced_create_e2e_encrypted_conferences_title">Create end-to-end encrypted meetings &amp; group calls</string>
<string name="settings_advanced_accept_early_media_title">Accept early media</string>
<string name="settings_advanced_allow_outgoing_early_media_title">Allow outgoing early media</string>
<string name="settings_advanced_remote_provisioning_url">Remote provisioning URL</string>