From 1c7886ffb7e4e0b0513efa69b9a5e8ed9ffa0ccb Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 18 Jul 2022 13:36:37 +0200 Subject: [PATCH] Changes to show & use the 'apply prefix for calls & chat' --- .../org/linphone/activities/main/MainActivity.kt | 4 ++-- .../chat/viewmodels/ChatRoomCreationViewModel.kt | 2 +- .../fragments/ConferenceWaitingRoomFragment.kt | 2 +- .../contact/viewmodels/ContactEditorViewModel.kt | 2 +- .../main/contact/viewmodels/ContactViewModel.kt | 2 +- .../settings/viewmodels/AccountSettingsViewModel.kt | 2 +- .../org/linphone/compatibility/Api26Compatibility.kt | 2 +- .../org/linphone/compatibility/Api31Compatibility.kt | 2 +- .../linphone/compatibility/XiaomiCompatibility.kt | 2 +- .../main/java/org/linphone/contact/ContactLoader.kt | 2 +- app/src/main/java/org/linphone/core/CoreContext.kt | 10 +++++----- .../notifications/NotificationBroadcastReceiver.kt | 6 +++--- .../main/java/org/linphone/utils/LinphoneUtils.kt | 12 +++++++++++- .../main/res/layout/settings_account_fragment.xml | 3 +-- 14 files changed, 31 insertions(+), 22 deletions(-) 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 a122a33cd..faf9d79e2 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -361,7 +361,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin } } - val address = coreContext.core.interpretUrl(addressToCall) + val address = coreContext.core.interpretUrl(addressToCall, LinphoneUtils.applyInternationalPrefix()) if (address != null) { addressToCall = address.asStringUriOnly() } @@ -460,7 +460,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin val localAddress = coreContext.core.defaultAccount?.params?.identityAddress?.asStringUriOnly() - val peerAddress = coreContext.core.interpretUrl(addressToIM)?.asStringUriOnly() + val peerAddress = coreContext.core.interpretUrl(addressToIM, LinphoneUtils.applyInternationalPrefix())?.asStringUriOnly() Log.i("[Main Activity] Navigating to chat room with local [$localAddress] and peer [$peerAddress] addresses") navigateToChatRoom(localAddress, peerAddress) } else { 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 db4c1e51e..f4434daf1 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 @@ -72,7 +72,7 @@ class ChatRoomCreationViewModel : ContactsSelectionViewModel() { val defaultAccount = coreContext.core.defaultAccount var room: ChatRoom? - val address = searchResult.address ?: coreContext.core.interpretUrl(searchResult.phoneNumber ?: "") + val address = searchResult.address ?: coreContext.core.interpretUrl(searchResult.phoneNumber ?: "", LinphoneUtils.applyInternationalPrefix()) if (address == null) { Log.e("[Chat Room Creation] Can't get a valid address from search result $searchResult") onMessageToNotifyEvent.value = Event(R.string.chat_room_creation_failed_snack) diff --git a/app/src/main/java/org/linphone/activities/main/conference/fragments/ConferenceWaitingRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/conference/fragments/ConferenceWaitingRoomFragment.kt index e6a771719..af5883fc6 100644 --- a/app/src/main/java/org/linphone/activities/main/conference/fragments/ConferenceWaitingRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/conference/fragments/ConferenceWaitingRoomFragment.kt @@ -79,7 +79,7 @@ class ConferenceWaitingRoomFragment : GenericFragment val conferenceUri = arguments?.getString("Address") if (conferenceUri != null) { - val conferenceAddress = coreContext.core.interpretUrl(conferenceUri) + val conferenceAddress = coreContext.core.interpretUrl(conferenceUri, false) if (conferenceAddress != null) { Log.i("[Conference Waiting Room] Calling conference SIP URI: ${conferenceAddress.asStringUriOnly()}") coreContext.startCall(conferenceAddress, callParams) diff --git a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactEditorViewModel.kt b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactEditorViewModel.kt index 227e6a5a7..d07aa4f38 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactEditorViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactEditorViewModel.kt @@ -130,7 +130,7 @@ class ContactEditorViewModel(val c: Friend?) : ViewModel(), ContactDataInterface val sipAddress = address.newValue.value.orEmpty() if (sipAddress.isEmpty()) continue - val parsed = coreContext.core.interpretUrl(sipAddress) + val parsed = coreContext.core.interpretUrl(sipAddress, false) if (parsed != null) contact.addAddress(parsed) } 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 3adb1028b..4195ede25 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 @@ -215,7 +215,7 @@ class ContactViewModel(friend: Friend, async: Boolean = false) : MessageNotifier val presenceModel = friend.getPresenceModelForUriOrTel(number) val hasPresence = presenceModel != null && presenceModel.basicStatus == PresenceBasicStatus.Open val contactAddress = presenceModel?.contact ?: number - val address = coreContext.core.interpretUrl(contactAddress) + val address = coreContext.core.interpretUrl(contactAddress, false) 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 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 5910b008e..7f7683c97 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 @@ -420,7 +420,7 @@ class AccountSettingsViewModel(val account: Account) : GenericSettingsViewModel( val audioVideoConferenceFactoryUriListener = object : SettingListenerStub() { override fun onTextValueChanged(newValue: String) { val params = account.params.clone() - val uri = coreContext.core.interpretUrl(newValue) + val uri = coreContext.core.interpretUrl(newValue, false) Log.i("[Account Settings] Forcing audio/video conference factory on proxy config ${params.identityAddress?.asString()} to value: $newValue") params.audioVideoConferenceFactoryAddress = uri account.params = params diff --git a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt index 7739e1c98..3c0483d97 100644 --- a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt @@ -166,7 +166,7 @@ class Api26Compatibility { val info: String val remoteContact = call.remoteContact - val conferenceAddress = if (remoteContact != null) coreContext.core.interpretUrl(remoteContact) else null + val conferenceAddress = if (remoteContact != null) coreContext.core.interpretUrl(remoteContact, false) else null val conferenceInfo = if (conferenceAddress != null) coreContext.core.findConferenceInformationFromUri(conferenceAddress) else null if (conferenceInfo == null) { Log.i("[Notifications Manager] No conference info found for remote contact address $remoteContact") diff --git a/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt index d97b26341..9404c8d6f 100644 --- a/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt @@ -52,7 +52,7 @@ class Api31Compatibility { notificationsManager: NotificationsManager ): Notification { val remoteContact = call.remoteContact - val conferenceAddress = if (remoteContact != null) coreContext.core.interpretUrl(remoteContact) else null + val conferenceAddress = if (remoteContact != null) coreContext.core.interpretUrl(remoteContact, false) else null val conferenceInfo = if (conferenceAddress != null) coreContext.core.findConferenceInformationFromUri(conferenceAddress) else null if (conferenceInfo != null) { Log.i("[Notifications Manager] Displaying incoming group call notification with subject ${conferenceInfo.subject} and remote contact address $remoteContact") diff --git a/app/src/main/java/org/linphone/compatibility/XiaomiCompatibility.kt b/app/src/main/java/org/linphone/compatibility/XiaomiCompatibility.kt index 7fffdd557..894a4e45b 100644 --- a/app/src/main/java/org/linphone/compatibility/XiaomiCompatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/XiaomiCompatibility.kt @@ -55,7 +55,7 @@ class XiaomiCompatibility { val info: String val remoteContact = call.remoteContact - val conferenceAddress = if (remoteContact != null) coreContext.core.interpretUrl(remoteContact) else null + val conferenceAddress = if (remoteContact != null) coreContext.core.interpretUrl(remoteContact, false) else null val conferenceInfo = if (conferenceAddress != null) coreContext.core.findConferenceInformationFromUri(conferenceAddress) else null if (conferenceInfo == null) { Log.i("[Notifications Manager] No conference info found for remote contact address $remoteContact") diff --git a/app/src/main/java/org/linphone/contact/ContactLoader.kt b/app/src/main/java/org/linphone/contact/ContactLoader.kt index b867a7f5c..35c69de74 100644 --- a/app/src/main/java/org/linphone/contact/ContactLoader.kt +++ b/app/src/main/java/org/linphone/contact/ContactLoader.kt @@ -180,7 +180,7 @@ class ContactLoader : LoaderManager.LoaderCallbacks { } linphoneMime, ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE -> { if (data1 == null) continue - val address = core.interpretUrl(data1) ?: continue + val address = core.interpretUrl(data1, true) ?: continue if ( friendsAddresses.find { it.weakEqual(address) diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 8934de199..1ae3a2899 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -414,7 +414,7 @@ class CoreContext( // Ensure audio/video conference factory URI is set on sip.linphone.org proxy configs if (account.params.audioVideoConferenceFactoryAddress == null) { val uri = corePreferences.audioVideoConferenceServerUri - val address = core.interpretUrl(uri) + val address = core.interpretUrl(uri, false) if (address != null) { Log.i("[Context] Setting audio/video conference factory on proxy config ${params.identityAddress?.asString()} to default value: $uri") params.audioVideoConferenceFactoryAddress = address @@ -483,7 +483,7 @@ class CoreContext( if (isLinphoneAccount) { core.config.setString("sip", "rls_uri", corePreferences.defaultRlsUri) - val rlsAddress = core.interpretUrl(corePreferences.defaultRlsUri) + val rlsAddress = core.interpretUrl(corePreferences.defaultRlsUri, false) if (rlsAddress != null) { for (friendList in core.friendsLists) { friendList.rlsAddress = rlsAddress @@ -596,7 +596,7 @@ class CoreContext( fun declineCall(call: Call) { val voiceMailUri = corePreferences.voiceMailUri if (voiceMailUri != null && corePreferences.redirectDeclinedCallToVoiceMail) { - val voiceMailAddress = core.interpretUrl(voiceMailUri) + val voiceMailAddress = core.interpretUrl(voiceMailUri, false) if (voiceMailAddress != null) { Log.i("[Context] Redirecting call $call to voice mail URI: $voiceMailUri") call.redirectTo(voiceMailAddress) @@ -617,7 +617,7 @@ class CoreContext( if (currentCall == null) { Log.e("[Context] Couldn't find a call to transfer") } else { - val address = core.interpretUrl(addressToCall) + val address = core.interpretUrl(addressToCall, LinphoneUtils.applyInternationalPrefix()) if (address != null) { Log.i("[Context] Transferring current call to $addressToCall") currentCall.transferTo(address) @@ -638,7 +638,7 @@ class CoreContext( } } - val address: Address? = core.interpretUrl(stringAddress) + val address: Address? = core.interpretUrl(stringAddress, LinphoneUtils.applyInternationalPrefix()) if (address == null) { Log.e("[Context] Failed to parse $stringAddress, abort outgoing call") callErrorMessageResourceId.value = Event(context.getString(R.string.call_error_network_unreachable)) diff --git a/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.kt b/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.kt index dbabc58fa..3397178fe 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.kt +++ b/app/src/main/java/org/linphone/notifications/NotificationBroadcastReceiver.kt @@ -53,7 +53,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { } val core: Core = coreContext.core - val remoteAddress = core.interpretUrl(remoteSipAddress) + val remoteAddress = core.interpretUrl(remoteSipAddress, false) if (remoteAddress == null) { Log.e("[Notification Broadcast Receiver] Couldn't interpret remote address $remoteSipAddress") return @@ -64,7 +64,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { Log.e("[Notification Broadcast Receiver] Local identity is null for notification id $notificationId") return } - val localAddress = core.interpretUrl(localIdentity) + val localAddress = core.interpretUrl(localIdentity, false) if (localAddress == null) { Log.e("[Notification Broadcast Receiver] Couldn't interpret local address $localIdentity") return @@ -107,7 +107,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { val core: Core = coreContext.core - val remoteAddress = core.interpretUrl(remoteSipAddress) + val remoteAddress = core.interpretUrl(remoteSipAddress, false) val call = if (remoteAddress != null) core.getCallByRemoteAddress2(remoteAddress) else null if (call == null) { Log.e("[Notification Broadcast Receiver] Couldn't find call from remote address $remoteSipAddress") diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index ffa24de3d..0cc40e7cd 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -78,7 +78,7 @@ class LinphoneUtils { val remoteContact = call.remoteContact val conferenceAddress = if (call.dir == Call.Dir.Incoming) { if (remoteContact != null) - coreContext.core.interpretUrl(remoteContact) + coreContext.core.interpretUrl(remoteContact, false) else null } else { @@ -234,5 +234,15 @@ class LinphoneUtils { return list } + + fun applyInternationalPrefix(): Boolean { + val account = coreContext.core.defaultAccount + if (account != null) { + val params = account.params + return params.useInternationalPrefixForCallsAndChats + } + + return true // Legacy behavior + } } } diff --git a/app/src/main/res/layout/settings_account_fragment.xml b/app/src/main/res/layout/settings_account_fragment.xml index b9d8c1d53..4ee26970c 100644 --- a/app/src/main/res/layout/settings_account_fragment.xml +++ b/app/src/main/res/layout/settings_account_fragment.xml @@ -225,8 +225,7 @@ linphone:title="@{@string/account_settings_apply_prefix_for_calls_title}" linphone:subtitle="@{@string/account_settings_apply_prefix_for_calls_summary}" linphone:listener="@{viewModel.dialPrefixListener}" - linphone:checked="@={viewModel.dialPrefix}" - android:visibility="gone"/> + linphone:checked="@={viewModel.dialPrefix}"/>