From b0e25f9a676d57d777c848e4c6ff366444276b5a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 20 Mar 2023 14:38:20 +0100 Subject: [PATCH] Added a setting to use native addressbook in read only --- CHANGELOG.md | 1 + .../main/chat/adapters/ChatMessagesListAdapter.kt | 4 +++- .../main/chat/fragments/DetailChatRoomFragment.kt | 5 +++++ .../main/contact/fragments/MasterContactsFragment.kt | 7 +++++-- .../activities/main/contact/viewmodels/ContactViewModel.kt | 4 ++++ .../main/contact/viewmodels/ContactsListViewModel.kt | 3 +++ .../activities/main/dialer/viewmodels/DialerViewModel.kt | 3 +++ .../activities/main/history/viewmodels/CallLogViewModel.kt | 3 +++ .../linphone/activities/voip/viewmodels/CallsViewModel.kt | 1 - app/src/main/java/org/linphone/core/CorePreferences.kt | 4 ++++ app/src/main/res/layout-land/dialer_fragment.xml | 2 +- app/src/main/res/layout-sw533dp-land/dialer_fragment.xml | 2 +- app/src/main/res/layout-sw600dp/dialer_fragment.xml | 2 +- app/src/main/res/layout/contact_detail_fragment.xml | 4 ++-- app/src/main/res/layout/contact_master_fragment.xml | 5 +++-- app/src/main/res/layout/dialer_fragment.xml | 2 +- app/src/main/res/layout/history_detail_fragment.xml | 2 +- 17 files changed, 41 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42824b5a0..b06bb478f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Group changes to describe their impact on the project, as follows: - Confirmation dialog before removing account - Attended transfer instead of blind transfer if there is more than 1 call - Added hidden setting to disable video completely +- Added hidden setting to prevent adding / editing / removing native contacts ### Changed - Account EXPIRES is now set to 1 month instead of 1 year for sip.linphone.org accounts diff --git a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt index 58b03f60f..1161486ef 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/adapters/ChatMessagesListAdapter.kt @@ -34,6 +34,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import kotlin.math.abs import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.main.adapters.SelectionListAdapter import org.linphone.activities.main.chat.data.ChatMessageData @@ -327,7 +328,8 @@ class ChatMessagesListAdapter( } if (chatMessage.isOutgoing || chatMessageViewModel.contact.value != null || - advancedContextMenuOptionsDisabled + advancedContextMenuOptionsDisabled || + corePreferences.readOnlyNativeContacts ) { popupView.addToContactsHidden = true totalSize -= itemSize diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index 2df29dcb4..f40301582 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -952,6 +952,11 @@ class DetailChatRoomFragment : MasterFragment() + val readOnlyNativeAddressBook = MutableLiveData() + private val chatRoomListener = object : ChatRoomListenerStub() { override fun onStateChanged(chatRoom: ChatRoom, state: ChatRoom.State) { if (state == ChatRoom.State.Created) { @@ -144,11 +146,13 @@ class ContactViewModel(friend: Friend, async: Boolean = false) : MessageNotifier displayName.postValue(friend.name) isNativeContact.postValue(friend.refKey != null) presenceStatus.postValue(friend.consolidatedPresence) + readOnlyNativeAddressBook.postValue(corePreferences.readOnlyNativeContacts) } else { contact.value = friend displayName.value = friend.name isNativeContact.value = friend.refKey != null presenceStatus.value = friend.consolidatedPresence + readOnlyNativeAddressBook.value = corePreferences.readOnlyNativeContacts } friend.addListener { diff --git a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt index 4685ba6e1..04727b85c 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactsListViewModel.kt @@ -40,6 +40,8 @@ class ContactsListViewModel : ViewModel() { val nativeAddressBookEnabled = MutableLiveData() + val readOnlyNativeAddressBook = MutableLiveData() + val fetchInProgress = MutableLiveData() private var searchResultsPending: Boolean = false private var fastFetchJob: Job? = null @@ -75,6 +77,7 @@ class ContactsListViewModel : ViewModel() { init { sipContactsSelected.value = coreContext.contactsManager.shouldDisplaySipContactsList() nativeAddressBookEnabled.value = corePreferences.enableNativeAddressBookIntegration + readOnlyNativeAddressBook.value = corePreferences.readOnlyNativeContacts coreContext.contactsManager.addListener(contactsUpdatedListener) coreContext.contactsManager.magicSearch.addListener(magicSearchListener) diff --git a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt index 393026771..bcbf32f03 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt @@ -49,6 +49,8 @@ class DialerViewModel : LogsUploadViewModel() { val scheduleConferenceAvailable = MutableLiveData() + val hideAddContactButton = MutableLiveData() + val updateAvailableEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -152,6 +154,7 @@ class DialerViewModel : LogsUploadViewModel() { enteredUri.value = "" atLeastOneCall.value = coreContext.core.callsNb > 0 transferVisibility.value = false + hideAddContactButton.value = corePreferences.readOnlyNativeContacts showSwitchCamera.value = coreContext.showSwitchCameraButton() scheduleConferenceAvailable.value = LinphoneUtils.isRemoteConferencingAvailable() diff --git a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt index e8ea1b8b0..de2182272 100644 --- a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt @@ -122,6 +122,8 @@ class CallLogViewModel(val callLog: CallLog, private val isRelated: Boolean = fa val conferenceTime = MutableLiveData() val conferenceDate = MutableLiveData() + val readOnlyNativeAddressBook = MutableLiveData() + override val showGroupChatAvatar: Boolean get() = isConferenceCallLog @@ -140,6 +142,7 @@ class CallLogViewModel(val callLog: CallLog, private val isRelated: Boolean = fa init { waitForChatRoomCreation.value = false + readOnlyNativeAddressBook.value = corePreferences.readOnlyNativeContacts if (!isRelated) { val conferenceInfo = callLog.conferenceInfo diff --git a/app/src/main/java/org/linphone/activities/voip/viewmodels/CallsViewModel.kt b/app/src/main/java/org/linphone/activities/voip/viewmodels/CallsViewModel.kt index 6d2a129f2..711a7ca73 100644 --- a/app/src/main/java/org/linphone/activities/voip/viewmodels/CallsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/voip/viewmodels/CallsViewModel.kt @@ -24,7 +24,6 @@ import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import org.linphone.LinphoneApplication.Companion.coreContext -import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.voip.data.CallData import org.linphone.core.* diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 6c8f503d0..6805ac67f 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -471,6 +471,10 @@ class CorePreferences constructor(private val context: Context) { val hideStaticImageCamera: Boolean get() = config.getBool("app", "hide_static_image_camera", true) + // Will prevent user adding contact and editing / removing existing contacts + val readOnlyNativeContacts: Boolean + get() = config.getBool("app", "read_only_native_address_book", false) + // Will disable chat feature completely val disableChat: Boolean get() = config.getBool("app", "disable_chat_feature", false) diff --git a/app/src/main/res/layout-land/dialer_fragment.xml b/app/src/main/res/layout-land/dialer_fragment.xml index 25a220f73..a911071a9 100644 --- a/app/src/main/res/layout-land/dialer_fragment.xml +++ b/app/src/main/res/layout-land/dialer_fragment.xml @@ -81,7 +81,7 @@ + android:visibility="@{viewModel.nativeAddressBookEnabled && !viewModel.readOnlyNativeAddressBook ? View.VISIBLE : View.INVISIBLE}"/> + android:src="@drawable/delete" + android:visibility="@{viewModel.readOnlyNativeAddressBook ? View.INVISIBLE : View.VISIBLE}" /> diff --git a/app/src/main/res/layout/dialer_fragment.xml b/app/src/main/res/layout/dialer_fragment.xml index afb26c680..bfdbc5798 100644 --- a/app/src/main/res/layout/dialer_fragment.xml +++ b/app/src/main/res/layout/dialer_fragment.xml @@ -82,7 +82,7 @@