mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-04-23 19:48:30 +00:00
Trying to cache native friend requests
This commit is contained in:
parent
8746a2646a
commit
897312831e
1 changed files with 40 additions and 0 deletions
|
|
@ -66,6 +66,7 @@ class ContactsManager @UiThread constructor() {
|
||||||
private const val TAG = "[Contacts Manager]"
|
private const val TAG = "[Contacts Manager]"
|
||||||
|
|
||||||
private const val DELAY_BEFORE_RELOADING_CONTACTS_AFTER_PRESENCE_RECEIVED = 1000L // 1 second
|
private const val DELAY_BEFORE_RELOADING_CONTACTS_AFTER_PRESENCE_RECEIVED = 1000L // 1 second
|
||||||
|
private const val FRIEND_LIST_TEMPORARY_STORED = "TempNativeContacts"
|
||||||
}
|
}
|
||||||
|
|
||||||
private var nativeContactsLoaded = false
|
private var nativeContactsLoaded = false
|
||||||
|
|
@ -76,6 +77,8 @@ class ContactsManager @UiThread constructor() {
|
||||||
private val unknownContactsAvatarsMap = hashMapOf<String, ContactAvatarModel>()
|
private val unknownContactsAvatarsMap = hashMapOf<String, ContactAvatarModel>()
|
||||||
private val conferenceAvatarMap = hashMapOf<String, ContactAvatarModel>()
|
private val conferenceAvatarMap = hashMapOf<String, ContactAvatarModel>()
|
||||||
|
|
||||||
|
private val unknownAndroidContactsMap = arrayListOf<String>()
|
||||||
|
|
||||||
private val coroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
private val coroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
||||||
private var reloadContactsJob: Job? = null
|
private var reloadContactsJob: Job? = null
|
||||||
|
|
||||||
|
|
@ -201,12 +204,23 @@ class ContactsManager @UiThread constructor() {
|
||||||
nativeContactsLoaded = true
|
nativeContactsLoaded = true
|
||||||
Log.i("$TAG Native contacts have been loaded, cleaning avatars maps")
|
Log.i("$TAG Native contacts have been loaded, cleaning avatars maps")
|
||||||
|
|
||||||
|
val core = coreContext.core
|
||||||
|
val found = core.getFriendListByName(FRIEND_LIST_TEMPORARY_STORED)
|
||||||
|
if (found != null) {
|
||||||
|
val count = found.friends.size
|
||||||
|
Log.i(
|
||||||
|
"$TAG Found temporary friend list with [$count] friends, removing it as no longer necessary"
|
||||||
|
)
|
||||||
|
core.removeFriendList(found)
|
||||||
|
}
|
||||||
|
|
||||||
knownContactsAvatarsMap.values.forEach(ContactAvatarModel::destroy)
|
knownContactsAvatarsMap.values.forEach(ContactAvatarModel::destroy)
|
||||||
knownContactsAvatarsMap.clear()
|
knownContactsAvatarsMap.clear()
|
||||||
unknownContactsAvatarsMap.values.forEach(ContactAvatarModel::destroy)
|
unknownContactsAvatarsMap.values.forEach(ContactAvatarModel::destroy)
|
||||||
unknownContactsAvatarsMap.clear()
|
unknownContactsAvatarsMap.clear()
|
||||||
conferenceAvatarMap.values.forEach(ContactAvatarModel::destroy)
|
conferenceAvatarMap.values.forEach(ContactAvatarModel::destroy)
|
||||||
conferenceAvatarMap.clear()
|
conferenceAvatarMap.clear()
|
||||||
|
unknownAndroidContactsMap.clear()
|
||||||
|
|
||||||
notifyContactsListChanged()
|
notifyContactsListChanged()
|
||||||
|
|
||||||
|
|
@ -417,8 +431,15 @@ class ContactsManager @UiThread constructor() {
|
||||||
)
|
)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
if (unknownAndroidContactsMap.contains(address)) {
|
||||||
|
Log.d(
|
||||||
|
"$TAG Address [$address] already looked in Android native contacts and not found, do not do it again"
|
||||||
|
)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
val context = coreContext.context
|
val context = coreContext.context
|
||||||
|
val core = coreContext.core
|
||||||
if (ActivityCompat.checkSelfPermission(
|
if (ActivityCompat.checkSelfPermission(
|
||||||
context,
|
context,
|
||||||
Manifest.permission.READ_CONTACTS
|
Manifest.permission.READ_CONTACTS
|
||||||
|
|
@ -428,6 +449,16 @@ class ContactsManager @UiThread constructor() {
|
||||||
"$TAG Looking for native contact with address [$address] ${if (searchAsPhoneNumber) "or phone number [$username]" else ""}"
|
"$TAG Looking for native contact with address [$address] ${if (searchAsPhoneNumber) "or phone number [$username]" else ""}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val temporaryFriendList = core.getFriendListByName(FRIEND_LIST_TEMPORARY_STORED) ?: core.createFriendList()
|
||||||
|
if (temporaryFriendList.displayName.isNullOrEmpty()) {
|
||||||
|
temporaryFriendList.isDatabaseStorageEnabled = false
|
||||||
|
temporaryFriendList.displayName = FRIEND_LIST_TEMPORARY_STORED
|
||||||
|
core.addFriendList(temporaryFriendList)
|
||||||
|
Log.i(
|
||||||
|
"$TAG Created temporary friend list with name [$FRIEND_LIST_TEMPORARY_STORED]"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val selection = if (searchAsPhoneNumber) {
|
val selection = if (searchAsPhoneNumber) {
|
||||||
"${ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER} LIKE ? OR ${ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS} LIKE ? OR ${ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS} LIKE ? OR ${ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS} LIKE ?"
|
"${ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER} LIKE ? OR ${ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS} LIKE ? OR ${ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS} LIKE ? OR ${ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS} LIKE ?"
|
||||||
|
|
@ -455,6 +486,13 @@ class ContactsManager @UiThread constructor() {
|
||||||
val friend = coreContext.core.createFriend()
|
val friend = coreContext.core.createFriend()
|
||||||
friend.edit()
|
friend.edit()
|
||||||
|
|
||||||
|
val parsedAddress = core.interpretUrl(address, false)
|
||||||
|
if (parsedAddress != null) {
|
||||||
|
friend.address = parsedAddress
|
||||||
|
} else {
|
||||||
|
Log.e("$TAG Failed to parse [$address] as Address!")
|
||||||
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
val id: String =
|
val id: String =
|
||||||
cursor.getString(
|
cursor.getString(
|
||||||
|
|
@ -492,6 +530,7 @@ class ContactsManager @UiThread constructor() {
|
||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
|
|
||||||
friend.done()
|
friend.done()
|
||||||
|
temporaryFriendList.addLocalFriend(friend)
|
||||||
|
|
||||||
Log.d("$TAG Found native contact [${friend.name}] with address [$address]")
|
Log.d("$TAG Found native contact [${friend.name}] with address [$address]")
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
@ -499,6 +538,7 @@ class ContactsManager @UiThread constructor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.w("$TAG Failed to find native contact with address [$address]")
|
Log.w("$TAG Failed to find native contact with address [$address]")
|
||||||
|
unknownAndroidContactsMap.add(address)
|
||||||
return null
|
return null
|
||||||
} catch (e: IllegalArgumentException) {
|
} catch (e: IllegalArgumentException) {
|
||||||
Log.e("$TAG Failed to search for native contact with address [$address]: $e")
|
Log.e("$TAG Failed to search for native contact with address [$address]: $e")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue