Added a setting to prevent native addressbook integration

This commit is contained in:
Sylvain Berfini 2022-09-20 16:24:30 +02:00
parent b426bd567f
commit 05718aa749
11 changed files with 50 additions and 21 deletions

View file

@ -25,6 +25,7 @@ import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel
@ -148,11 +149,13 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
} }
} }
if (corePreferences.enableNativeAddressBookIntegration) {
if (!PermissionHelper.get().hasReadContactsPermission()) { if (!PermissionHelper.get().hasReadContactsPermission()) {
Log.i("[Chat Room Creation] Asking for READ_CONTACTS permission") Log.i("[Chat Room Creation] Asking for READ_CONTACTS permission")
requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0) requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0)
} }
} }
}
@Deprecated("Deprecated in Java") @Deprecated("Deprecated in Java")
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(

View file

@ -368,6 +368,12 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
} }
} }
override fun onResume() {
super.onResume()
listViewModel.groupChatAvailable.value = LinphoneUtils.isGroupChatAvailable()
}
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) { override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
val list = ArrayList<ChatRoom>() val list = ArrayList<ChatRoom>()
var closeSlidingPane = false var closeSlidingPane = false

View file

@ -39,7 +39,7 @@ class ChatRoomsListViewModel : MessageNotifierViewModel() {
val forwardPending = MutableLiveData<Boolean>() val forwardPending = MutableLiveData<Boolean>()
val groupChatAvailable: Boolean = LinphoneUtils.isGroupChatAvailable() val groupChatAvailable = MutableLiveData<Boolean>()
val chatRoomIndexUpdatedEvent: MutableLiveData<Event<Int>> by lazy { val chatRoomIndexUpdatedEvent: MutableLiveData<Event<Int>> by lazy {
MutableLiveData<Event<Int>>() MutableLiveData<Event<Int>>()
@ -97,6 +97,7 @@ class ChatRoomsListViewModel : MessageNotifierViewModel() {
private var chatRoomsToDeleteCount = 0 private var chatRoomsToDeleteCount = 0
init { init {
groupChatAvailable.value = LinphoneUtils.isGroupChatAvailable()
updateChatRooms() updateChatRooms()
coreContext.core.addListener(listener) coreContext.core.addListener(listener)
coreContext.contactsManager.addListener(contactsListener) coreContext.contactsManager.addListener(contactsListener)

View file

@ -25,6 +25,7 @@ import android.view.View
import androidx.navigation.navGraphViewModels import androidx.navigation.navGraphViewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.conference.viewmodels.ConferenceSchedulingViewModel import org.linphone.activities.main.conference.viewmodels.ConferenceSchedulingViewModel
@ -92,11 +93,13 @@ class ConferenceSchedulingParticipantsListFragment : GenericFragment<ConferenceS
} }
} }
if (corePreferences.enableNativeAddressBookIntegration) {
if (!PermissionHelper.get().hasReadContactsPermission()) { if (!PermissionHelper.get().hasReadContactsPermission()) {
Log.i("[Conference Creation] Asking for READ_CONTACTS permission") Log.i("[Conference Creation] Asking for READ_CONTACTS permission")
requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0) requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0)
} }
} }
}
@Deprecated("Deprecated in Java") @Deprecated("Deprecated in Java")
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(

View file

@ -311,11 +311,13 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
} }
} }
if (corePreferences.enableNativeAddressBookIntegration) {
if (!PermissionHelper.get().hasReadContactsPermission()) { if (!PermissionHelper.get().hasReadContactsPermission()) {
Log.i("[Contacts] Asking for READ_CONTACTS permission") Log.i("[Contacts] Asking for READ_CONTACTS permission")
requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0) requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0)
} }
} }
}
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) { override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
val list = ArrayList<Friend>() val list = ArrayList<Friend>()

View file

@ -38,6 +38,8 @@ class ContactsListViewModel : ViewModel() {
val contactsList = MutableLiveData<ArrayList<ContactViewModel>>() val contactsList = MutableLiveData<ArrayList<ContactViewModel>>()
val nativeAddressBookEnabled = MutableLiveData<Boolean>()
val fetchInProgress = MutableLiveData<Boolean>() val fetchInProgress = MutableLiveData<Boolean>()
private var searchResultsPending: Boolean = false private var searchResultsPending: Boolean = false
private var fastFetchJob: Job? = null private var fastFetchJob: Job? = null
@ -72,6 +74,7 @@ class ContactsListViewModel : ViewModel() {
init { init {
sipContactsSelected.value = coreContext.contactsManager.shouldDisplaySipContactsList() sipContactsSelected.value = coreContext.contactsManager.shouldDisplaySipContactsList()
nativeAddressBookEnabled.value = corePreferences.enableNativeAddressBookIntegration
coreContext.contactsManager.addListener(contactsUpdatedListener) coreContext.contactsManager.addListener(contactsUpdatedListener)
coreContext.contactsManager.magicSearch.addListener(magicSearchListener) coreContext.contactsManager.magicSearch.addListener(magicSearchListener)

View file

@ -88,11 +88,13 @@ class ContactsSettingsFragment : GenericSettingFragment<SettingsContactsFragment
} }
} }
if (corePreferences.enableNativeAddressBookIntegration) {
if (!PermissionHelper.required(requireContext()).hasReadContactsPermission()) { if (!PermissionHelper.required(requireContext()).hasReadContactsPermission()) {
Log.i("[Contacts Settings] Asking for READ_CONTACTS permission") Log.i("[Contacts Settings] Asking for READ_CONTACTS permission")
requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0) requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0)
} }
} }
}
@Deprecated("Deprecated in Java") @Deprecated("Deprecated in Java")
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(

View file

@ -26,6 +26,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.navigation.navGraphViewModels import androidx.navigation.navGraphViewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication import org.linphone.LinphoneApplication
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.voip.viewmodels.ConferenceParticipantsViewModel import org.linphone.activities.voip.viewmodels.ConferenceParticipantsViewModel
@ -104,11 +105,13 @@ class ConferenceAddParticipantsFragment : GenericFragment<VoipConferenceParticip
} }
} }
if (corePreferences.enableNativeAddressBookIntegration) {
if (!PermissionHelper.get().hasReadContactsPermission()) { if (!PermissionHelper.get().hasReadContactsPermission()) {
Log.i("[Conference Add Participants] Asking for READ_CONTACTS permission") Log.i("[Conference Add Participants] Asking for READ_CONTACTS permission")
requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0) requestPermissions(arrayOf(android.Manifest.permission.READ_CONTACTS), 0)
} }
} }
}
@Deprecated("Deprecated in Java") @Deprecated("Deprecated in Java")
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(

View file

@ -488,12 +488,14 @@ class CoreContext(
} }
fun fetchContacts() { fun fetchContacts() {
if (corePreferences.enableNativeAddressBookIntegration) {
if (PermissionHelper.required(context).hasReadContactsPermission()) { if (PermissionHelper.required(context).hasReadContactsPermission()) {
Log.i("[Context] Init contacts loader") Log.i("[Context] Init contacts loader")
val manager = LoaderManager.getInstance(this@CoreContext) val manager = LoaderManager.getInstance(this@CoreContext)
manager.restartLoader(0, null, contactLoader) manager.restartLoader(0, null, contactLoader)
} }
} }
}
fun newAccountConfigured(isLinphoneAccount: Boolean) { fun newAccountConfigured(isLinphoneAccount: Boolean) {
Log.i("[Context] A new ${if (isLinphoneAccount) AppUtils.getString(R.string.app_name) else "third-party"} account has been configured") Log.i("[Context] A new ${if (isLinphoneAccount) AppUtils.getString(R.string.app_name) else "third-party"} account has been configured")

View file

@ -434,6 +434,9 @@ class CorePreferences constructor(private val context: Context) {
val allowMultipleFilesAndTextInSameMessage: Boolean val allowMultipleFilesAndTextInSameMessage: Boolean
get() = config.getBool("app", "allow_multiple_files_and_text_in_same_message", true) get() = config.getBool("app", "allow_multiple_files_and_text_in_same_message", true)
val enableNativeAddressBookIntegration: Boolean
get() = config.getBool("app", "enable_native_address_book", true)
val fetchContactsFromDefaultDirectory: Boolean val fetchContactsFromDefaultDirectory: Boolean
get() = config.getBool("app", "fetch_contacts_from_default_directory", true) get() = config.getBool("app", "fetch_contacts_from_default_directory", true)

View file

@ -102,7 +102,8 @@
android:layout_weight="0.2" android:layout_weight="0.2"
android:background="?attr/button_background_drawable" android:background="?attr/button_background_drawable"
android:padding="15dp" android:padding="15dp"
android:src="@drawable/contact_add" /> android:src="@drawable/contact_add"
android:visibility="@{viewModel.nativeAddressBookEnabled ? View.VISIBLE : View.GONE}"/>
<ImageView <ImageView
android:onClick="@{editClickListener}" android:onClick="@{editClickListener}"