add handling for local contact photo storing/retrieving

This commit is contained in:
tibbi 2018-11-05 22:22:27 +01:00
parent f7c1f0ab10
commit 6b687a1890

View File

@ -1,10 +1,11 @@
package com.simplemobiletools.contacts.pro.helpers
import android.app.Activity
import com.simplemobiletools.contacts.pro.extensions.applyRegexFiltering
import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.extensions.contactsDB
import com.simplemobiletools.contacts.pro.extensions.getEmptyContact
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.provider.MediaStore
import com.simplemobiletools.contacts.pro.extensions.*
import com.simplemobiletools.contacts.pro.models.Contact
import com.simplemobiletools.contacts.pro.models.LocalContact
import com.simplemobiletools.contacts.pro.models.Organization
@ -21,6 +22,21 @@ class LocalContactsHelper(val activity: Activity) {
return true
}
private fun getPhotoByteArray(uri: String): ByteArray {
if (uri.isEmpty()) {
return ByteArray(0)
}
val photoUri = Uri.parse(uri)
val bitmap = MediaStore.Images.Media.getBitmap(activity.contentResolver, photoUri)
val thumbnailSize = activity.getPhotoThumbnailSize()
val scaledPhoto = Bitmap.createScaledBitmap(bitmap, thumbnailSize * 2, thumbnailSize * 2, false)
val scaledSizePhotoData = scaledPhoto.getByteArray()
scaledPhoto.recycle()
return scaledSizePhotoData
}
private fun convertLocalContactToContact(localContact: LocalContact): Contact {
val filterDuplicates = activity.config.filterDuplicates
val filteredPhoneNumbers = ArrayList<PhoneNumber>()
@ -28,6 +44,16 @@ class LocalContactsHelper(val activity: Activity) {
localContact.phoneNumbers.mapTo(filteredPhoneNumbers) { PhoneNumber(it.value.applyRegexFiltering(), 0, "") }
}
val contactPhoto = if (localContact.photo == null) {
null
} else {
try {
BitmapFactory.decodeByteArray(localContact.photo, 0, localContact.photo!!.size)
} catch (e: OutOfMemoryError) {
null
}
}
return activity.getEmptyContact().apply {
id = localContact.id!!
prefix = localContact.prefix
@ -45,6 +71,7 @@ class LocalContactsHelper(val activity: Activity) {
starred = localContact.starred
contactId = localContact.id!!
thumbnailUri = ""
photo = contactPhoto
notes = localContact.notes
groups = localContact.groups
organization = Organization(localContact.company, localContact.jobPosition)
@ -63,6 +90,7 @@ class LocalContactsHelper(val activity: Activity) {
surname = contact.surname
suffix = contact.suffix
nickname = contact.nickname
photo = getPhotoByteArray(contact.photoUri)
phoneNumbers = contact.phoneNumbers
emails = contact.emails
events = contact.events