From 5ffe57251adeffc1d099b38b72de1c79d5b33dd2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Dec 2017 00:07:33 +0100 Subject: [PATCH] differentiate between creating a new contact and editing one --- .../contacts/activities/ContactActivity.kt | 88 +++++++++++++++++-- .../contacts/activities/MainActivity.kt | 6 +- .../contacts/helpers/Constants.kt | 1 + .../contacts/helpers/ContactsHelper.kt | 44 ++++++++-- .../contacts/models/Contact.kt | 2 +- app/src/main/res/layout/activity_contact.xml | 32 +++---- app/src/main/res/menu/menu_contact.xml | 14 +++ 7 files changed, 155 insertions(+), 32 deletions(-) create mode 100644 app/src/main/res/menu/menu_contact.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt index 356ad9cc..0cec5eb6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt @@ -2,35 +2,113 @@ package com.simplemobiletools.contacts.activities import android.graphics.drawable.ColorDrawable import android.os.Bundle +import android.view.Menu +import android.view.MenuItem +import android.view.WindowManager import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.getContrastColor +import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.extensions.updateTextColors +import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.extensions.config +import com.simplemobiletools.contacts.helpers.CONTACT_ID +import com.simplemobiletools.contacts.helpers.ContactsHelper +import com.simplemobiletools.contacts.models.Contact import kotlinx.android.synthetic.main.activity_contact.* class ContactActivity : SimpleActivity() { + private var wasActivityInitialized = false + private var contact: Contact? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_contact) supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_cross) + handlePermission(PERMISSION_WRITE_CONTACTS) { + if (it) { + initContact() + } else { + toast(R.string.no_contacts_permission) + finish() + } + } + } + + private fun initContact() { + val contactId = intent.getIntExtra(CONTACT_ID, 0) + if (contactId != 0) { + contact = ContactsHelper(this).getContactWithId(contactId) + if (contact == null) { + toast(R.string.unknown_error_occurred) + finish() + return + } + } + + if (contact != null) { + setupEditContact() + } else { + setupNewContact() + } + contact_photo.applyColorFilter(config.primaryColor.getContrastColor()) contact_photo.background = ColorDrawable(config.primaryColor) val textColor = config.textColor - contact_sms.applyColorFilter(textColor) - contact_call.applyColorFilter(textColor) - contact_email.applyColorFilter(textColor) + contact_send_sms.applyColorFilter(textColor) + contact_start_call.applyColorFilter(textColor) + contact_send_email.applyColorFilter(textColor) contact_name_image.applyColorFilter(textColor) contact_number_image.applyColorFilter(textColor) contact_email_image.applyColorFilter(textColor) contact_photo.setOnClickListener { } - contact_sms.setOnClickListener { } - contact_call.setOnClickListener { } + contact_send_sms.setOnClickListener { } + contact_start_call.setOnClickListener { } contact_email.setOnClickListener { } updateTextColors(contact_scrollview) + wasActivityInitialized = true + invalidateOptionsMenu() + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.menu_contact, menu) + if (wasActivityInitialized) { + menu.findItem(R.id.delete).isVisible = contact?.id != 0 + } + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.save -> saveContact() + R.id.delete -> deleteContact() + else -> return super.onOptionsItemSelected(item) + } + return true + } + + private fun setupEditContact() { + window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) + supportActionBar?.title = resources.getString(R.string.edit_contact) + contact_name.setText(contact!!.name) + contact_number.setText(contact!!.number) + contact_email.setText(contact!!.email) + } + + private fun setupNewContact() { + window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) + supportActionBar?.title = resources.getString(R.string.new_contact) + } + + private fun saveContact() { + + } + + private fun deleteContact() { + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index 77d6c0ab..e0005631 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -17,6 +17,7 @@ import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.adapters.ContactsAdapter import com.simplemobiletools.contacts.dialogs.ChangeSortingDialog import com.simplemobiletools.contacts.extensions.config +import com.simplemobiletools.contacts.helpers.CONTACT_ID import com.simplemobiletools.contacts.helpers.ContactsHelper import com.simplemobiletools.contacts.models.Contact import kotlinx.android.synthetic.main.activity_main.* @@ -138,7 +139,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { } private fun itemClicked(contact: Contact) { - + Intent(applicationContext, ContactActivity::class.java).apply { + putExtra(CONTACT_ID, contact.id) + startActivity(this) + } } private fun addNewContact() { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt index 3180eb76..f2a8eb7a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt @@ -1,3 +1,4 @@ package com.simplemobiletools.contacts.helpers val SORTING = "sorting" +val CONTACT_ID = "contact_id" diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt index 203a76d4..f1c6fdf9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -13,13 +13,7 @@ class ContactsHelper(val activity: SimpleActivity) { val contacts = ArrayList() Thread { val uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI - val projection = arrayOf( - ContactsContract.CommonDataKinds.Phone.CONTACT_ID, - ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, - ContactsContract.CommonDataKinds.Phone.NUMBER, - ContactsContract.CommonDataKinds.Phone.PHOTO_URI - ) - + val projection = getContactProjection() var cursor: Cursor? = null try { cursor = activity.contentResolver.query(uri, projection, null, null, null) @@ -27,9 +21,9 @@ class ContactsHelper(val activity: SimpleActivity) { do { val id = cursor.getIntValue(ContactsContract.CommonDataKinds.Phone.CONTACT_ID) val name = cursor.getStringValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME) ?: continue - val number = cursor.getStringValue(ContactsContract.CommonDataKinds.Phone.NUMBER) ?: continue + val number = cursor.getStringValue(ContactsContract.CommonDataKinds.Phone.NUMBER) ?: "" val photoUri = cursor.getStringValue(ContactsContract.CommonDataKinds.Phone.PHOTO_URI) ?: "" - val contact = Contact(id, name, number, photoUri) + val contact = Contact(id, name, number, photoUri, "") contacts.add(contact) } while (cursor.moveToNext()) } @@ -41,4 +35,36 @@ class ContactsHelper(val activity: SimpleActivity) { callback(contacts) }.start() } + + fun getContactWithId(id: Int): Contact? { + if (id == 0) { + return null + } + + val uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI + val projection = getContactProjection() + val selection = "${ContactsContract.CommonDataKinds.Phone.CONTACT_ID} = ?" + val selectionArgs = arrayOf(id.toString()) + var cursor: Cursor? = null + try { + cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null) + if (cursor?.moveToFirst() == true) { + val name = cursor.getStringValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME) ?: return null + val number = cursor.getStringValue(ContactsContract.CommonDataKinds.Phone.NUMBER) ?: "" + val photoUri = cursor.getStringValue(ContactsContract.CommonDataKinds.Phone.PHOTO_URI) ?: "" + return Contact(id, name, number, photoUri, "") + } + } finally { + cursor?.close() + } + + return null + } + + private fun getContactProjection() = arrayOf( + ContactsContract.CommonDataKinds.Phone.CONTACT_ID, + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, + ContactsContract.CommonDataKinds.Phone.NUMBER, + ContactsContract.CommonDataKinds.Phone.PHOTO_URI + ) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt index bdecb1ba..91df8050 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt @@ -3,7 +3,7 @@ package com.simplemobiletools.contacts.models import com.simplemobiletools.commons.helpers.SORT_BY_NUMBER import com.simplemobiletools.commons.helpers.SORT_DESCENDING -data class Contact(val id: Int, var name: String, var number: String, var photoUri: String) : Comparable { +data class Contact(val id: Int, var name: String, var number: String, var photoUri: String, var email: String) : Comparable { companion object { var sorting: Int = 0 } diff --git a/app/src/main/res/layout/activity_contact.xml b/app/src/main/res/layout/activity_contact.xml index e1c022f0..7128f637 100644 --- a/app/src/main/res/layout/activity_contact.xml +++ b/app/src/main/res/layout/activity_contact.xml @@ -19,7 +19,7 @@ android:src="@drawable/ic_person"/> + + + +