mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
moving some Activity extension responsibilities to Context
This commit is contained in:
@ -51,7 +51,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.simplemobiletools:commons:5.4.7'
|
implementation 'com.simplemobiletools:commons:5.5.0'
|
||||||
implementation 'joda-time:joda-time:2.10.1'
|
implementation 'joda-time:joda-time:2.10.1'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
|
||||||
implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.4'
|
implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.4'
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package com.simplemobiletools.contacts.pro.extensions
|
package com.simplemobiletools.contacts.pro.extensions
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.ContactsContract
|
|
||||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.sharePathIntent
|
import com.simplemobiletools.commons.extensions.sharePathIntent
|
||||||
@ -17,8 +15,6 @@ import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
|||||||
import com.simplemobiletools.contacts.pro.dialogs.CallConfirmationDialog
|
import com.simplemobiletools.contacts.pro.dialogs.CallConfirmationDialog
|
||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.contacts.pro.models.Contact
|
||||||
import com.simplemobiletools.contacts.pro.models.ContactSource
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
fun SimpleActivity.startCallIntent(recipient: String) {
|
fun SimpleActivity.startCallIntent(recipient: String) {
|
||||||
handlePermission(PERMISSION_CALL_PHONE) {
|
handlePermission(PERMISSION_CALL_PHONE) {
|
||||||
@ -93,13 +89,6 @@ fun SimpleActivity.showContactSourcePicker(currentSource: String, callback: (new
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun SimpleActivity.getPublicContactSource(source: String): String {
|
|
||||||
return when (source) {
|
|
||||||
config.localAccountName -> getString(R.string.phone_storage)
|
|
||||||
SMT_PRIVATE -> getString(R.string.phone_storage_hidden)
|
|
||||||
else -> source
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun BaseSimpleActivity.shareContacts(contacts: ArrayList<Contact>) {
|
fun BaseSimpleActivity.shareContacts(contacts: ArrayList<Contact>) {
|
||||||
val file = getTempFile()
|
val file = getTempFile()
|
||||||
@ -117,96 +106,6 @@ fun BaseSimpleActivity.shareContacts(contacts: ArrayList<Contact>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun BaseSimpleActivity.sendSMSToContacts(contacts: ArrayList<Contact>) {
|
|
||||||
val numbers = StringBuilder()
|
|
||||||
contacts.forEach {
|
|
||||||
val number = it.phoneNumbers.firstOrNull { it.type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE }
|
|
||||||
?: it.phoneNumbers.firstOrNull()
|
|
||||||
if (number != null) {
|
|
||||||
numbers.append("${number.value};")
|
|
||||||
}
|
|
||||||
|
|
||||||
val uriString = "smsto:${numbers.toString().trimEnd(';')}"
|
|
||||||
Intent(Intent.ACTION_SENDTO, Uri.parse(uriString)).apply {
|
|
||||||
if (resolveActivity(packageManager) != null) {
|
|
||||||
startActivity(this)
|
|
||||||
} else {
|
|
||||||
toast(R.string.no_app_found)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun BaseSimpleActivity.sendEmailToContacts(contacts: ArrayList<Contact>) {
|
|
||||||
val emails = ArrayList<String>()
|
|
||||||
contacts.forEach {
|
|
||||||
it.emails.forEach {
|
|
||||||
if (it.value.isNotEmpty()) {
|
|
||||||
emails.add(it.value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Intent(Intent.ACTION_SEND_MULTIPLE).apply {
|
|
||||||
type = "message/rfc822"
|
|
||||||
putExtra(Intent.EXTRA_EMAIL, emails.toTypedArray())
|
|
||||||
if (resolveActivity(packageManager) != null) {
|
|
||||||
startActivity(this)
|
|
||||||
} else {
|
|
||||||
toast(R.string.no_app_found)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun BaseSimpleActivity.getTempFile(): File? {
|
|
||||||
val folder = File(cacheDir, "contacts")
|
|
||||||
if (!folder.exists()) {
|
|
||||||
if (!folder.mkdir()) {
|
|
||||||
toast(R.string.unknown_error_occurred)
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return File(folder, "contacts.vcf")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun BaseSimpleActivity.addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
|
||||||
val publicContacts = contacts.filter { it.source != SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
|
||||||
val privateContacts = contacts.filter { it.source == SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
|
||||||
if (publicContacts.isNotEmpty()) {
|
|
||||||
ContactsHelper(this).addContactsToGroup(publicContacts, groupId)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (privateContacts.isNotEmpty()) {
|
|
||||||
LocalContactsHelper(this).addContactsToGroup(privateContacts, groupId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun BaseSimpleActivity.removeContactsFromGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
|
||||||
val publicContacts = contacts.filter { it.source != SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
|
||||||
val privateContacts = contacts.filter { it.source == SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
|
||||||
if (publicContacts.isNotEmpty() && hasContactPermissions()) {
|
|
||||||
ContactsHelper(this).removeContactsFromGroup(publicContacts, groupId)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (privateContacts.isNotEmpty()) {
|
|
||||||
LocalContactsHelper(this).removeContactsFromGroup(privateContacts, groupId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun BaseSimpleActivity.getContactPublicUri(contact: Contact): Uri {
|
|
||||||
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString())
|
|
||||||
return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Activity.getVisibleContactSources(): ArrayList<String> {
|
|
||||||
val sources = ContactsHelper(this).getDeviceContactSources()
|
|
||||||
sources.add(ContactSource(getString(R.string.phone_storage_hidden), SMT_PRIVATE))
|
|
||||||
val sourceNames = ArrayList(sources).map { if (it.type == SMT_PRIVATE) SMT_PRIVATE else it.name }.toMutableList() as ArrayList<String>
|
|
||||||
sourceNames.removeAll(config.ignoredContactSources)
|
|
||||||
return sourceNames
|
|
||||||
}
|
|
||||||
|
|
||||||
fun SimpleActivity.contactClicked(contact: Contact) {
|
fun SimpleActivity.contactClicked(contact: Contact) {
|
||||||
when (config.onContactClick) {
|
when (config.onContactClick) {
|
||||||
ON_CLICK_CALL_CONTACT -> callContact(contact)
|
ON_CLICK_CALL_CONTACT -> callContact(contact)
|
||||||
|
@ -16,13 +16,11 @@ import com.simplemobiletools.contacts.pro.R
|
|||||||
import com.simplemobiletools.contacts.pro.activities.EditContactActivity
|
import com.simplemobiletools.contacts.pro.activities.EditContactActivity
|
||||||
import com.simplemobiletools.contacts.pro.activities.ViewContactActivity
|
import com.simplemobiletools.contacts.pro.activities.ViewContactActivity
|
||||||
import com.simplemobiletools.contacts.pro.databases.ContactsDatabase
|
import com.simplemobiletools.contacts.pro.databases.ContactsDatabase
|
||||||
import com.simplemobiletools.contacts.pro.helpers.CONTACT_ID
|
import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.helpers.Config
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.IS_PRIVATE
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.SMT_PRIVATE
|
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.ContactsDao
|
import com.simplemobiletools.contacts.pro.interfaces.ContactsDao
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.GroupsDao
|
import com.simplemobiletools.contacts.pro.interfaces.GroupsDao
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.contacts.pro.models.Contact
|
||||||
|
import com.simplemobiletools.contacts.pro.models.ContactSource
|
||||||
import com.simplemobiletools.contacts.pro.models.Organization
|
import com.simplemobiletools.contacts.pro.models.Organization
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@ -184,3 +182,101 @@ fun Context.getPhotoThumbnailSize(): Int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun Context.hasContactPermissions() = hasPermission(PERMISSION_READ_CONTACTS) && hasPermission(PERMISSION_WRITE_CONTACTS)
|
fun Context.hasContactPermissions() = hasPermission(PERMISSION_READ_CONTACTS) && hasPermission(PERMISSION_WRITE_CONTACTS)
|
||||||
|
|
||||||
|
fun Context.getPublicContactSource(source: String): String {
|
||||||
|
return when (source) {
|
||||||
|
config.localAccountName -> getString(R.string.phone_storage)
|
||||||
|
SMT_PRIVATE -> getString(R.string.phone_storage_hidden)
|
||||||
|
else -> source
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.sendSMSToContacts(contacts: ArrayList<Contact>) {
|
||||||
|
val numbers = StringBuilder()
|
||||||
|
contacts.forEach {
|
||||||
|
val number = it.phoneNumbers.firstOrNull { it.type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE }
|
||||||
|
?: it.phoneNumbers.firstOrNull()
|
||||||
|
if (number != null) {
|
||||||
|
numbers.append("${number.value};")
|
||||||
|
}
|
||||||
|
|
||||||
|
val uriString = "smsto:${numbers.toString().trimEnd(';')}"
|
||||||
|
Intent(Intent.ACTION_SENDTO, Uri.parse(uriString)).apply {
|
||||||
|
if (resolveActivity(packageManager) != null) {
|
||||||
|
startActivity(this)
|
||||||
|
} else {
|
||||||
|
toast(R.string.no_app_found)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.sendEmailToContacts(contacts: ArrayList<Contact>) {
|
||||||
|
val emails = ArrayList<String>()
|
||||||
|
contacts.forEach {
|
||||||
|
it.emails.forEach {
|
||||||
|
if (it.value.isNotEmpty()) {
|
||||||
|
emails.add(it.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Intent(Intent.ACTION_SEND_MULTIPLE).apply {
|
||||||
|
type = "message/rfc822"
|
||||||
|
putExtra(Intent.EXTRA_EMAIL, emails.toTypedArray())
|
||||||
|
if (resolveActivity(packageManager) != null) {
|
||||||
|
startActivity(this)
|
||||||
|
} else {
|
||||||
|
toast(R.string.no_app_found)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.getTempFile(): File? {
|
||||||
|
val folder = File(cacheDir, "contacts")
|
||||||
|
if (!folder.exists()) {
|
||||||
|
if (!folder.mkdir()) {
|
||||||
|
toast(R.string.unknown_error_occurred)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return File(folder, "contacts.vcf")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
||||||
|
val publicContacts = contacts.filter { it.source != SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
||||||
|
val privateContacts = contacts.filter { it.source == SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
||||||
|
if (publicContacts.isNotEmpty()) {
|
||||||
|
ContactsHelper(this).addContactsToGroup(publicContacts, groupId)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (privateContacts.isNotEmpty()) {
|
||||||
|
LocalContactsHelper(this).addContactsToGroup(privateContacts, groupId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.removeContactsFromGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
||||||
|
val publicContacts = contacts.filter { it.source != SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
||||||
|
val privateContacts = contacts.filter { it.source == SMT_PRIVATE }.toMutableList() as ArrayList<Contact>
|
||||||
|
if (publicContacts.isNotEmpty() && hasContactPermissions()) {
|
||||||
|
ContactsHelper(this).removeContactsFromGroup(publicContacts, groupId)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (privateContacts.isNotEmpty()) {
|
||||||
|
LocalContactsHelper(this).removeContactsFromGroup(privateContacts, groupId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.getContactPublicUri(contact: Contact): Uri {
|
||||||
|
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString())
|
||||||
|
return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.getVisibleContactSources(): ArrayList<String> {
|
||||||
|
val sources = ContactsHelper(this).getDeviceContactSources()
|
||||||
|
sources.add(ContactSource(getString(R.string.phone_storage_hidden), SMT_PRIVATE))
|
||||||
|
val sourceNames = ArrayList(sources).map { if (it.type == SMT_PRIVATE) SMT_PRIVATE else it.name }.toMutableList() as ArrayList<String>
|
||||||
|
sourceNames.removeAll(config.ignoredContactSources)
|
||||||
|
return sourceNames
|
||||||
|
}
|
||||||
|
@ -3,11 +3,12 @@ package com.simplemobiletools.contacts.pro.helpers
|
|||||||
import android.accounts.Account
|
import android.accounts.Account
|
||||||
import android.accounts.AccountManager
|
import android.accounts.AccountManager
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Activity
|
|
||||||
import android.content.*
|
import android.content.*
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
import android.provider.CallLog
|
import android.provider.CallLog
|
||||||
import android.provider.ContactsContract
|
import android.provider.ContactsContract
|
||||||
import android.provider.ContactsContract.CommonDataKinds
|
import android.provider.ContactsContract.CommonDataKinds
|
||||||
@ -26,24 +27,24 @@ import java.text.SimpleDateFormat
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
class ContactsHelper(val activity: Activity) {
|
class ContactsHelper(val context: Context) {
|
||||||
private val BATCH_SIZE = 100
|
private val BATCH_SIZE = 100
|
||||||
private var displayContactSources = ArrayList<String>()
|
private var displayContactSources = ArrayList<String>()
|
||||||
|
|
||||||
fun getContacts(callback: (ArrayList<Contact>) -> Unit) {
|
fun getContacts(callback: (ArrayList<Contact>) -> Unit) {
|
||||||
Thread {
|
Thread {
|
||||||
val contacts = SparseArray<Contact>()
|
val contacts = SparseArray<Contact>()
|
||||||
displayContactSources = activity.getVisibleContactSources()
|
displayContactSources = context.getVisibleContactSources()
|
||||||
getDeviceContacts(contacts)
|
getDeviceContacts(contacts)
|
||||||
|
|
||||||
if (displayContactSources.contains(SMT_PRIVATE)) {
|
if (displayContactSources.contains(SMT_PRIVATE)) {
|
||||||
LocalContactsHelper(activity).getAllContacts().forEach {
|
LocalContactsHelper(context).getAllContacts().forEach {
|
||||||
contacts.put(it.id, it)
|
contacts.put(it.id, it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val contactsSize = contacts.size()
|
val contactsSize = contacts.size()
|
||||||
val showOnlyContactsWithNumbers = activity.config.showOnlyContactsWithNumbers
|
val showOnlyContactsWithNumbers = context.config.showOnlyContactsWithNumbers
|
||||||
var tempContacts = ArrayList<Contact>(contactsSize)
|
var tempContacts = ArrayList<Contact>(contactsSize)
|
||||||
val resultContacts = ArrayList<Contact>(contactsSize)
|
val resultContacts = ArrayList<Contact>(contactsSize)
|
||||||
|
|
||||||
@ -57,7 +58,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
contacts.valueAt(it)
|
contacts.valueAt(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activity.config.filterDuplicates) {
|
if (context.config.filterDuplicates) {
|
||||||
tempContacts = tempContacts.distinctBy {
|
tempContacts = tempContacts.distinctBy {
|
||||||
it.getHashToCompare()
|
it.getHashToCompare()
|
||||||
} as ArrayList<Contact>
|
} as ArrayList<Contact>
|
||||||
@ -82,11 +83,11 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
resultContacts.firstOrNull { it.contactId == key }?.groups = groups.valueAt(i)
|
resultContacts.firstOrNull { it.contactId == key }?.groups = groups.valueAt(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
Contact.sorting = activity.config.sorting
|
Contact.sorting = context.config.sorting
|
||||||
Contact.startWithSurname = activity.config.startNameWithSurname
|
Contact.startWithSurname = context.config.startNameWithSurname
|
||||||
resultContacts.sort()
|
resultContacts.sort()
|
||||||
|
|
||||||
activity.runOnUiThread {
|
Handler(Looper.getMainLooper()).post {
|
||||||
callback(resultContacts)
|
callback(resultContacts)
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
@ -101,19 +102,19 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
callback(getContactWithId(id, false))
|
callback(getContactWithId(id, false))
|
||||||
return@Thread
|
return@Thread
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(LocalContactsHelper(activity).getContactWithNumber(number))
|
callback(LocalContactsHelper(context).getContactWithNumber(number))
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +128,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
val sources = HashSet<ContactSource>()
|
val sources = HashSet<ContactSource>()
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, null, null, null)
|
cursor = context.contentResolver.query(uri, projection, null, null, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val name = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: ""
|
val name = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: ""
|
||||||
@ -145,7 +146,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getDeviceContacts(contacts: SparseArray<Contact>) {
|
private fun getDeviceContacts(contacts: SparseArray<Contact>) {
|
||||||
if (!activity.hasContactPermissions()) {
|
if (!context.hasContactPermissions()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,7 +158,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -188,7 +189,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -276,7 +277,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -294,7 +295,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -315,7 +316,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -324,7 +325,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -347,7 +348,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -363,7 +364,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -386,7 +387,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -402,7 +403,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -425,7 +426,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -441,7 +442,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -463,7 +464,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -478,7 +479,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -499,7 +500,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -508,7 +509,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -530,7 +531,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -545,7 +546,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -566,7 +567,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
@ -580,7 +581,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -590,7 +591,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
private fun getContactGroups(storedGroups: ArrayList<Group>, contactId: Int? = null): SparseArray<ArrayList<Group>> {
|
private fun getContactGroups(storedGroups: ArrayList<Group>, contactId: Int? = null): SparseArray<ArrayList<Group>> {
|
||||||
val groups = SparseArray<ArrayList<Group>>()
|
val groups = SparseArray<ArrayList<Group>>()
|
||||||
if (!activity.hasContactPermissions()) {
|
if (!context.hasContactPermissions()) {
|
||||||
return groups
|
return groups
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -605,7 +606,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
||||||
@ -620,7 +621,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -673,7 +674,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
fun getStoredGroups(callback: (ArrayList<Group>) -> Unit) {
|
fun getStoredGroups(callback: (ArrayList<Group>) -> Unit) {
|
||||||
Thread {
|
Thread {
|
||||||
val groups = getStoredGroupsSync()
|
val groups = getStoredGroupsSync()
|
||||||
activity.runOnUiThread {
|
Handler(Looper.getMainLooper()).post {
|
||||||
callback(groups)
|
callback(groups)
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
@ -681,13 +682,13 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
fun getStoredGroupsSync(): ArrayList<Group> {
|
fun getStoredGroupsSync(): ArrayList<Group> {
|
||||||
val groups = getDeviceStoredGroups()
|
val groups = getDeviceStoredGroups()
|
||||||
groups.addAll(activity.groupsDB.getGroups())
|
groups.addAll(context.groupsDB.getGroups())
|
||||||
return groups
|
return groups
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getDeviceStoredGroups(): ArrayList<Group> {
|
fun getDeviceStoredGroups(): ArrayList<Group> {
|
||||||
val groups = ArrayList<Group>()
|
val groups = ArrayList<Group>()
|
||||||
if (!activity.hasContactPermissions()) {
|
if (!context.hasContactPermissions()) {
|
||||||
return groups
|
return groups
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,7 +704,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getLongValue(ContactsContract.Groups._ID)
|
val id = cursor.getLongValue(ContactsContract.Groups._ID)
|
||||||
@ -718,7 +719,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
@ -728,7 +729,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
fun createNewGroup(title: String, accountName: String, accountType: String): Group? {
|
fun createNewGroup(title: String, accountName: String, accountType: String): Group? {
|
||||||
if (accountType == SMT_PRIVATE) {
|
if (accountType == SMT_PRIVATE) {
|
||||||
val newGroup = Group(null, title)
|
val newGroup = Group(null, title)
|
||||||
val id = activity.groupsDB.insertOrUpdate(newGroup)
|
val id = context.groupsDB.insertOrUpdate(newGroup)
|
||||||
newGroup.id = id
|
newGroup.id = id
|
||||||
return newGroup
|
return newGroup
|
||||||
}
|
}
|
||||||
@ -743,11 +744,11 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val results = activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
val results = context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
val rawId = ContentUris.parseId(results[0].uri)
|
val rawId = ContentUris.parseId(results[0].uri)
|
||||||
return Group(rawId, title)
|
return Group(rawId, title)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -763,9 +764,9 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -778,9 +779,9 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
operations.add(ContentProviderOperation.newDelete(uri).build())
|
operations.add(ContentProviderOperation.newDelete(uri).build())
|
||||||
|
|
||||||
try {
|
try {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,7 +789,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
return null
|
return null
|
||||||
} else if (isLocalPrivate) {
|
} else if (isLocalPrivate) {
|
||||||
return LocalContactsHelper(activity).getContactWithId(id)
|
return LocalContactsHelper(context).getContactWithId(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
val selection = "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?"
|
val selection = "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?"
|
||||||
@ -808,7 +809,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
val projection = getContactProjection()
|
val projection = getContactProjection()
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID)
|
||||||
val prefix = cursor.getStringValue(CommonDataKinds.StructuredName.PREFIX) ?: ""
|
val prefix = cursor.getStringValue(CommonDataKinds.StructuredName.PREFIX) ?: ""
|
||||||
@ -849,22 +850,22 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
private fun getContactSourcesSync(): ArrayList<ContactSource> {
|
private fun getContactSourcesSync(): ArrayList<ContactSource> {
|
||||||
val sources = getDeviceContactSources()
|
val sources = getDeviceContactSources()
|
||||||
sources.add(ContactSource(activity.getString(R.string.phone_storage_hidden), SMT_PRIVATE))
|
sources.add(ContactSource(context.getString(R.string.phone_storage_hidden), SMT_PRIVATE))
|
||||||
return ArrayList(sources)
|
return ArrayList(sources)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getDeviceContactSources(): LinkedHashSet<ContactSource> {
|
fun getDeviceContactSources(): LinkedHashSet<ContactSource> {
|
||||||
val sources = LinkedHashSet<ContactSource>()
|
val sources = LinkedHashSet<ContactSource>()
|
||||||
if (!activity.hasContactPermissions()) {
|
if (!context.hasContactPermissions()) {
|
||||||
return sources
|
return sources
|
||||||
}
|
}
|
||||||
|
|
||||||
val accounts = AccountManager.get(activity).accounts
|
val accounts = AccountManager.get(context).accounts
|
||||||
accounts.forEach {
|
accounts.forEach {
|
||||||
if (ContentResolver.getIsSyncable(it, ContactsContract.AUTHORITY) == 1) {
|
if (ContentResolver.getIsSyncable(it, ContactsContract.AUTHORITY) == 1) {
|
||||||
val contactSource = ContactSource(it.name, it.type)
|
val contactSource = ContactSource(it.name, it.type)
|
||||||
if (it.type == TELEGRAM_PACKAGE) {
|
if (it.type == TELEGRAM_PACKAGE) {
|
||||||
contactSource.name += " (${activity.getString(R.string.telegram)})"
|
contactSource.name += " (${context.getString(R.string.telegram)})"
|
||||||
}
|
}
|
||||||
sources.add(contactSource)
|
sources.add(contactSource)
|
||||||
}
|
}
|
||||||
@ -875,7 +876,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
sources.addAll(contentResolverAccounts)
|
sources.addAll(contentResolverAccounts)
|
||||||
|
|
||||||
if (sources.isEmpty() && activity.config.localAccountName.isEmpty() && activity.config.localAccountType.isEmpty()) {
|
if (sources.isEmpty() && context.config.localAccountName.isEmpty() && context.config.localAccountType.isEmpty()) {
|
||||||
sources.add(ContactSource("", ""))
|
sources.add(ContactSource("", ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -899,7 +900,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
private fun getSortString(): String {
|
private fun getSortString(): String {
|
||||||
val sorting = activity.config.sorting
|
val sorting = context.config.sorting
|
||||||
var sort = when {
|
var sort = when {
|
||||||
sorting and SORT_BY_FIRST_NAME != 0 -> "${CommonDataKinds.StructuredName.GIVEN_NAME} COLLATE NOCASE"
|
sorting and SORT_BY_FIRST_NAME != 0 -> "${CommonDataKinds.StructuredName.GIVEN_NAME} COLLATE NOCASE"
|
||||||
sorting and SORT_BY_MIDDLE_NAME != 0 -> "${CommonDataKinds.StructuredName.MIDDLE_NAME} COLLATE NOCASE"
|
sorting and SORT_BY_MIDDLE_NAME != 0 -> "${CommonDataKinds.StructuredName.MIDDLE_NAME} COLLATE NOCASE"
|
||||||
@ -921,7 +922,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, id.toString())
|
val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, id.toString())
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
return cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
return cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
||||||
}
|
}
|
||||||
@ -933,9 +934,9 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun updateContact(contact: Contact, photoUpdateStatus: Int): Boolean {
|
fun updateContact(contact: Contact, photoUpdateStatus: Int): Boolean {
|
||||||
activity.toast(R.string.updating)
|
context.toast(R.string.updating)
|
||||||
if (contact.source == SMT_PRIVATE) {
|
if (contact.source == SMT_PRIVATE) {
|
||||||
return LocalContactsHelper(activity).insertOrUpdateContact(contact)
|
return LocalContactsHelper(context).insertOrUpdateContact(contact)
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -1149,9 +1150,9 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contact.contactId.toString())
|
val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contact.contactId.toString())
|
||||||
val contentValues = ContentValues(1)
|
val contentValues = ContentValues(1)
|
||||||
contentValues.put(ContactsContract.Contacts.STARRED, contact.starred)
|
contentValues.put(ContactsContract.Contacts.STARRED, contact.starred)
|
||||||
activity.contentResolver.update(uri, contentValues, null, null)
|
context.contentResolver.update(uri, contentValues, null, null)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
// photo
|
// photo
|
||||||
@ -1160,10 +1161,10 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
PHOTO_REMOVED -> removePhoto(contact, operations)
|
PHOTO_REMOVED -> removePhoto(contact, operations)
|
||||||
}
|
}
|
||||||
|
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1171,9 +1172,9 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
private fun addPhoto(contact: Contact, operations: ArrayList<ContentProviderOperation>): ArrayList<ContentProviderOperation> {
|
private fun addPhoto(contact: Contact, operations: ArrayList<ContentProviderOperation>): ArrayList<ContentProviderOperation> {
|
||||||
if (contact.photoUri.isNotEmpty()) {
|
if (contact.photoUri.isNotEmpty()) {
|
||||||
val photoUri = Uri.parse(contact.photoUri)
|
val photoUri = Uri.parse(contact.photoUri)
|
||||||
val bitmap = MediaStore.Images.Media.getBitmap(activity.contentResolver, photoUri)
|
val bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, photoUri)
|
||||||
|
|
||||||
val thumbnailSize = activity.getPhotoThumbnailSize()
|
val thumbnailSize = context.getPhotoThumbnailSize()
|
||||||
val scaledPhoto = Bitmap.createScaledBitmap(bitmap, thumbnailSize, thumbnailSize, false)
|
val scaledPhoto = Bitmap.createScaledBitmap(bitmap, thumbnailSize, thumbnailSize, false)
|
||||||
val scaledSizePhotoData = scaledPhoto.getByteArray()
|
val scaledSizePhotoData = scaledPhoto.getByteArray()
|
||||||
scaledPhoto.recycle()
|
scaledPhoto.recycle()
|
||||||
@ -1215,15 +1216,15 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (operations.size % BATCH_SIZE == 0) {
|
if (operations.size % BATCH_SIZE == 0) {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
operations.clear()
|
operations.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1238,16 +1239,16 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (operations.size % BATCH_SIZE == 0) {
|
if (operations.size % BATCH_SIZE == 0) {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
operations.clear()
|
operations.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun insertContact(contact: Contact): Boolean {
|
fun insertContact(contact: Contact): Boolean {
|
||||||
if (contact.source == SMT_PRIVATE) {
|
if (contact.source == SMT_PRIVATE) {
|
||||||
return LocalContactsHelper(activity).insertOrUpdateContact(contact)
|
return LocalContactsHelper(context).insertOrUpdateContact(contact)
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -1386,9 +1387,9 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
var scaledSizePhotoData: ByteArray?
|
var scaledSizePhotoData: ByteArray?
|
||||||
if (contact.photoUri.isNotEmpty()) {
|
if (contact.photoUri.isNotEmpty()) {
|
||||||
val photoUri = Uri.parse(contact.photoUri)
|
val photoUri = Uri.parse(contact.photoUri)
|
||||||
val bitmap = MediaStore.Images.Media.getBitmap(activity.contentResolver, photoUri)
|
val bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, photoUri)
|
||||||
|
|
||||||
val thumbnailSize = activity.getPhotoThumbnailSize()
|
val thumbnailSize = context.getPhotoThumbnailSize()
|
||||||
val scaledPhoto = Bitmap.createScaledBitmap(bitmap, thumbnailSize, thumbnailSize, false)
|
val scaledPhoto = Bitmap.createScaledBitmap(bitmap, thumbnailSize, thumbnailSize, false)
|
||||||
scaledSizePhotoData = scaledPhoto.getByteArray()
|
scaledSizePhotoData = scaledPhoto.getByteArray()
|
||||||
|
|
||||||
@ -1406,7 +1407,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
val results: Array<ContentProviderResult>
|
val results: Array<ContentProviderResult>
|
||||||
try {
|
try {
|
||||||
results = activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
results = context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
} finally {
|
} finally {
|
||||||
scaledSizePhotoData = null
|
scaledSizePhotoData = null
|
||||||
}
|
}
|
||||||
@ -1423,12 +1424,12 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, userId.toString())
|
val uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, userId.toString())
|
||||||
val contentValues = ContentValues(1)
|
val contentValues = ContentValues(1)
|
||||||
contentValues.put(ContactsContract.Contacts.STARRED, contact.starred)
|
contentValues.put(ContactsContract.Contacts.STARRED, contact.starred)
|
||||||
activity.contentResolver.update(uri, contentValues, null, null)
|
context.contentResolver.update(uri, contentValues, null, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1436,7 +1437,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
private fun addFullSizePhoto(contactId: Long, fullSizePhotoData: ByteArray) {
|
private fun addFullSizePhoto(contactId: Long, fullSizePhotoData: ByteArray) {
|
||||||
val baseUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, contactId)
|
val baseUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, contactId)
|
||||||
val displayPhotoUri = Uri.withAppendedPath(baseUri, ContactsContract.RawContacts.DisplayPhoto.CONTENT_DIRECTORY)
|
val displayPhotoUri = Uri.withAppendedPath(baseUri, ContactsContract.RawContacts.DisplayPhoto.CONTENT_DIRECTORY)
|
||||||
val fileDescriptor = activity.contentResolver.openAssetFileDescriptor(displayPhotoUri, "rw")
|
val fileDescriptor = context.contentResolver.openAssetFileDescriptor(displayPhotoUri, "rw")
|
||||||
val photoStream = fileDescriptor.createOutputStream()
|
val photoStream = fileDescriptor.createOutputStream()
|
||||||
photoStream.write(fullSizePhotoData)
|
photoStream.write(fullSizePhotoData)
|
||||||
photoStream.close()
|
photoStream.close()
|
||||||
@ -1450,7 +1451,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, contactId)
|
val selectionArgs = arrayOf(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, contactId)
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
|
||||||
val lookupKey = cursor.getStringValue(ContactsContract.Data.LOOKUP_KEY)
|
val lookupKey = cursor.getStringValue(ContactsContract.Data.LOOKUP_KEY)
|
||||||
@ -1470,7 +1471,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
return cursor.getStringValue(ContactsContract.Data._ID)
|
return cursor.getStringValue(ContactsContract.Data._ID)
|
||||||
}
|
}
|
||||||
@ -1483,7 +1484,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
fun addFavorites(contacts: ArrayList<Contact>) {
|
fun addFavorites(contacts: ArrayList<Contact>) {
|
||||||
Thread {
|
Thread {
|
||||||
toggleLocalFavorites(contacts, true)
|
toggleLocalFavorites(contacts, true)
|
||||||
if (activity.hasContactPermissions()) {
|
if (context.hasContactPermissions()) {
|
||||||
toggleFavorites(contacts, true)
|
toggleFavorites(contacts, true)
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
@ -1492,7 +1493,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
fun removeFavorites(contacts: ArrayList<Contact>) {
|
fun removeFavorites(contacts: ArrayList<Contact>) {
|
||||||
Thread {
|
Thread {
|
||||||
toggleLocalFavorites(contacts, false)
|
toggleLocalFavorites(contacts, false)
|
||||||
if (activity.hasContactPermissions()) {
|
if (context.hasContactPermissions()) {
|
||||||
toggleFavorites(contacts, false)
|
toggleFavorites(contacts, false)
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
@ -1509,25 +1510,25 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (operations.size % BATCH_SIZE == 0) {
|
if (operations.size % BATCH_SIZE == 0) {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
operations.clear()
|
operations.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toggleLocalFavorites(contacts: ArrayList<Contact>, addToFavorites: Boolean) {
|
private fun toggleLocalFavorites(contacts: ArrayList<Contact>, addToFavorites: Boolean) {
|
||||||
val localContacts = contacts.filter { it.source == SMT_PRIVATE }.map { it.id }.toTypedArray()
|
val localContacts = contacts.filter { it.source == SMT_PRIVATE }.map { it.id }.toTypedArray()
|
||||||
LocalContactsHelper(activity).toggleFavorites(localContacts, addToFavorites)
|
LocalContactsHelper(context).toggleFavorites(localContacts, addToFavorites)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deleteContact(contact: Contact) {
|
fun deleteContact(contact: Contact) {
|
||||||
Thread {
|
Thread {
|
||||||
if (contact.source == SMT_PRIVATE) {
|
if (contact.source == SMT_PRIVATE) {
|
||||||
activity.contactsDB.deleteContactId(contact.id)
|
context.contactsDB.deleteContactId(contact.id)
|
||||||
} else {
|
} else {
|
||||||
deleteContacts(arrayListOf(contact))
|
deleteContacts(arrayListOf(contact))
|
||||||
}
|
}
|
||||||
@ -1536,7 +1537,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
fun deleteContacts(contacts: ArrayList<Contact>) {
|
fun deleteContacts(contacts: ArrayList<Contact>) {
|
||||||
val localContacts = contacts.filter { it.source == SMT_PRIVATE }.map { it.id }.toTypedArray()
|
val localContacts = contacts.filter { it.source == SMT_PRIVATE }.map { it.id }.toTypedArray()
|
||||||
LocalContactsHelper(activity).deleteContactIds(localContacts)
|
LocalContactsHelper(context).deleteContactIds(localContacts)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val operations = ArrayList<ContentProviderOperation>()
|
val operations = ArrayList<ContentProviderOperation>()
|
||||||
@ -1549,16 +1550,16 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (operations.size % BATCH_SIZE == 0) {
|
if (operations.size % BATCH_SIZE == 0) {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
operations.clear()
|
operations.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activity.hasPermission(PERMISSION_WRITE_CONTACTS)) {
|
if (context.hasPermission(PERMISSION_WRITE_CONTACTS)) {
|
||||||
activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
context.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1566,7 +1567,7 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
fun getRecents(callback: (ArrayList<RecentCall>) -> Unit) {
|
fun getRecents(callback: (ArrayList<RecentCall>) -> Unit) {
|
||||||
Thread {
|
Thread {
|
||||||
val calls = ArrayList<RecentCall>()
|
val calls = ArrayList<RecentCall>()
|
||||||
if (!activity.hasPermission(PERMISSION_WRITE_CALL_LOG) || !activity.hasPermission(PERMISSION_READ_CALL_LOG)) {
|
if (!context.hasPermission(PERMISSION_WRITE_CALL_LOG) || !context.hasPermission(PERMISSION_READ_CALL_LOG)) {
|
||||||
callback(calls)
|
callback(calls)
|
||||||
return@Thread
|
return@Thread
|
||||||
}
|
}
|
||||||
@ -1584,13 +1585,13 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
val currentYear = SimpleDateFormat("yyyy", Locale.getDefault()).format(currentDate)
|
val currentYear = SimpleDateFormat("yyyy", Locale.getDefault()).format(currentDate)
|
||||||
val todayDate = SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(currentDate)
|
val todayDate = SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(currentDate)
|
||||||
val yesterdayDate = SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(Date(System.currentTimeMillis() - DAY_SECONDS * 1000))
|
val yesterdayDate = SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(Date(System.currentTimeMillis() - DAY_SECONDS * 1000))
|
||||||
val yesterday = activity.getString(R.string.yesterday)
|
val yesterday = context.getString(R.string.yesterday)
|
||||||
val timeFormat = if (activity.config.use24HourFormat) "HH:mm" else "h:mm a"
|
val timeFormat = if (context.config.use24HourFormat) "HH:mm" else "h:mm a"
|
||||||
var prevNumber = ""
|
var prevNumber = ""
|
||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = activity.contentResolver.query(uri, projection, null, null, sorting)
|
cursor = context.contentResolver.query(uri, projection, null, null, sorting)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
val id = cursor.getIntValue(CallLog.Calls._ID)
|
val id = cursor.getIntValue(CallLog.Calls._ID)
|
||||||
@ -1634,14 +1635,14 @@ class ContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (operations.size % BATCH_SIZE == 0) {
|
if (operations.size % BATCH_SIZE == 0) {
|
||||||
activity.contentResolver.applyBatch(CallLog.AUTHORITY, operations)
|
context.contentResolver.applyBatch(CallLog.AUTHORITY, operations)
|
||||||
operations.clear()
|
operations.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
activity.contentResolver.applyBatch(CallLog.AUTHORITY, operations)
|
context.contentResolver.applyBatch(CallLog.AUTHORITY, operations)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
context.showErrorToast(e)
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.simplemobiletools.contacts.pro.helpers
|
package com.simplemobiletools.contacts.pro.helpers
|
||||||
|
|
||||||
import android.app.Activity
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
@ -14,13 +14,13 @@ import com.simplemobiletools.contacts.pro.models.Group
|
|||||||
import com.simplemobiletools.contacts.pro.models.LocalContact
|
import com.simplemobiletools.contacts.pro.models.LocalContact
|
||||||
import com.simplemobiletools.contacts.pro.models.Organization
|
import com.simplemobiletools.contacts.pro.models.Organization
|
||||||
|
|
||||||
class LocalContactsHelper(val activity: Activity) {
|
class LocalContactsHelper(val context: Context) {
|
||||||
fun getAllContacts() = activity.contactsDB.getContacts().map { convertLocalContactToContact(it) }.toMutableList() as ArrayList<Contact>
|
fun getAllContacts() = context.contactsDB.getContacts().map { convertLocalContactToContact(it) }.toMutableList() as ArrayList<Contact>
|
||||||
|
|
||||||
fun getContactWithId(id: Int) = convertLocalContactToContact(activity.contactsDB.getContactWithId(id))
|
fun getContactWithId(id: Int) = convertLocalContactToContact(context.contactsDB.getContactWithId(id))
|
||||||
|
|
||||||
fun getContactWithNumber(number: String): Contact? {
|
fun getContactWithNumber(number: String): Contact? {
|
||||||
activity.contactsDB.getContacts().forEach {
|
context.contactsDB.getContacts().forEach {
|
||||||
if (it.phoneNumbers.map { it.value }.contains(number)) {
|
if (it.phoneNumbers.map { it.value }.contains(number)) {
|
||||||
return convertLocalContactToContact(it)
|
return convertLocalContactToContact(it)
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ class LocalContactsHelper(val activity: Activity) {
|
|||||||
|
|
||||||
fun insertOrUpdateContact(contact: Contact): Boolean {
|
fun insertOrUpdateContact(contact: Contact): Boolean {
|
||||||
val localContact = convertContactToLocalContact(contact)
|
val localContact = convertContactToLocalContact(contact)
|
||||||
return activity.contactsDB.insertOrUpdate(localContact) > 0
|
return context.contactsDB.insertOrUpdate(localContact) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
fun addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
||||||
@ -40,7 +40,7 @@ class LocalContactsHelper(val activity: Activity) {
|
|||||||
newGroups.add(groupId)
|
newGroups.add(groupId)
|
||||||
newGroups.distinct()
|
newGroups.distinct()
|
||||||
localContact.groups = newGroups
|
localContact.groups = newGroups
|
||||||
activity.contactsDB.insertOrUpdate(localContact)
|
context.contactsDB.insertOrUpdate(localContact)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,20 +50,20 @@ class LocalContactsHelper(val activity: Activity) {
|
|||||||
val newGroups = localContact.groups
|
val newGroups = localContact.groups
|
||||||
newGroups.remove(groupId)
|
newGroups.remove(groupId)
|
||||||
localContact.groups = newGroups
|
localContact.groups = newGroups
|
||||||
activity.contactsDB.insertOrUpdate(localContact)
|
context.contactsDB.insertOrUpdate(localContact)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deleteContactIds(ids: Array<Int>) {
|
fun deleteContactIds(ids: Array<Int>) {
|
||||||
ids.forEach {
|
ids.forEach {
|
||||||
activity.contactsDB.deleteContactId(it)
|
context.contactsDB.deleteContactId(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleFavorites(ids: Array<Int>, addToFavorites: Boolean) {
|
fun toggleFavorites(ids: Array<Int>, addToFavorites: Boolean) {
|
||||||
val isStarred = if (addToFavorites) 1 else 0
|
val isStarred = if (addToFavorites) 1 else 0
|
||||||
ids.forEach {
|
ids.forEach {
|
||||||
activity.contactsDB.updateStarred(isStarred, it)
|
context.contactsDB.updateStarred(isStarred, it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,9 +73,9 @@ class LocalContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val photoUri = Uri.parse(uri)
|
val photoUri = Uri.parse(uri)
|
||||||
val bitmap = MediaStore.Images.Media.getBitmap(activity.contentResolver, photoUri)
|
val bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, photoUri)
|
||||||
|
|
||||||
val thumbnailSize = activity.getPhotoThumbnailSize()
|
val thumbnailSize = context.getPhotoThumbnailSize()
|
||||||
val scaledPhoto = Bitmap.createScaledBitmap(bitmap, thumbnailSize * 2, thumbnailSize * 2, false)
|
val scaledPhoto = Bitmap.createScaledBitmap(bitmap, thumbnailSize * 2, thumbnailSize * 2, false)
|
||||||
val scaledSizePhotoData = scaledPhoto.getByteArray()
|
val scaledSizePhotoData = scaledPhoto.getByteArray()
|
||||||
scaledPhoto.recycle()
|
scaledPhoto.recycle()
|
||||||
@ -97,9 +97,9 @@ class LocalContactsHelper(val activity: Activity) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val storedGroups = ContactsHelper(activity).getStoredGroupsSync()
|
val storedGroups = ContactsHelper(context).getStoredGroupsSync()
|
||||||
|
|
||||||
return activity.getEmptyContact().apply {
|
return context.getEmptyContact().apply {
|
||||||
id = localContact.id!!
|
id = localContact.id!!
|
||||||
prefix = localContact.prefix
|
prefix = localContact.prefix
|
||||||
firstName = localContact.firstName
|
firstName = localContact.firstName
|
||||||
|
Reference in New Issue
Block a user