diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt index d34357fc9..d0afa0681 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt @@ -42,6 +42,7 @@ import org.linphone.ui.main.contacts.model.ContactNumberOrAddressModel import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel import org.linphone.ui.main.contacts.viewmodel.ContactsListViewModel import org.linphone.ui.main.fragment.GenericFragment +import org.linphone.ui.main.model.isInSecureMode import org.linphone.utils.DialogUtils @UiThread @@ -154,10 +155,14 @@ class StartCallFragment : GenericFragment() { val friend = model.friend val addressesCount = friend.addresses.size val numbersCount = friend.phoneNumbers.size - if (addressesCount == 1 && numbersCount == 0) { + + // Do not consider phone numbers if default account is in secure mode + val enablePhoneNumbers = core.defaultAccount?.isInSecureMode() != true + + if (addressesCount == 1 && (numbersCount == 0 || !enablePhoneNumbers)) { val address = friend.addresses.first() coreContext.startCall(address) - } else if (addressesCount == 1 && numbersCount == 0) { + } else if (addressesCount == 0 && numbersCount == 1 && enablePhoneNumbers) { val number = friend.phoneNumbers.first() val address = core.interpretUrl(number, true) if (address != null) { @@ -169,22 +174,26 @@ class StartCallFragment : GenericFragment() { val addressModel = ContactNumberOrAddressModel( address, address.asStringUriOnly(), + true, listener, true ) list.add(addressModel) } - for (number in friend.phoneNumbersWithLabel) { - val address = core.interpretUrl(number.phoneNumber, true) - val addressModel = ContactNumberOrAddressModel( - address, - number.phoneNumber, - listener, - false, - number.label.orEmpty() - ) - list.add(addressModel) + if (enablePhoneNumbers) { + for (number in friend.phoneNumbersWithLabel) { + val address = core.interpretUrl(number.phoneNumber, true) + val addressModel = ContactNumberOrAddressModel( + address, + number.phoneNumber, + true, + listener, + false, + number.label.orEmpty() + ) + list.add(addressModel) + } } coreContext.postOnMainThread { diff --git a/app/src/main/java/org/linphone/ui/main/calls/viewmodel/SuggestionsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/calls/viewmodel/SuggestionsListViewModel.kt index 5d6c93339..9bed5ba9b 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/viewmodel/SuggestionsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/viewmodel/SuggestionsListViewModel.kt @@ -33,6 +33,7 @@ import org.linphone.core.MagicSearchListenerStub import org.linphone.core.SearchResult import org.linphone.core.tools.Log import org.linphone.ui.main.contacts.model.ContactAvatarModel +import org.linphone.ui.main.model.isInSecureMode class SuggestionsListViewModel @UiThread constructor() : ViewModel() { companion object { @@ -70,6 +71,9 @@ class SuggestionsListViewModel @UiThread constructor() : ViewModel() { init { coreContext.postOnCoreThread { core -> + val defaultAccount = core.defaultAccount + limitSearchToLinphoneAccounts = defaultAccount?.isInSecureMode() ?: false + coreContext.contactsManager.addListener(contactsListener) magicSearch = core.createMagicSearch() magicSearch.limitedSearch = false diff --git a/app/src/main/java/org/linphone/ui/main/contacts/model/ContactNumberOrAddressModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactNumberOrAddressModel.kt index 7d02e0d4c..16ae10e4c 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/model/ContactNumberOrAddressModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/model/ContactNumberOrAddressModel.kt @@ -26,6 +26,7 @@ import org.linphone.core.Address class ContactNumberOrAddressModel @UiThread constructor( val address: Address?, val displayedValue: String, + val isEnabled: Boolean, private val listener: ContactNumberOrAddressClickListener, val isSip: Boolean = true, val label: String = "" diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt index 75b309e3b..a0bbe659a 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt @@ -34,6 +34,7 @@ import org.linphone.ui.main.contacts.model.ContactAvatarModel import org.linphone.ui.main.contacts.model.ContactDeviceModel import org.linphone.ui.main.contacts.model.ContactNumberOrAddressClickListener import org.linphone.ui.main.contacts.model.ContactNumberOrAddressModel +import org.linphone.ui.main.model.isInSecureMode import org.linphone.utils.Event import org.linphone.utils.FileUtils @@ -56,9 +57,9 @@ class ContactViewModel @UiThread constructor() : ViewModel() { val showBackButton = MutableLiveData() - val showNumbersAndAddresses = MutableLiveData() + val expandNumbersAndAddresses = MutableLiveData() - val showDevicesTrust = MutableLiveData() + val expandDevicesTrust = MutableLiveData() val contactFoundEvent = MutableLiveData>() @@ -101,8 +102,8 @@ class ContactViewModel @UiThread constructor() : ViewModel() { private lateinit var friend: Friend init { - showNumbersAndAddresses.value = true - showDevicesTrust.value = false // TODO FIXME: set it to true when it will work for real + expandNumbersAndAddresses.value = true + expandDevicesTrust.value = false // TODO FIXME: set it to true when it will work for real } @UiThread @@ -129,6 +130,7 @@ class ContactViewModel @UiThread constructor() : ViewModel() { val data = ContactNumberOrAddressModel( address, address.asStringUriOnly(), + true, // SIP addresses are always enabled listener, true ) @@ -151,6 +153,7 @@ class ContactViewModel @UiThread constructor() : ViewModel() { val data = ContactNumberOrAddressModel( address, address.asStringUriOnly(), + true, // SIP addresses are always enabled listener, true ) @@ -159,10 +162,13 @@ class ContactViewModel @UiThread constructor() : ViewModel() { } } + // phone numbers are disabled is secure mode + val enablePhoneNumbers = core.defaultAccount?.isInSecureMode() != true val address = core.interpretUrl(number.phoneNumber, true) val data = ContactNumberOrAddressModel( address, number.phoneNumber, + enablePhoneNumbers, listener, false, label = number.label.orEmpty() @@ -172,7 +178,7 @@ class ContactViewModel @UiThread constructor() : ViewModel() { sipAddressesAndPhoneNumbers.postValue(addressesAndNumbers) val devicesList = arrayListOf() - // TODO FIXME + // TODO FIXME: use real devices list from API devicesList.add(ContactDeviceModel("Pixel 6 Pro de Sylvain", true)) devicesList.add(ContactDeviceModel("Sylvain Galaxy Tab S9 Pro+ Ultra", true)) devicesList.add(ContactDeviceModel("MacBook Pro de Marcel", false)) @@ -185,13 +191,13 @@ class ContactViewModel @UiThread constructor() : ViewModel() { } @UiThread - fun toggleNumbersAndAddressesVisibility() { - showNumbersAndAddresses.value = showNumbersAndAddresses.value == false + fun toggleNumbersAndAddressesExpand() { + expandNumbersAndAddresses.value = expandNumbersAndAddresses.value == false } @UiThread - fun toggleDevicesTrustVisibility() { - showDevicesTrust.value = showDevicesTrust.value == false + fun toggleDevicesTrustExpand() { + expandDevicesTrust.value = expandDevicesTrust.value == false } @UiThread diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt index d341e623e..6c8e391bf 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt @@ -33,6 +33,7 @@ import org.linphone.core.MagicSearchListenerStub import org.linphone.core.SearchResult import org.linphone.core.tools.Log import org.linphone.ui.main.contacts.model.ContactAvatarModel +import org.linphone.ui.main.model.isInSecureMode class ContactsListViewModel @UiThread constructor() : ViewModel() { companion object { @@ -78,6 +79,9 @@ class ContactsListViewModel @UiThread constructor() : ViewModel() { showFavourites.value = true coreContext.postOnCoreThread { core -> + val defaultAccount = core.defaultAccount + limitSearchToLinphoneAccounts = defaultAccount?.isInSecureMode() ?: false + coreContext.contactsManager.addListener(contactsListener) magicSearch = core.createMagicSearch() magicSearch.limitedSearch = false diff --git a/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationViewModel.kt index c367e7d00..270cee1a6 100644 --- a/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/conversations/viewmodel/ConversationViewModel.kt @@ -34,7 +34,7 @@ import org.linphone.core.tools.Log import org.linphone.ui.main.conversations.data.EventLogData import org.linphone.utils.LinphoneUtils -class ConversationViewModel @WorkerThread constructor(): ViewModel() { +class ConversationViewModel @WorkerThread constructor() : ViewModel() { private lateinit var chatRoom: ChatRoom val events = MutableLiveData>() diff --git a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt index 1b67f8745..c0ee2bc62 100644 --- a/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt +++ b/app/src/main/java/org/linphone/ui/main/model/AccountModel.kt @@ -119,3 +119,8 @@ fun Account.getPicturePath(): String { overrideExisting = true ).absolutePath } + +fun Account.isInSecureMode(): Boolean { + // TODO FIXME + return true +} diff --git a/app/src/main/res/layout/contact_fragment.xml b/app/src/main/res/layout/contact_fragment.xml index 5c724679d..82352e6b0 100644 --- a/app/src/main/res/layout/contact_fragment.xml +++ b/app/src/main/res/layout/contact_fragment.xml @@ -99,7 +99,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" app:constraint_referenced_ids="trusted_devices_count, trust_background, trusted_devices_progress, devices, trusted_devices_progress_label" - android:visibility="@{viewModel.showDevicesTrust ? View.VISIBLE : View.GONE}" /> + android:visibility="@{viewModel.expandDevicesTrust ? View.VISIBLE : View.GONE}" />