Changes to show & use the 'apply prefix for calls & chat'

This commit is contained in:
Sylvain Berfini 2022-07-18 13:36:37 +02:00
parent e0bc94d62d
commit 1c7886ffb7
14 changed files with 31 additions and 22 deletions

View file

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

View file

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

View file

@ -79,7 +79,7 @@ class ConferenceWaitingRoomFragment : GenericFragment<ConferenceWaitingRoomFragm
it.consume { callParams ->
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)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -180,7 +180,7 @@ class ContactLoader : LoaderManager.LoaderCallbacks<Cursor> {
}
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)

View file

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

View file

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

View file

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

View file

@ -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}"/>
<include
layout="@layout/settings_widget_switch"