diff --git a/app/src/main/assets/assistant_third_party_default_values b/app/src/main/assets/assistant_third_party_default_values
index d19b3f504..511252548 100644
--- a/app/src/main/assets/assistant_third_party_default_values
+++ b/app/src/main/assets/assistant_third_party_default_values
@@ -32,4 +32,7 @@
srtp
0
+
diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt
index 51437bbbe..60291e329 100644
--- a/app/src/main/java/org/linphone/core/CorePreferences.kt
+++ b/app/src/main/java/org/linphone/core/CorePreferences.kt
@@ -264,6 +264,13 @@ class CorePreferences
config.setString("app", "friend_list_to_store_newly_created_contacts", value)
}
+ @get:AnyThread @set:WorkerThread
+ var disableAddContact: Boolean
+ get() = config.getBool("ui", "disable_add_contact", false)
+ set(value) {
+ config.setBool("ui", "disable_add_contact", value)
+ }
+
// Voice recordings related
@get:AnyThread @set:WorkerThread
diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt
index e804acabd..5f31052e3 100644
--- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt
@@ -34,6 +34,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
+import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.ChatInfoFragmentBinding
@@ -367,6 +368,7 @@ class ConversationInfoFragment : SlidingPaneChildFragment() {
popupView.isMeAdmin = participantModel.isMyselfAdmin
val friendRefKey = participantModel.refKey
popupView.isParticipantContact = participantModel.friendAvailable
+ popupView.disableAddContact = corePreferences.disableAddContact
popupView.setRemoveParticipantClickListener {
Log.i("$TAG Trying to remove participant [$address]")
diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt
index 4ac6aadd0..ee5f4cfbc 100644
--- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt
@@ -82,6 +82,8 @@ class ConversationInfoViewModel
val friendAvailable = MutableLiveData()
+ val disableAddContact = MutableLiveData()
+
val groupLeftEvent: MutableLiveData> by lazy {
MutableLiveData>()
}
@@ -194,6 +196,7 @@ class ConversationInfoViewModel
init {
expandParticipants.value = true
showPeerSipUri.value = false
+ disableAddContact.value = corePreferences.disableAddContact
coreContext.postOnCoreThread {
hideSipAddresses.postValue(corePreferences.hideSipAddresses)
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 1eb63eb9f..0e6004bb5 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
@@ -71,6 +71,8 @@ class ContactsListViewModel
val showResultsLimitReached = MutableLiveData()
+ val disableAddContact = MutableLiveData()
+
val vCardTerminatedEvent: MutableLiveData>> by lazy {
MutableLiveData>>()
}
@@ -150,6 +152,7 @@ class ContactsListViewModel
fetchInProgress.value = true
showFavourites.value = corePreferences.showFavoriteContacts
showFilter.value = !corePreferences.hidePhoneNumbers && !corePreferences.hideSipAddresses
+ disableAddContact.value = corePreferences.disableAddContact
coreContext.postOnCoreThread { core ->
domainFilter = corePreferences.contactsFilter
diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryFragment.kt
index 4fad50448..a289020d6 100644
--- a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryFragment.kt
@@ -34,6 +34,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
+import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.HistoryFragmentBinding
@@ -216,6 +217,7 @@ class HistoryFragment : SlidingPaneChildFragment() {
popupView.contactExists = viewModel.callLogModel.value?.friendExists == true
popupView.isConferenceCallLog = viewModel.isConferenceCallLog.value == true
+ popupView.disableAddContact = corePreferences.disableAddContact
popupView.setAddToContactsListener {
sharedViewModel.sipAddressToAddToNewContact = viewModel.callLogModel.value?.displayedAddress.orEmpty()
diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryMenuDialogFragment.kt
index cab571da4..15ee5d5a5 100644
--- a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryMenuDialogFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryMenuDialogFragment.kt
@@ -29,6 +29,7 @@ import androidx.annotation.UiThread
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
+import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.databinding.HistoryListLongPressMenuBinding
@UiThread
@@ -69,6 +70,7 @@ class HistoryMenuDialogFragment(
): View {
val view = HistoryListLongPressMenuBinding.inflate(layoutInflater)
view.contactExists = contactExists
+ view.disableAddContact = corePreferences.disableAddContact
view.setCopyNumberClickListener {
onCopyNumberOrAddressToClipboard?.invoke()
diff --git a/app/src/main/res/layout-land/contacts_list_fragment.xml b/app/src/main/res/layout-land/contacts_list_fragment.xml
index b63594359..b84fc34d9 100644
--- a/app/src/main/res/layout-land/contacts_list_fragment.xml
+++ b/app/src/main/res/layout-land/contacts_list_fragment.xml
@@ -201,6 +201,7 @@
android:layout_margin="16dp"
android:src="@drawable/user_plus"
android:contentDescription="@string/content_description_contact_create"
+ android:visibility="@{viewModel.disableAddContact ? View.GONE : View.VISIBLE}"
app:tint="?attr/color_on_main"
app:backgroundTint="?attr/color_main1_500"
app:shapeAppearanceOverlay="@style/rounded"
diff --git a/app/src/main/res/layout/chat_info_fragment.xml b/app/src/main/res/layout/chat_info_fragment.xml
index f7272d0c9..40c35a519 100644
--- a/app/src/main/res/layout/chat_info_fragment.xml
+++ b/app/src/main/res/layout/chat_info_fragment.xml
@@ -469,7 +469,7 @@
android:drawableStart="@drawable/user_plus"
android:onClick="@{addToContactsClickListener}"
android:text="@string/conversation_info_menu_add_to_contacts"
- android:visibility="@{!viewModel.isGroup && !viewModel.friendAvailable ? View.VISIBLE : View.GONE, default=gone}"
+ android:visibility="@{!viewModel.isGroup && !viewModel.friendAvailable && !viewModel.disableAddContact ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/action_see_contact" />
@@ -481,7 +481,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
- android:background="@{!viewModel.isGroup ? @drawable/action_background_middle : @drawable/action_background_top, default=@drawable/action_background_top}"
+ android:background="@{viewModel.disableAddContact ? @drawable/action_background_top : !viewModel.isGroup ? @drawable/action_background_middle : @drawable/action_background_top, default=@drawable/action_background_top}"
android:drawableStart="@drawable/clock_countdown"
android:onClick="@{configureEphemeralMessagesClickListener}"
android:text="@string/conversation_action_configure_ephemeral_messages"
diff --git a/app/src/main/res/layout/chat_participant_admin_popup_menu.xml b/app/src/main/res/layout/chat_participant_admin_popup_menu.xml
index 19a04b647..dc1bb5a28 100644
--- a/app/src/main/res/layout/chat_participant_admin_popup_menu.xml
+++ b/app/src/main/res/layout/chat_participant_admin_popup_menu.xml
@@ -32,6 +32,9 @@
+
+
+