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 c75b96f8..f008fbb6 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 @@ -25,6 +25,7 @@ import kotlinx.android.synthetic.main.item_website.view.* class ViewContactActivity : ContactActivity() { private var isViewIntent = false + private var wasEditLaunched = false private var showFields = 0 override fun onCreate(savedInstanceState: Bundle?) { @@ -64,7 +65,7 @@ class ViewContactActivity : ContactActivity() { } when (item.itemId) { - R.id.edit -> editContact(contact!!) + R.id.edit -> editContact() R.id.share -> shareContact() R.id.open_with -> openWith() R.id.delete -> deleteContact() @@ -101,7 +102,9 @@ class ViewContactActivity : ContactActivity() { Thread { contact = ContactsHelper(this).getContactWithId(contactId, intent.getBooleanExtra(IS_PRIVATE, false)) if (contact == null) { - toast(R.string.unknown_error_occurred) + if (!wasEditLaunched) { + toast(R.string.unknown_error_occurred) + } finish() } else { runOnUiThread { @@ -170,6 +173,11 @@ class ViewContactActivity : ContactActivity() { setupContactSource() } + private fun editContact() { + wasEditLaunched = true + editContact(contact!!) + } + private fun openWith() { Intent().apply { action = ContactsContract.QuickContact.ACTION_QUICK_CONTACT 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 5a4baf46..90a10f1a 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 @@ -158,7 +158,10 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList) { - Thread { - val localContacts = contacts.filter { it.source == SMT_PRIVATE }.map { it.id.toString() }.toTypedArray() - activity.dbHelper.deleteContacts(localContacts) + val localContacts = contacts.filter { it.source == SMT_PRIVATE }.map { it.id }.toTypedArray() + LocalContactsHelper(activity).deleteContactIds(localContacts) - try { - val operations = ArrayList() - val selection = "${ContactsContract.RawContacts._ID} = ?" - contacts.filter { it.source != SMT_PRIVATE }.forEach { - ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).apply { - val selectionArgs = arrayOf(it.id.toString()) - withSelection(selection, selectionArgs) - operations.add(build()) - } - - if (operations.size % BATCH_SIZE == 0) { - activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) - operations.clear() - } + try { + val operations = ArrayList() + val selection = "${ContactsContract.RawContacts._ID} = ?" + contacts.filter { it.source != SMT_PRIVATE }.forEach { + ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).apply { + val selectionArgs = arrayOf(it.id.toString()) + withSelection(selection, selectionArgs) + operations.add(build()) } - if (activity.hasPermission(PERMISSION_WRITE_CONTACTS)) { + if (operations.size % BATCH_SIZE == 0) { activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + operations.clear() } - } catch (e: Exception) { - activity.showErrorToast(e) } - }.start() + + if (activity.hasPermission(PERMISSION_WRITE_CONTACTS)) { + activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) + } + } catch (e: Exception) { + activity.showErrorToast(e) + } } @SuppressLint("MissingPermission") diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/DBHelper.kt index ed12f089..f7be8358 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/DBHelper.kt @@ -81,18 +81,6 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont db.execSQL("REPLACE INTO sqlite_sequence (name, seq) VALUES ('$GROUPS_TABLE_NAME', $FIRST_GROUP_ID)") } - fun deleteContact(id: Int) = deleteContacts(arrayOf(id.toString())) - - fun deleteContacts(ids: Array) { - if (ids.isEmpty()) { - return - } - - val args = TextUtils.join(", ", ids) - val selection = "$CONTACTS_TABLE_NAME.$COL_ID IN ($args)" - mDb.delete(CONTACTS_TABLE_NAME, selection, null) - } - fun insertGroup(group: Group): Group? { val contactValues = fillGroupValues(group) val id = mDb.insert(GROUPS_TABLE_NAME, null, contactValues) 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 cbec2b6a..f9fc990d 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 @@ -21,6 +21,12 @@ class LocalContactsHelper(val activity: Activity) { return activity.contactsDB.insertOrUpdate(localContact) > 0 } + fun deleteContactIds(ids: Array) { + ids.forEach { + activity.contactsDB.deleteContactId(it) + } + } + fun toggleFavorites(ids: Array, addToFavorites: Boolean) { val isStarred = if (addToFavorites) 1 else 0 ids.forEach { @@ -43,7 +49,11 @@ class LocalContactsHelper(val activity: Activity) { return scaledSizePhotoData } - private fun convertLocalContactToContact(localContact: LocalContact): Contact { + private fun convertLocalContactToContact(localContact: LocalContact?): Contact? { + if (localContact == null) { + return null + } + val filterDuplicates = activity.config.filterDuplicates val filteredPhoneNumbers = ArrayList() if (filterDuplicates) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/interfaces/ContactsDao.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/interfaces/ContactsDao.kt index 10686132..373df2d3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/interfaces/ContactsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/interfaces/ContactsDao.kt @@ -12,7 +12,7 @@ interface ContactsDao { fun getContacts(): List @Query("SELECT * FROM contacts WHERE id = :id") - fun getContactWithId(id: Int): LocalContact + fun getContactWithId(id: Int): LocalContact? @Query("UPDATE contacts SET starred = :isStarred WHERE id = :id") fun updateStarred(isStarred: Int, id: Int) @@ -20,6 +20,6 @@ interface ContactsDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertOrUpdate(contact: LocalContact): Long - @Query("DELETE FROM contacts WHERE id IN (:ids)") - fun deleteContactIds(ids: String) + @Query("DELETE FROM contacts WHERE id = :id") + fun deleteContactId(id: Int) }