From 68d34735a6ab2bca2988f63f5e0b4af513bb36a5 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 2 Sep 2022 09:44:39 +0200 Subject: [PATCH] Moving LIME server URL from Core to Accounts --- app/src/main/assets/assistant_default_values | 1 + .../assets/assistant_linphone_default_values | 1 + app/src/main/assets/linphonerc_factory | 1 + .../viewmodels/ChatRoomCreationViewModel.kt | 2 +- .../contact/viewmodels/ContactViewModel.kt | 4 ++-- .../history/viewmodels/CallLogViewModel.kt | 2 +- .../viewmodels/AccountSettingsViewModel.kt | 10 ++++++++++ .../java/org/linphone/core/CoreContext.kt | 19 ++++++++++++------- .../java/org/linphone/core/CorePreferences.kt | 3 --- .../java/org/linphone/utils/LinphoneUtils.kt | 6 +++--- .../layout/chat_room_creation_fragment.xml | 2 +- .../res/layout/settings_account_fragment.xml | 7 +++++++ app/src/main/res/values-fr/strings.xml | 3 +++ app/src/main/res/values/strings.xml | 1 + 14 files changed, 44 insertions(+), 18 deletions(-) diff --git a/app/src/main/assets/assistant_default_values b/app/src/main/assets/assistant_default_values index 11e69874a..a2c4512ab 100644 --- a/app/src/main/assets/assistant_default_values +++ b/app/src/main/assets/assistant_default_values @@ -19,6 +19,7 @@ 0 0 0 +
diff --git a/app/src/main/assets/assistant_linphone_default_values b/app/src/main/assets/assistant_linphone_default_values index 45c8b6c22..df1f378c1 100644 --- a/app/src/main/assets/assistant_linphone_default_values +++ b/app/src/main/assets/assistant_linphone_default_values @@ -19,6 +19,7 @@ 1 1 1 + https://lime.linphone.org/lime-server/lime-server.php
stun.linphone.org diff --git a/app/src/main/assets/linphonerc_factory b/app/src/main/assets/linphonerc_factory index 277e26f87..8a31a5b83 100644 --- a/app/src/main/assets/linphonerc_factory +++ b/app/src/main/assets/linphonerc_factory @@ -37,6 +37,7 @@ notify_each_friend_individually_when_presence_received=0 [app] activation_code_length=4 prefer_basic_chat_room=1 +record_aware=1 [assistant] xmlrpc_url=https://subscribe.linphone.org:444/wizard.php diff --git a/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomCreationViewModel.kt b/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomCreationViewModel.kt index f4434daf1..98b18b56c 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomCreationViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomCreationViewModel.kt @@ -41,7 +41,7 @@ class ChatRoomCreationViewModel : ContactsSelectionViewModel() { val waitForChatRoomCreation = MutableLiveData() - val limeAvailable: Boolean = LinphoneUtils.isLimeAvailable() + val secureChatAvailable: Boolean = LinphoneUtils.isEndToEndEncryptedChatAvailable() private val listener = object : ChatRoomListenerStub() { override fun onStateChanged(room: ChatRoom, state: ChatRoom.State) { diff --git a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt index ff6603191..a025bd0af 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt @@ -204,7 +204,7 @@ class ContactViewModel(friend: Friend, async: Boolean = false) : MessageNotifier val presenceModel = friend.getPresenceModelForUriOrTel(value) val hasPresence = presenceModel?.basicStatus == PresenceBasicStatus.Open val isMe = coreContext.core.defaultAccount?.params?.identityAddress?.weakEqual(address) ?: false - val secureChatAllowed = LinphoneUtils.isLimeAvailable() && !isMe && friend.getPresenceModelForUriOrTel(value)?.hasCapability(FriendCapability.LimeX3Dh) ?: false + val secureChatAllowed = LinphoneUtils.isEndToEndEncryptedChatAvailable() && !isMe && friend.getPresenceModelForUriOrTel(value)?.hasCapability(FriendCapability.LimeX3Dh) ?: false val displayValue = if (coreContext.core.defaultAccount?.params?.domain == address.domain) (address.username ?: value) else value val noa = ContactNumberOrAddressData(address, hasPresence, displayValue, showSecureChat = secureChatAllowed, listener = listener) list.add(noa) @@ -218,7 +218,7 @@ class ContactViewModel(friend: Friend, async: Boolean = false) : MessageNotifier val address = coreContext.core.interpretUrl(contactAddress, true) address?.displayName = displayName.value.orEmpty() val isMe = if (address != null) coreContext.core.defaultAccount?.params?.identityAddress?.weakEqual(address) ?: false else false - val secureChatAllowed = LinphoneUtils.isLimeAvailable() && !isMe && friend.getPresenceModelForUriOrTel(number)?.hasCapability(FriendCapability.LimeX3Dh) ?: false + val secureChatAllowed = LinphoneUtils.isEndToEndEncryptedChatAvailable() && !isMe && friend.getPresenceModelForUriOrTel(number)?.hasCapability(FriendCapability.LimeX3Dh) ?: false val label = PhoneNumberUtils.vcardParamStringToAddressBookLabel(coreContext.context.resources, phoneNumber.label ?: "") val noa = ContactNumberOrAddressData(address, hasPresence, number, isSip = false, showSecureChat = secureChatAllowed, typeLabel = label, listener = listener) list.add(noa) diff --git a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt index cf769dffa..e8a1ff40a 100644 --- a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt @@ -99,7 +99,7 @@ class CallLogViewModel(val callLog: CallLog, private val isRelated: Boolean = fa val chatAllowed = !corePreferences.disableChat - val secureChatAllowed = LinphoneUtils.isLimeAvailable() && (contact.value?.getPresenceModelForUriOrTel(peerSipUri)?.hasCapability(FriendCapability.LimeX3Dh) ?: false) + val secureChatAllowed = LinphoneUtils.isEndToEndEncryptedChatAvailable() && (contact.value?.getPresenceModelForUriOrTel(peerSipUri)?.hasCapability(FriendCapability.LimeX3Dh) ?: false) val relatedCallLogs = MutableLiveData>() diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt index 7f7683c97..2546018a2 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/AccountSettingsViewModel.kt @@ -428,6 +428,15 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel( } val audioVideoConferenceFactoryUri = MutableLiveData() + val limeServerUrlListener = object : SettingListenerStub() { + override fun onTextValueChanged(newValue: String) { + val params = account.params.clone() + params.limeServerUrl = newValue + account.params = params + } + } + val limeServerUrl = MutableLiveData() + init { update() account.addListener(listener) @@ -485,6 +494,7 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel( conferenceFactoryUri.value = params.conferenceFactoryUri audioVideoConferenceFactoryUri.value = params.audioVideoConferenceFactoryAddress?.asStringUriOnly() + limeServerUrl.value = params.limeServerUrl } private fun initTransportList() { diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 86a21035d..281627daa 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -384,13 +384,16 @@ class CoreContext( core.isVibrationOnIncomingCallEnabled = true core.config.setBool("app", "incoming_call_vibration", false) } + if (core.config.getInt("misc", "conference_layout", 1) > 1) { core.config.setInt("misc", "conference_layout", 1) } - if (!core.config.getBool("app", "conference_migration", false)) { - core.isRecordAwareEnabled = true - core.config.setBool("app", "conference_migration", true) + // Now LIME server URL is set on accounts + val limeServerUrl = core.limeX3DhServerUrl.orEmpty() + if (limeServerUrl.isNotEmpty()) { + Log.w("[Context] Removing LIME X3DH server URL from Core config") + core.limeX3DhServerUrl = null } // Disable Telecom Manager on Android < 10 to prevent crash due to OS bug in Android 9 @@ -446,6 +449,12 @@ class CoreContext( Log.i("[Context] CPIM allowed in basic chat rooms for account ${params.identityAddress?.asString()}") } + if (account.params.limeServerUrl == null && limeServerUrl.isNotEmpty()) { + params.limeServerUrl = limeServerUrl + paramsChanged = true + Log.i("[Context] Moving Core's LIME X3DH server URL [$limeServerUrl] on account ${params.identityAddress?.asString()}") + } + if (paramsChanged) { Log.i("[Context] Account params have been updated, apply changes") account.params = params @@ -497,10 +506,6 @@ class CoreContext( friendList.rlsAddress = rlsAddress } } - - if (core.limeX3DhAvailable()) { - core.limeX3DhServerUrl = corePreferences.defaultLimeServerUrl - } } else { Log.i("[Context] Background mode with foreground service automatically enabled") corePreferences.keepServiceAlive = true diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index c15b73bfa..d8c5a6adc 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -483,9 +483,6 @@ class CorePreferences constructor(private val context: Context) { val defaultRlsUri: String get() = config.getString("sip", "rls_uri", "sips:rls@sip.linphone.org")!! - val defaultLimeServerUrl: String - get() = config.getString("lime", "lime_server_url", "https://lime.linphone.org/lime-server/lime-server.php")!! - val debugPopupCode: String get() = config.getString("app", "debug_popup_magic", "#1234#")!! diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index 82620f9ea..896a32013 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -104,10 +104,10 @@ class LinphoneUtils { } } - fun isLimeAvailable(): Boolean { + fun isEndToEndEncryptedChatAvailable(): Boolean { val core = coreContext.core - return core.limeX3DhAvailable() && core.isLimeX3DhEnabled && - core.limeX3DhServerUrl != null && + return core.limeX3DhAvailable() && + core.defaultAccount?.params?.limeServerUrl != null && core.defaultAccount?.params?.conferenceFactoryUri != null } diff --git a/app/src/main/res/layout/chat_room_creation_fragment.xml b/app/src/main/res/layout/chat_room_creation_fragment.xml index f076cc4af..d35e61cb2 100644 --- a/app/src/main/res/layout/chat_room_creation_fragment.xml +++ b/app/src/main/res/layout/chat_room_creation_fragment.xml @@ -42,7 +42,7 @@ android:src="@drawable/back" /> + + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 78b7f00d2..8c354c7c7 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -747,4 +747,7 @@ Modifier la réunion La réunion a été modifiée : La réunion a été annulée : + Adresse du serveur de conversation de groupe/sécurisées + Adresse du serveur de conférence audio/vidéo + URL du serveur de clés pour le chiffrement de bout en bout \ 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 570305473..3a3d5ffd6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -689,6 +689,7 @@ Replace + by 00 Conference factory URI Audio/video conference factory URI + E2E encryption keys server URL Default layout