From 6b687a1890b5e0ce600cddb3e40ce2fd8277f9f2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 5 Nov 2018 22:22:27 +0100 Subject: [PATCH] add handling for local contact photo storing/retrieving --- .../pro/helpers/LocalContactsHelper.kt | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt index a103584f..1f05a698 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt @@ -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() @@ -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