From 5b55467691b2504e88cbfaf44365b7bb2dc6b3ee Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 13 Apr 2018 11:51:58 +0200 Subject: [PATCH] fetch contact websites --- .../activities/EditContactActivity.kt | 3 +- .../contacts/fragments/MyViewPagerFragment.kt | 3 +- .../contacts/helpers/ContactsHelper.kt | 53 +++++++++++++++++- .../contacts/helpers/DBHelper.kt | 4 +- .../contacts/helpers/VcfImporter.kt | 12 ++-- .../contacts/models/Contact.kt | 2 +- app/src/main/res/drawable-hdpi/ic_link.png | Bin 0 -> 334 bytes app/src/main/res/drawable-xhdpi/ic_link.png | Bin 0 -> 371 bytes app/src/main/res/drawable-xxhdpi/ic_link.png | Bin 0 -> 537 bytes app/src/main/res/drawable-xxxhdpi/ic_link.png | Bin 0 -> 704 bytes 10 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_link.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_link.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_link.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_link.png diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt index 8a77a161..6ba8d2f0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt @@ -467,7 +467,8 @@ class EditContactActivity : ContactActivity() { supportActionBar?.title = resources.getString(R.string.new_contact) val contactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE val organization = Organization("", "") - contact = Contact(0, "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), contactSource, 0, 0, "", null, "", ArrayList(), organization) + contact = Contact(0, "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), contactSource, 0, 0, "", null, "", + ArrayList(), organization, ArrayList()) contact_source.text = getPublicContactSource(contact!!.source) contact_source.setOnClickListener { showContactSourcePicker(contact!!.source) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt index 7c3bd4cc..2bbcdd25 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt @@ -240,7 +240,8 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) it.addresses.any { it.value.contains(text, true) } || it.notes.contains(text, true) || it.organization.company.contains(text, true) || - it.organization.jobPosition.contains(text, true) + it.organization.jobPosition.contains(text, true) || + it.websites.any { it.contains(text, true) } } as ArrayList Contact.sorting = config.sorting 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 397a5937..8804a680 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -87,8 +87,9 @@ class ContactsHelper(val activity: BaseSimpleActivity) { val notes = "" val groups = ArrayList() val organization = Organization("", "") + val websites = ArrayList() val contact = Contact(id, prefix, firstName, middleName, surname, suffix, photoUri, number, emails, addresses, events, - accountName, starred, contactId, thumbnailUri, null, notes, groups, organization) + accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites) contacts.put(id, contact) } while (cursor.moveToNext()) } @@ -139,6 +140,13 @@ class ContactsHelper(val activity: BaseSimpleActivity) { val key = organizations.keyAt(i) contacts[key]?.organization = organizations.valueAt(i) } + + val websites = getWebsites() + size = websites.size() + for (i in 0 until size) { + val key = websites.keyAt(i) + contacts[key]?.websites = websites.valueAt(i) + } } private fun getPhoneNumbers(contactId: Int? = null): SparseArray> { @@ -369,6 +377,46 @@ class ContactsHelper(val activity: BaseSimpleActivity) { return organizations } + private fun getWebsites(contactId: Int? = null): SparseArray> { + val websites = SparseArray>() + val uri = ContactsContract.Data.CONTENT_URI + val projection = arrayOf( + ContactsContract.Data.RAW_CONTACT_ID, + CommonDataKinds.Website.URL + ) + + var selection = "${ContactsContract.Data.MIMETYPE} = ?" + var selectionArgs = arrayOf(CommonDataKinds.Website.CONTENT_ITEM_TYPE) + + if (contactId != null) { + selection += " AND ${ContactsContract.Data.RAW_CONTACT_ID} = ?" + selectionArgs = arrayOf(CommonDataKinds.Website.CONTENT_ITEM_TYPE, contactId.toString()) + } + + var cursor: Cursor? = null + try { + cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, null) + if (cursor?.moveToFirst() == true) { + do { + val id = cursor.getIntValue(ContactsContract.Data.RAW_CONTACT_ID) + val url = cursor.getStringValue(CommonDataKinds.Website.URL) ?: continue + + if (websites[id] == null) { + websites.put(id, ArrayList()) + } + + websites[id]!!.add(url) + } while (cursor.moveToNext()) + } + } catch (e: Exception) { + activity.showErrorToast(e) + } finally { + cursor?.close() + } + + return websites + } + private fun getContactGroups(storedGroups: ArrayList, contactId: Int? = null): SparseArray> { val groups = SparseArray>() if (!activity.hasContactPermissions()) { @@ -560,8 +608,9 @@ class ContactsHelper(val activity: BaseSimpleActivity) { val groups = getContactGroups(storedGroups, contactId)[contactId] ?: ArrayList() val thumbnailUri = cursor.getStringValue(CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI) ?: "" val organization = getOrganizations(id)[id] ?: Organization("", "") + val websites = getWebsites(id)[id] ?: ArrayList() return Contact(id, prefix, firstName, middleName, surname, suffix, photoUri, number, emails, addresses, events, accountName, - starred, contactId, thumbnailUri, null, notes, groups, organization) + starred, contactId, thumbnailUri, null, notes, groups, organization, websites) } } finally { cursor?.close() diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt index f16e2952..d0fe214e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt @@ -295,8 +295,10 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont val jobPosition = cursor.getStringValue(COL_JOB_POSITION) val organization = Organization(company, jobPosition) + val websites = ArrayList() + val contact = Contact(id, prefix, firstName, middleName, surname, suffix, "", phoneNumbers, emails, addresses, events, - SMT_PRIVATE, starred, id, "", photo, notes, groups, organization) + SMT_PRIVATE, starred, id, "", photo, notes, groups, organization, websites) contacts.add(contact) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/VcfImporter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/VcfImporter.kt index ed998f9c..c1938d19 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/VcfImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/VcfImporter.kt @@ -26,13 +26,14 @@ class VcfImporter(val activity: SimpleActivity) { private var curSuffix = "" private var curPhotoUri = "" private var curNotes = "" + private var curCompany = "" + private var curJobPosition = "" private var curPhoneNumbers = ArrayList() private var curEmails = ArrayList() private var curEvents = ArrayList() private var curAddresses = ArrayList
() private var curGroups = ArrayList() - private var curCompany = "" - private var curJobPosition = "" + private var curWebsites = ArrayList() private var isGettingPhoto = false private var currentPhotoString = StringBuilder() @@ -253,7 +254,7 @@ class VcfImporter(val activity: SimpleActivity) { private fun saveContact(source: String) { val organization = Organization(curCompany, curJobPosition) val contact = Contact(0, curPrefix, curFirstName, curMiddleName, curSurname, curSuffix, curPhotoUri, curPhoneNumbers, curEmails, curAddresses, curEvents, - source, 0, 0, "", null, curNotes, curGroups, organization) + source, 0, 0, "", null, curNotes, curGroups, organization, curWebsites) if (ContactsHelper(activity).insertContact(contact)) { contactsImported++ } @@ -267,13 +268,14 @@ class VcfImporter(val activity: SimpleActivity) { curSuffix = "" curPhotoUri = "" curNotes = "" + curCompany = "" + curJobPosition = "" curPhoneNumbers = ArrayList() curEmails = ArrayList() curEvents = ArrayList() curAddresses = ArrayList() curGroups = ArrayList() - curCompany = "" - curJobPosition = "" + curWebsites = ArrayList() isGettingPhoto = false currentPhotoString = StringBuilder() 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 6ea68447..a4a422a3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt @@ -8,7 +8,7 @@ import com.simplemobiletools.commons.helpers.SORT_DESCENDING data class Contact(val id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var photoUri: String, var phoneNumbers: ArrayList, var emails: ArrayList, var addresses: ArrayList
, var events: ArrayList, var source: String, var starred: Int, val contactId: Int, val thumbnailUri: String, var photo: Bitmap?, var notes: String, - var groups: ArrayList, var organization: Organization) : Comparable { + var groups: ArrayList, var organization: Organization, var websites: ArrayList) : Comparable { companion object { var sorting = 0 var startWithSurname = false diff --git a/app/src/main/res/drawable-hdpi/ic_link.png b/app/src/main/res/drawable-hdpi/ic_link.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0ce3836a2dea25cd9858ed215092f25716d3c3 GIT binary patch literal 334 zcmV-U0kQsxP)~tpxD}EOab# z?1s6pgELk_=KJYxabOtkjeh;^#ys-QLQypq!nk&_^xjjMs2A!zcY}0=5DKLG;$;)G z3#}nI+yv!-b2D$esu~JmSUY*`gEPQP3K=LtE)y-vbLObACbm#=^rO+BY5LHD( zQS}g9rO*$26SbNawZ7w53YGZ!Ptea4y2h>hojz><)+w|Pjzot}!77Ee{RXp^zyF>E zC=F65%mEkXCf-(!gfOa|Onh_+$TwY)gU(lE)pTiJ_}m)$#1RQvsZ zU5Y&L6>sDnW_fvec^0nRtF`)zF8#G?cQzKHU+8z?L%MMQ;N5B*IC2e>0oXbk2Cf0H z_vm-8=t{mn*?%GifC~VnGllppiJuug${ zz?qoQ8gQEeHP|O_KR)79#~M(jKnotlEFhGi83LYW1J9s2)DtbW;57yA04p)04d5mP zHh`TIF|kt>;4%dk-T@C2iBrD-wIT(=3c!oCWATNSHYxz$hK}790FBb0UeT3&f7Sxv z$Jn{v&OX=QlXKnc+}mWJ?jC0x2!*vJH`PfQByeuUa76IA9Ad7er5+q<@XE1`7um}rVY?|~TZ5ls7c1uYn-ar!K zv(<2zz?n>R-oUcw_iv|oU=rqi#r;>DbIv*EoTJPE9R@_qu!s)JjEDg@)F>fo6YN!K z@rL?LkeYBohR>4C(UInCQ%B zx(u1K>^4i#5lIg;*hX^L4ktX5R9_WTB|=s0WI{g37$0_U)h!s(}RDDXMJ;4T#Omf7Y7J&(eZe-wuk14UwQh z!XvS<9W*1>4Ib1ZHvK1pHvh_=vb?eZu{k?IgLbq1sBcgwNWh(;uI->2>X}looG<)A z?WKJ>Ca6}hpes~F(GC(WQ12WE$@vDTb0jUO!YGk+Njc}2bp@zbw$p=zI!P~_Qq3i1 zmot8obeQD`+hN&)M|%7+COY$(9#1S-*3Np!zu(9q|2tdRuR*uLgW7DZcTub}3KsOr z;YY606`D+P4~jTXyTz=&CG69t&zR|_f~Jh=bIsnWgR!vjd5{N%oCkT32YHYOd5{Nr bkO%z*3sQ_1m6K7o00000NkvXXu0mjflS=WO literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_link.png b/app/src/main/res/drawable-xxxhdpi/ic_link.png new file mode 100644 index 0000000000000000000000000000000000000000..2f793953b187f8144bdea2f1193a3b81f63e34de GIT binary patch literal 704 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z|`*P;uuoF`1Youw{)V+@sIlr zH{S5vBD*T^Na%)EtzUL5tnsZc9=L`_$7)Bd77=$3%}>TYkPGzETskEPN_>?FIBB@;FX zAIhEKs}+&Ny5$f6U#>|w+3VA{{;tSL9xKZr4WnEWM} z`QB&oJ?sZG_xf|52w?DM+-ARIG5ed#Cs`}`emtEKQ5;+EFpt~nW~bB!2kYrNhAn#@ zY|<%qwJr{1vI{y~c3de_r7<<)nOyYLe;*jDZ>*DW7rMiunsYmmxh*s4m%Er}h4K`` ztCBq88#-V16&^Xf??c1O=ot+nqCVXn%UNf5mF#3rGl-q^P3(fRm+-&sPGmpv|^uFxkd6fBn$1#(ad>(~=v-UNc z`nc}8!+3~oS+$w~|8FnZ%T_{a3f|1Yoq{S4dxH*!JP+Q%kSHEK^E_w$FVUQ6j~fk) zc^hp7E=<0#cDI}CZQk04%q^9-G=&Yi_B=RtqR`iRb6|YV+e@AkncDx9`K;Nw&VGqQ zr{A^-D;P8V;?J%=YIFA@b4#4|!Egt=Kc{1>Gt2g{=Un`|hq=#k)jg)X8NH7?R?g3T z)yaP4r(=9gdrfoA@+lDx6H9-`UzdFl*QLqSXR+8z`C9{9=sAm|R?l6Jtkb^Q^LErr fEnvinKFB-2vAFrLr|>W^WioiW`njxgN@xNALZvin literal 0 HcmV?d00001