From e497c83182b7e7a3357a87b864c5b0160f4a8f9b Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 27 Dec 2017 19:26:33 +0100 Subject: [PATCH] add some contact fields for Events (birthdays, anniversaries, other) --- .../contacts/activities/ContactActivity.kt | 112 +++++++++++++++--- app/src/main/res/drawable-hdpi/ic_cake.png | Bin 0 -> 411 bytes app/src/main/res/drawable-xhdpi/ic_cake.png | Bin 0 -> 490 bytes app/src/main/res/drawable-xxhdpi/ic_cake.png | Bin 0 -> 684 bytes app/src/main/res/drawable-xxxhdpi/ic_cake.png | Bin 0 -> 907 bytes app/src/main/res/layout/activity_contact.xml | 40 ++++++- app/src/main/res/layout/item_event.xml | 38 ++++++ 7 files changed, 175 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_cake.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_cake.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_cake.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_cake.png create mode 100644 app/src/main/res/layout/item_event.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 2e9eee19..37ed5f8c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ContactActivity.kt @@ -37,15 +37,18 @@ import com.simplemobiletools.contacts.extensions.tryStartCall import com.simplemobiletools.contacts.helpers.* import com.simplemobiletools.contacts.models.Contact import com.simplemobiletools.contacts.models.Email +import com.simplemobiletools.contacts.models.Event import com.simplemobiletools.contacts.models.PhoneNumber import kotlinx.android.synthetic.main.activity_contact.* import kotlinx.android.synthetic.main.item_email.view.* +import kotlinx.android.synthetic.main.item_event.view.* import kotlinx.android.synthetic.main.item_phone_number.view.* import java.io.File class ContactActivity : SimpleActivity() { private val DEFAULT_EMAIL_TYPE = ContactsContract.CommonDataKinds.Email.TYPE_HOME private val DEFAULT_PHONE_NUMBER_TYPE = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE + private val DEFAULT_EVENT_TYPE = ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY private val INTENT_TAKE_PHOTO = 1 private val INTENT_CHOOSE_PHOTO = 2 @@ -120,11 +123,14 @@ class ContactActivity : SimpleActivity() { contact_name_image.applyColorFilter(textColor) contact_number_image.applyColorFilter(textColor) contact_email_image.applyColorFilter(textColor) + contact_event_image.applyColorFilter(textColor) contact_source_image.applyColorFilter(textColor) contact_number_add_new.applyColorFilter(getAdjustedPrimaryColor()) contact_number_add_new.background.applyColorFilter(textColor) contact_email_add_new.applyColorFilter(getAdjustedPrimaryColor()) contact_email_add_new.background.applyColorFilter(textColor) + contact_event_add_new.applyColorFilter(getAdjustedPrimaryColor()) + contact_event_add_new.background.applyColorFilter(textColor) contact_photo.setOnClickListener { trySetPhoto() } contact_send_sms.setOnClickListener { trySendSMS() } @@ -132,6 +138,7 @@ class ContactActivity : SimpleActivity() { contact_send_email.setOnClickListener { trySendEmail() } contact_number_add_new.setOnClickListener { addNewPhoneNumberField() } contact_email_add_new.setOnClickListener { addNewEmailField() } + contact_event_add_new.setOnClickListener { addNewEventField() } updateTextColors(contact_scrollview) wasActivityInitialized = true @@ -216,6 +223,19 @@ class ContactActivity : SimpleActivity() { setupEmailTypePicker(contact_email_type, email.type) } } + + contact!!.events.forEachIndexed { index, event -> + var eventHolder = contact_events_holder.getChildAt(index) + if (eventHolder == null) { + eventHolder = layoutInflater.inflate(R.layout.item_event, contact_events_holder, false) + contact_events_holder.addView(eventHolder) + } + + (eventHolder as? ViewGroup)?.apply { + contact_event.text = event.value + setupEventTypePicker(contact_event_type, event.type) + } + } } private fun setupNewContact() { @@ -271,6 +291,13 @@ class ContactActivity : SimpleActivity() { setupEmailTypePicker(this) } } + + if (contact!!.events.isEmpty()) { + val eventHolder = contact_events_holder.getChildAt(0) + (eventHolder as? ViewGroup)?.contact_event_type?.apply { + setupEventTypePicker(this) + } + } } private fun setupPhoneNumberTypePicker(numberField: TextView, type: Int = DEFAULT_PHONE_NUMBER_TYPE) { @@ -291,6 +318,15 @@ class ContactActivity : SimpleActivity() { } } + private fun setupEventTypePicker(eventField: TextView, type: Int = DEFAULT_EVENT_TYPE) { + eventField.apply { + setText(getEventTextId(type)) + setOnClickListener { + showEventTypePicker(it as TextView) + } + } + } + private fun showNumberTypePicker(numberTypeField: TextView) { val items = arrayListOf( RadioItem(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, getString(R.string.mobile)), @@ -321,6 +357,18 @@ class ContactActivity : SimpleActivity() { } } + private fun showEventTypePicker(eventTypeField: TextView) { + val items = arrayListOf( + RadioItem(ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY, getString(R.string.birthday)), + RadioItem(ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY, getString(R.string.anniversary)), + RadioItem(ContactsContract.CommonDataKinds.Event.TYPE_OTHER, getString(R.string.other))) + + val currentEventTypeId = getEventTypeId(eventTypeField.value) + RadioGroupDialog(this, items, currentEventTypeId) { + eventTypeField.setText(getEventTextId(it as Int)) + } + } + private fun saveContact() { if (isSaving) { return @@ -335,6 +383,7 @@ class ContactActivity : SimpleActivity() { photoUri = currentContactPhotoPath phoneNumbers = getFilledPhoneNumbers() emails = getFilledEmails() + events = getFilledEvents() source = contact_source.value Thread { @@ -379,6 +428,21 @@ class ContactActivity : SimpleActivity() { return emails } + private fun getFilledEvents(): ArrayList { + val events = ArrayList() + val eventsCount = contact_events_holder.childCount + for (i in 0 until eventsCount) { + val eventHolder = contact_events_holder.getChildAt(i) + val event = eventHolder.contact_event.value + val eventType = getEventTypeId(eventHolder.contact_event_type.value) + + if (event.isNotEmpty()) { + events.add(Event(event, eventType)) + } + } + return events + } + private fun insertNewContact() { isSaving = true if (ContactsHelper(this@ContactActivity).insertContact(contact!!)) { @@ -433,6 +497,14 @@ class ContactActivity : SimpleActivity() { } } + private fun addNewEventField() { + layoutInflater.inflate(R.layout.item_event, contact_events_holder, false).apply { + updateTextColors(this as ViewGroup) + setupEventTypePicker(contact_event_type) + contact_events_holder.addView(this) + } + } + private fun deleteContact() { ConfirmationDialog(this) { ContactsHelper(this).deleteContact(contact!!) @@ -552,20 +624,6 @@ class ContactActivity : SimpleActivity() { return FileProvider.getUriForFile(this, "${BuildConfig.APPLICATION_ID}.provider", file) } - private fun getEmailTextId(type: Int) = when (type) { - ContactsContract.CommonDataKinds.Email.TYPE_HOME -> R.string.home - ContactsContract.CommonDataKinds.Email.TYPE_WORK -> R.string.work - ContactsContract.CommonDataKinds.Email.TYPE_MOBILE -> R.string.mobile - else -> R.string.other - } - - private fun getEmailTypeId(value: String) = when (value) { - getString(R.string.home) -> ContactsContract.CommonDataKinds.Email.TYPE_HOME - getString(R.string.work) -> ContactsContract.CommonDataKinds.Email.TYPE_WORK - getString(R.string.mobile) -> ContactsContract.CommonDataKinds.Email.TYPE_MOBILE - else -> ContactsContract.CommonDataKinds.Email.TYPE_OTHER - } - private fun getPhoneNumberTextId(type: Int) = when (type) { ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE -> R.string.mobile ContactsContract.CommonDataKinds.Phone.TYPE_HOME -> R.string.home @@ -587,4 +645,30 @@ class ContactActivity : SimpleActivity() { getString(R.string.pager) -> ContactsContract.CommonDataKinds.Phone.TYPE_PAGER else -> ContactsContract.CommonDataKinds.Phone.TYPE_OTHER } + + private fun getEmailTextId(type: Int) = when (type) { + ContactsContract.CommonDataKinds.Email.TYPE_HOME -> R.string.home + ContactsContract.CommonDataKinds.Email.TYPE_WORK -> R.string.work + ContactsContract.CommonDataKinds.Email.TYPE_MOBILE -> R.string.mobile + else -> R.string.other + } + + private fun getEmailTypeId(value: String) = when (value) { + getString(R.string.home) -> ContactsContract.CommonDataKinds.Email.TYPE_HOME + getString(R.string.work) -> ContactsContract.CommonDataKinds.Email.TYPE_WORK + getString(R.string.mobile) -> ContactsContract.CommonDataKinds.Email.TYPE_MOBILE + else -> ContactsContract.CommonDataKinds.Email.TYPE_OTHER + } + + private fun getEventTextId(type: Int) = when (type) { + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY -> R.string.birthday + ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY -> R.string.anniversary + else -> R.string.other + } + + private fun getEventTypeId(value: String) = when (value) { + getString(R.string.birthday) -> ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY + getString(R.string.anniversary) -> ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY + else -> ContactsContract.CommonDataKinds.Event.TYPE_OTHER + } } diff --git a/app/src/main/res/drawable-hdpi/ic_cake.png b/app/src/main/res/drawable-hdpi/ic_cake.png new file mode 100644 index 0000000000000000000000000000000000000000..989a999b6c11449381b099df841e70887bc85e18 GIT binary patch literal 411 zcmV;M0c8G(P)4f26vxpkuF)=wgcO2>A|e(d*cj8K)jA)*Mnx2YEDD++4;E~<5i|(mw@|xuCXJ9v z0xF`7Hf}&fP?#eu)9lQ~VdoWE`1?1*D^4-oXwD@UMbkpl4%qQVCm-s8m0W1vE*P52 zgVq5&%!9rG*v*560ET(c0Kgy*nlbRz(7;R{R9yzNBuSR?p#;)jgBJ9pv2B2j%Ih7A zdqZ8%P18%=iO`e`yqE+nXw&&R)YGP0btq}mS`$=Q^;WeV_nV=6W6V|IsCO0Sh;S1C z-2T(gE?g0!q{f-3Q0MAUxa$|byDWrd-4XQ~Y>k*%%R;#32Y%}9b=mVSlt*?$Vau$r z&uOQ`h}l%QE`-At&523SG5gD}LmmLOoe|~E+6INbgXLSt@j8@zw65=&F90aK^4KGr z0N}Hy`kweC$-g6L2mOcEv}v^to%F%9y?3GlW$d4Yegiz!-Xkv-Tq*zn002ovPDHLk FV1hfEx|;w1 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_cake.png b/app/src/main/res/drawable-xhdpi/ic_cake.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8f140fcd296cbf0a3a8294f6fccf32020c90ab GIT binary patch literal 490 zcmVEl4eT?ABst>?-4J^ii|T1C^k^qMKOAdh8ko1X0Gu zrXZ<9ZGbM(JK4Yh_C zKZ@um2bT?gqgK@eS^7ic<6LuJ)3lMbNxRpsi*xEazmVCaHGm+h46t}hQasx=UJD{c zkrpkAq{R4ll!>|Tmw7{%6Dl0|_&0UO1A;SMk8q1NLmw@46UpC>c}f08E}2!Rl2W1@e0-~s;) gjK6=ij_)CG0srqj_g=eLdH?_b07*qoM6N<$g64-?mS*JcQ45M{+8t3Z}^ZUFGMsalAJ{}V+75Z zZM^3l(bfT72O!fbpnYrrkY{gefbQY6&ibAs zA7}=zru2bcp9EQv zzD7Wu0doL;a6}c<#xh~_QWcaWtoqeJS;FeR8Yo9ty;TEQgjGQe6ke785@eG_wJdhf zpeiE>rcvn{f=k#zf~s6ZAe2Z~5eWQAWi`+@e~uFAinHfS`m6?8^yY8@flwk%A`l9s zM{1yxY*L>^3V~1{Z8CvCD3EHLPy-2Wxi~}8(>>Db8!k>--t;BSHgX?IlgH@;J<^jD z8}eO-VZPv$V?h3-`Oc{H{xs`2edThaH^!X|ag%BKh)Aa+RDlw`(pi*VCP>pwMCMQg zY?(xqQ_L{Sd3H4Cl0SwG0F>zQ-R!0aAdv$2)iFtpt;(eSxH(9Pt!&2s4Ro7buCs$I z;_e~suFZBH;O-d*T${VOqXvQv7C6U#BE&h&7*DbA&SHsiy6B*TF48RdY(8O>L&S)X zV1T<6Kn)aH24p}66i^0aKn7GGtnzB0dBSQ=4HRRZJVBRdj+ps-%76?g{P_*qGnx>* SY|P#O0000>t#k+O`lEL5p^|5I2b~d{5usg}wZPikkwF zA;~}eQzr{cXcHvyz;Vh-B#F21SqfOf>* zGzst^yNLZx&>TQNPW71rsN)c)5`@eEgmG)y1i;g{m*z?R0aM5t*B`KrteF0Q6J#Ch z4>(5Fk^X=fvNrVxj3aAAe?SXq+)C4I!h>uAw?@r)5(inssc$IL7a$TQgg>M-qm-HT zLes(+QI0rblM$ND+?DWtS%3wY4-m5e3$OqSumF<*4fGIUk0gaI$sQ5jqdtFtdcvf* z=u*s3n-4$-35r#m_VWU|DRy1w0d$~4?Op-(B+#Kab>0ABbSdlw&_D`ZO7WOFpa-4m zRR=`Ssjt-md+5|XbwCoGN>ic=(5>MA7hnP7EaIgVhI9ao;UnOIu>9|mZWjq499gIn zmNEKn6n+yDSn^DuS5hwDOZGVCXN}PR9ODE z#JD8f?H%HrZH9->x2@8~hy2C~hiouN$YJ>aD+0ksh+e+p7q(fYPu$_5obLeG5(!k% z$M@_LC(0zx5TJ%vxyoH~X`3 + + + + + + + + + + + + + + + + +