From e8ad1e039bc4129eb25cd3edf9783eb02bab3c5f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 20 Apr 2022 10:48:02 +0200 Subject: [PATCH] Prevent LIME X3DH server URL & friends lists RLS URI to be set for non sip.linphone.org accounts --- app/src/main/assets/assistant_default_values | 3 ++ .../assets/assistant_linphone_default_values | 7 ++-- .../fragments/AccountLoginFragment.kt | 2 +- .../EmailAccountValidationFragment.kt | 2 +- .../fragments/GenericAccountLoginFragment.kt | 4 ++- .../PhoneAccountValidationFragment.kt | 2 +- .../viewmodels/GenericLoginViewModel.kt | 8 ----- .../main/dialer/fragments/DialerFragment.kt | 19 +++++------ .../viewmodels/ContactsSettingsViewModel.kt | 2 ++ .../org/linphone/contact/ContactLoader.kt | 9 ++++- .../java/org/linphone/core/CoreContext.kt | 34 +++++++++++++------ .../java/org/linphone/core/CorePreferences.kt | 17 ++-------- .../res/layout/settings_contacts_fragment.xml | 2 +- 13 files changed, 57 insertions(+), 54 deletions(-) diff --git a/app/src/main/assets/assistant_default_values b/app/src/main/assets/assistant_default_values index e5192e38c..11e69874a 100644 --- a/app/src/main/assets/assistant_default_values +++ b/app/src/main/assets/assistant_default_values @@ -24,6 +24,9 @@ +
+ 0 +
MD5 diff --git a/app/src/main/assets/assistant_linphone_default_values b/app/src/main/assets/assistant_linphone_default_values index 497e98efc..f4a5aee7f 100644 --- a/app/src/main/assets/assistant_linphone_default_values +++ b/app/src/main/assets/assistant_linphone_default_values @@ -24,11 +24,8 @@ stun.linphone.org stun,ice
-
- sips:rls@sip.linphone.org -
-
- https://lime.linphone.org/lime-server/lime-server.php +
+ 1
sip.linphone.org diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt index 4cf945451..7c07f3755 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt @@ -93,7 +93,7 @@ class AccountLoginFragment : AbstractPhoneFragment { - coreContext.contactsManager.updateLocalContacts() + coreContext.newAccountConfigured(true) if (coreContext.core.isEchoCancellerCalibrationRequired) { navigateToEchoCancellerCalibration() diff --git a/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt b/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt index 6ecdfc9d6..81fc5d5d3 100644 --- a/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt +++ b/app/src/main/java/org/linphone/activities/assistant/viewmodels/GenericLoginViewModel.kt @@ -24,7 +24,6 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext -import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.core.* import org.linphone.core.tools.Log import org.linphone.utils.Event @@ -141,13 +140,6 @@ class GenericLoginViewModel(private val accountCreator: AccountCreator) : ViewMo } Log.i("[Assistant] [Generic Login] Proxy config created") - // The following is required to keep the app alive - // and be able to receive calls while in background - if (domain.value.orEmpty() != corePreferences.defaultDomain) { - Log.i("[Assistant] [Generic Login] Background mode with foreground service automatically enabled") - corePreferences.keepServiceAlive = true - coreContext.notificationsManager.startForeground() - } } private fun isLoginButtonEnabled(): Boolean { diff --git a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt index 103a650f7..fd2428bee 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt @@ -328,17 +328,14 @@ class DialerFragment : SecureFragment() { } private fun checkForUpdate() { - val url: String? = corePreferences.checkIfUpdateAvailableUrl - if (url != null && url.isNotEmpty()) { - val lastTimestamp: Int = corePreferences.lastUpdateAvailableCheckTimestamp - val currentTimeStamp = System.currentTimeMillis().toInt() - val interval: Int = corePreferences.checkUpdateAvailableInterval - if (lastTimestamp == 0 || currentTimeStamp - lastTimestamp >= interval) { - val currentVersion = BuildConfig.VERSION_NAME - Log.i("[Dialer] Checking for update using url [$url] and current version [$currentVersion]") - coreContext.core.checkForUpdate(currentVersion) - corePreferences.lastUpdateAvailableCheckTimestamp = currentTimeStamp - } + val lastTimestamp: Int = corePreferences.lastUpdateAvailableCheckTimestamp + val currentTimeStamp = System.currentTimeMillis().toInt() + val interval: Int = corePreferences.checkUpdateAvailableInterval + if (lastTimestamp == 0 || currentTimeStamp - lastTimestamp >= interval) { + val currentVersion = BuildConfig.VERSION_NAME + Log.i("[Dialer] Checking for update using current version [$currentVersion]") + coreContext.core.checkForUpdate(currentVersion) + corePreferences.lastUpdateAvailableCheckTimestamp = currentTimeStamp } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt index 6b56265d0..4b6f9f423 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ContactsSettingsViewModel.kt @@ -38,6 +38,7 @@ class ContactsSettingsViewModel : GenericSettingsViewModel() { } } val friendListSubscribe = MutableLiveData() + val rlsAddressAvailable = MutableLiveData() val showNewContactAccountDialogListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { @@ -95,6 +96,7 @@ class ContactsSettingsViewModel : GenericSettingsViewModel() { readContactsPermissionGranted.value = PermissionHelper.get().hasReadContactsPermission() friendListSubscribe.value = core.isFriendListSubscriptionEnabled + rlsAddressAvailable.value = core.defaultFriendList?.rlsAddress?.asStringUriOnly().orEmpty().isNotEmpty() showNewContactAccountDialog.value = prefs.showNewContactAccountDialog nativePresence.value = prefs.storePresenceInNativeContact showOrganization.value = prefs.displayOrganization diff --git a/app/src/main/java/org/linphone/contact/ContactLoader.kt b/app/src/main/java/org/linphone/contact/ContactLoader.kt index 07bf6ab2e..c9300c53a 100644 --- a/app/src/main/java/org/linphone/contact/ContactLoader.kt +++ b/app/src/main/java/org/linphone/contact/ContactLoader.kt @@ -61,11 +61,18 @@ class ContactLoader : LoaderManager.LoaderCallbacks { override fun onCreateLoader(id: Int, args: Bundle?): Loader { Log.i("[Contacts Loader] Loader created") coreContext.contactsManager.fetchInProgress.value = true + + val selection = if (corePreferences.fetchContactsFromDefaultDirectory) { + ContactsContract.Data.IN_DEFAULT_DIRECTORY + " == 1" + } else { + null + } + return CursorLoader( coreContext.context, ContactsContract.Data.CONTENT_URI, projection, - ContactsContract.Data.IN_DEFAULT_DIRECTORY + " == 1", + selection, null, null ) diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 56d7d7b15..96508422c 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -425,16 +425,6 @@ class CoreContext(val context: Context, coreConfig: Config) : LifecycleOwner, Vi Log.i("[Context] Account params have been updated, apply changes") account.params = params } - - // Ensure LIME server URL is set if at least one sip.linphone.org proxy - if (core.limeX3DhAvailable()) { - var url: String? = core.limeX3DhServerUrl - if (url == null || url.isEmpty()) { - url = corePreferences.limeX3dhServerUrl - Log.i("[Context] Setting LIME X3Dh server url to default value: $url") - core.limeX3DhServerUrl = url - } - } } } @@ -470,6 +460,30 @@ class CoreContext(val context: Context, coreConfig: Config) : LifecycleOwner, Vi } } + fun newAccountConfigured(isLinphoneAccount: Boolean) { + Log.i("[Context] A new ${if (isLinphoneAccount) AppUtils.getString(R.string.app_name) else "third-party"} account has been configured") + + if (isLinphoneAccount) { + core.config.setString("sip", "rls_uri", corePreferences.defaultRlsUri) + val rlsAddress = core.interpretUrl(corePreferences.defaultRlsUri) + if (rlsAddress != null) { + for (friendList in core.friendsLists) { + friendList.rlsAddress = rlsAddress + } + } + + if (core.limeX3DhAvailable()) { + core.limeX3DhServerUrl = corePreferences.defaultLimeServerUrl + } + } else { + Log.i("[Context] Background mode with foreground service automatically enabled") + corePreferences.keepServiceAlive = true + notificationsManager.startForeground() + } + + contactsManager.updateLocalContacts() + } + /* Call related functions */ fun initPhoneStateListener() { diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 074ce89e9..6b2e2e945 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -474,6 +474,9 @@ 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#")!! @@ -495,20 +498,6 @@ class CorePreferences constructor(private val context: Context) { "" )!! - val limeX3dhServerUrl: String - get() = config.getString( - "app", - "default_lime_x3dh_server_url", - "https://lime.linphone.org/lime-server/lime-server.php" - )!! - - val checkIfUpdateAvailableUrl: String? - get() = config.getString( - "misc", - "version_check_url_root", - "https://linphone.org/releases/android/RELEASE" - ) - val checkUpdateAvailableInterval: Int get() = config.getInt("app", "version_check_interval", 86400000) diff --git a/app/src/main/res/layout/settings_contacts_fragment.xml b/app/src/main/res/layout/settings_contacts_fragment.xml index 6a75622f3..dc51fbcc7 100644 --- a/app/src/main/res/layout/settings_contacts_fragment.xml +++ b/app/src/main/res/layout/settings_contacts_fragment.xml @@ -73,7 +73,7 @@ linphone:title="@{@string/contacts_settings_friendlist_subscribe_title}" linphone:listener="@{viewModel.friendListSubscribeListener}" linphone:checked="@={viewModel.friendListSubscribe}" - linphone:enabled="@{viewModel.readContactsPermissionGranted}"/> + linphone:enabled="@{viewModel.readContactsPermissionGranted && viewModel.rlsAddressAvailable}"/>