From 007e264f69ea9eeb33b590878079ef34a40173e7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 14 Aug 2019 20:45:47 +0200 Subject: [PATCH] create new background threads only when necessary --- .../pro/activities/EditContactActivity.kt | 9 +++---- .../pro/activities/GroupContactsActivity.kt | 9 +++---- .../ManageBlockedNumbersActivity.kt | 5 ++-- .../pro/activities/ViewContactActivity.kt | 9 +++---- .../contacts/pro/adapters/ContactsAdapter.kt | 13 +++++----- .../contacts/pro/adapters/GroupsAdapter.kt | 5 ++-- .../pro/dialogs/CreateNewGroupDialog.kt | 5 ++-- .../pro/dialogs/ExportContactsDialog.kt | 5 ++-- .../pro/dialogs/ImportContactsDialog.kt | 5 ++-- .../contacts/pro/dialogs/RenameGroupDialog.kt | 5 ++-- .../pro/dialogs/SelectContactsDialog.kt | 5 ++-- .../contacts/pro/extensions/Context.kt | 9 +++---- .../contacts/pro/helpers/ContactsHelper.kt | 24 +++++++++---------- 13 files changed, 58 insertions(+), 50 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt index 40d05405..821ffbe9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt @@ -21,6 +21,7 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.dialogs.CustomLabelDialog @@ -148,7 +149,7 @@ class EditContactActivity : ContactActivity() { } if (contactId != 0) { - Thread { + ensureBackgroundThread { contact = ContactsHelper(this).getContactWithId(contactId, intent.getBooleanExtra(IS_PRIVATE, false)) if (contact == null) { toast(R.string.unknown_error_occurred) @@ -158,7 +159,7 @@ class EditContactActivity : ContactActivity() { gotContact() } } - }.start() + } } else { gotContact() } @@ -875,7 +876,7 @@ class EditContactActivity : ContactActivity() { val jobPosition = contact_organization_job_position.value organization = Organization(company, jobPosition) - Thread { + ensureBackgroundThread { config.lastUsedContactSource = source when { id == 0 -> insertNewContact(false) @@ -885,7 +886,7 @@ class EditContactActivity : ContactActivity() { updateContact(photoUpdateStatus) } } - }.start() + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt index 65cab93f..91394c9b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt @@ -7,6 +7,7 @@ import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.underlineText import com.simplemobiletools.commons.extensions.updateTextColors +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter import com.simplemobiletools.contacts.pro.dialogs.SelectContactsDialog @@ -70,11 +71,11 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh private fun fabClicked() { SelectContactsDialog(this, allContacts, groupContacts) { addedContacts, removedContacts -> - Thread { + ensureBackgroundThread { addContactsToGroup(addedContacts, group.id!!) removeContactsFromGroup(removedContacts, group.id!!) refreshContacts() - }.start() + } } } @@ -124,11 +125,11 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh } override fun removeFromGroup(contacts: ArrayList) { - Thread { + ensureBackgroundThread { removeContactsFromGroup(contacts, group.id!!) if (groupContacts.size == contacts.size) { refreshContacts() } - }.start() + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ManageBlockedNumbersActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ManageBlockedNumbersActivity.kt index 51242c83..d01fbb8f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ManageBlockedNumbersActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ManageBlockedNumbersActivity.kt @@ -8,6 +8,7 @@ import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.underlineText import com.simplemobiletools.commons.extensions.updateTextColors +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.adapters.ManageBlockedNumbersAdapter @@ -63,7 +64,7 @@ class ManageBlockedNumbersActivity : SimpleActivity(), RefreshRecyclerViewListen } private fun updateBlockedNumbers() { - Thread { + ensureBackgroundThread { val blockedNumbers = getBlockedNumbers() runOnUiThread { ManageBlockedNumbersAdapter(this, blockedNumbers, this, manage_blocked_numbers_list) { @@ -75,7 +76,7 @@ class ManageBlockedNumbersActivity : SimpleActivity(), RefreshRecyclerViewListen manage_blocked_numbers_placeholder.beVisibleIf(blockedNumbers.isEmpty()) manage_blocked_numbers_placeholder_2.beVisibleIf(blockedNumbers.isEmpty()) } - }.start() + } } private fun addOrEditBlockedNumber(currentNumber: BlockedNumber? = null) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt index fa260c09..7e820937 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt @@ -11,6 +11,7 @@ import android.widget.RelativeLayout import com.bumptech.glide.Glide import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.dialogs.CallConfirmationDialog import com.simplemobiletools.contacts.pro.extensions.* @@ -46,18 +47,18 @@ class ViewContactActivity : ContactActivity() { if (isViewIntent) { handlePermission(PERMISSION_READ_CONTACTS) { if (it) { - Thread { + ensureBackgroundThread { initContact() - }.start() + } } else { toast(R.string.no_contacts_permission) finish() } } } else { - Thread { + ensureBackgroundThread { initContact() - }.start() + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt index 97bba089..1c82ee22 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt @@ -20,6 +20,7 @@ import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor import com.simplemobiletools.commons.extensions.highlightTextPart +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.MyRecyclerView @@ -164,9 +165,9 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList, val private fun askConfirmDelete() { ConfirmationDialog(activity) { - Thread { + ensureBackgroundThread { deleteGroups() - }.start() + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/CreateNewGroupDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/CreateNewGroupDialog.kt index ddda65f7..06233246 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/CreateNewGroupDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/CreateNewGroupDialog.kt @@ -8,6 +8,7 @@ import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.showKeyboard import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.extensions.value +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.extensions.getPrivateContactSource @@ -60,7 +61,7 @@ class CreateNewGroupDialog(val activity: BaseSimpleActivity, val callback: (newG } private fun createGroupUnder(name: String, contactSource: ContactSource, dialog: AlertDialog) { - Thread { + ensureBackgroundThread { val newGroup = ContactsHelper(activity).createNewGroup(name, contactSource.name, contactSource.type) activity.runOnUiThread { if (newGroup != null) { @@ -68,6 +69,6 @@ class CreateNewGroupDialog(val activity: BaseSimpleActivity, val callback: (newG } dialog.dismiss() } - }.start() + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ExportContactsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ExportContactsDialog.kt index d1101471..c02a4516 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ExportContactsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ExportContactsDialog.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.contacts.pro.dialogs import android.view.ViewGroup import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.SimpleActivity import com.simplemobiletools.contacts.pro.adapters.FilterContactSourcesAdapter @@ -49,12 +50,12 @@ class ExportContactsDialog(val activity: SimpleActivity, val path: String, priva return@setOnClickListener } - Thread { + ensureBackgroundThread { val selectedSources = (view.export_contacts_list.adapter as FilterContactSourcesAdapter).getSelectedContactSources() val ignoredSources = contactSources.filter { !selectedSources.contains(it) }.map { it.getFullIdentifier() }.toHashSet() callback(file, ignoredSources) dismiss() - }.start() + } } else -> activity.toast(R.string.invalid_name) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ImportContactsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ImportContactsDialog.kt index 131070d3..3640391d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ImportContactsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ImportContactsDialog.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.toast +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.SimpleActivity import com.simplemobiletools.contacts.pro.extensions.config @@ -41,11 +42,11 @@ class ImportContactsDialog(val activity: SimpleActivity, val path: String, priva activity.setupDialogStuff(view, this, R.string.import_contacts) { getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { activity.toast(R.string.importing) - Thread { + ensureBackgroundThread { val result = VcfImporter(activity).importContacts(path, targetContactSource) handleParseResult(result) dismiss() - }.start() + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt index 835bc5e5..2f81ec1c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.contacts.pro.dialogs import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.extensions.groupsDB import com.simplemobiletools.contacts.pro.helpers.ContactsHelper @@ -35,7 +36,7 @@ class RenameGroupDialog(val activity: BaseSimpleActivity, val group: Group, val } group.title = newTitle - Thread { + ensureBackgroundThread { if (group.isPrivateSecretGroup()) { activity.groupsDB.insertOrUpdate(group) } else { @@ -45,7 +46,7 @@ class RenameGroupDialog(val activity: BaseSimpleActivity, val group: Group, val callback() dismiss() } - }.start() + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt index 16872932..5e93f5a0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.contacts.pro.dialogs import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.extensions.baseConfig import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.SimpleActivity import com.simplemobiletools.contacts.pro.adapters.SelectContactsAdapter @@ -45,13 +46,13 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL } private fun dialogConfirmed() { - Thread { + ensureBackgroundThread { val adapter = view?.select_contact_list?.adapter as? SelectContactsAdapter val selectedContacts = adapter?.getSelectedItemsSet()?.toList() ?: ArrayList() val newlySelectedContacts = selectedContacts.filter { !initiallySelectedContacts.contains(it) } as ArrayList val unselectedContacts = initiallySelectedContacts.filter { !selectedContacts.contains(it) } as ArrayList callback(newlySelectedContacts, unselectedContacts) - }.start() + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt index 5a517b45..e505e4ed 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt @@ -15,10 +15,7 @@ import android.provider.ContactsContract import android.telecom.TelecomManager import androidx.core.content.FileProvider import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS -import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS -import com.simplemobiletools.commons.helpers.isMarshmallowPlus -import com.simplemobiletools.commons.helpers.isNougatPlus +import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.contacts.pro.BuildConfig import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.EditContactActivity @@ -199,7 +196,7 @@ fun Context.getPublicContactSource(source: String, callback: (String) -> Unit) { when (source) { SMT_PRIVATE -> callback(getString(R.string.phone_storage_hidden)) else -> { - Thread { + ensureBackgroundThread { ContactsHelper(this).getContactSources { var newSource = source for (contactSource in it) { @@ -212,7 +209,7 @@ fun Context.getPublicContactSource(source: String, callback: (String) -> Unit) { callback(newSource) } } - }.start() + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt index 228cab8b..5c5770fa 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt @@ -29,7 +29,7 @@ class ContactsHelper(val context: Context) { private var displayContactSources = ArrayList() fun getContacts(ignoredContactSources: HashSet = HashSet(), callback: (ArrayList) -> Unit) { - Thread { + ensureBackgroundThread { val contacts = SparseArray() displayContactSources = context.getVisibleContactSources() if (ignoredContactSources.isNotEmpty()) { @@ -93,7 +93,7 @@ class ContactsHelper(val context: Context) { Handler(Looper.getMainLooper()).post { callback(resultContacts) } - }.start() + } } private fun getContentResolverAccounts(): HashSet { @@ -667,12 +667,12 @@ class ContactsHelper(val context: Context) { } fun getStoredGroups(callback: (ArrayList) -> Unit) { - Thread { + ensureBackgroundThread { val groups = getStoredGroupsSync() Handler(Looper.getMainLooper()).post { callback(groups) } - }.start() + } } fun getStoredGroupsSync(): ArrayList { @@ -838,9 +838,9 @@ class ContactsHelper(val context: Context) { } fun getContactSources(callback: (ArrayList) -> Unit) { - Thread { + ensureBackgroundThread { callback(getContactSourcesSync()) - }.start() + } } private fun getContactSourcesSync(): ArrayList { @@ -1476,21 +1476,21 @@ class ContactsHelper(val context: Context) { } fun addFavorites(contacts: ArrayList) { - Thread { + ensureBackgroundThread { toggleLocalFavorites(contacts, true) if (context.hasContactPermissions()) { toggleFavorites(contacts, true) } - }.start() + } } fun removeFavorites(contacts: ArrayList) { - Thread { + ensureBackgroundThread { toggleLocalFavorites(contacts, false) if (context.hasContactPermissions()) { toggleFavorites(contacts, false) } - }.start() + } } private fun toggleFavorites(contacts: ArrayList, addToFavorites: Boolean) { @@ -1520,13 +1520,13 @@ class ContactsHelper(val context: Context) { } fun deleteContact(contact: Contact) { - Thread { + ensureBackgroundThread { if (contact.isPrivate()) { context.contactsDB.deleteContactId(contact.id) } else { deleteContacts(arrayListOf(contact)) } - }.start() + } } fun deleteContacts(contacts: ArrayList) {