From 707f3ee4a022728c72b7a93aba101acfd6e7bdb9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 19 Mar 2018 15:30:57 +0100 Subject: [PATCH] handle counting group members --- .../contacts/activities/MainActivity.kt | 2 +- .../contacts/fragments/GroupsFragment.kt | 15 +++++++++++++ .../contacts/helpers/ContactsHelper.kt | 21 ++++++++++--------- .../contacts/models/Group.kt | 4 +++- 4 files changed, 30 insertions(+), 12 deletions(-) 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 27a0cadd..16392e06 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -286,7 +286,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { invalidateOptionsMenu() } }) - viewpager.currentItem = config.lastUsedViewPagerPage main_tabs_holder.onTabSelectionChanged( tabUnselectedAction = { @@ -409,6 +408,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { if (viewpager.adapter == null) { viewpager.adapter = ViewPagerAdapter(this, it) + viewpager.currentItem = config.lastUsedViewPagerPage } if (refreshContactsTab) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt index e52fe7e7..f9a2a013 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/GroupsFragment.kt @@ -4,11 +4,14 @@ import android.content.Context import android.support.design.widget.CoordinatorLayout import android.util.AttributeSet import com.simplemobiletools.contacts.activities.MainActivity +import com.simplemobiletools.contacts.helpers.ContactsHelper import com.simplemobiletools.contacts.interfaces.FragmentInterface import com.simplemobiletools.contacts.models.Contact class GroupsFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet), FragmentInterface { + var activity: MainActivity? = null override fun setupFragment(activity: MainActivity) { + this.activity = activity } override fun textColorChanged(color: Int) { @@ -18,5 +21,17 @@ class GroupsFragment(context: Context, attributeSet: AttributeSet) : Coordinator } override fun refreshContacts(contacts: ArrayList) { + if (activity == null) { + return + } + + val storedGroups = ContactsHelper(activity!!).getStoredGroups() + contacts.forEach { + it.groups.forEach { + val group = it + val storedGroup = storedGroups.firstOrNull { it.id == group.id } + storedGroup?.addContact() + } + } } } 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 ee8c0980..249138e9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -101,13 +101,6 @@ class ContactsHelper(val activity: BaseSimpleActivity) { contacts[key]?.notes = notes.valueAt(i) } - val groups = getContactGroups(getStoredGroups()) - size = groups.size() - for (i in 0 until size) { - val key = groups.keyAt(i) - contacts[key]?.groups = groups.valueAt(i) - } - activity.dbHelper.getContacts().forEach { contacts.put(it.id, it) } @@ -116,6 +109,15 @@ class ContactsHelper(val activity: BaseSimpleActivity) { var resultContacts = ArrayList(contactsSize) (0 until contactsSize).mapTo(resultContacts) { contacts.valueAt(it) } resultContacts = resultContacts.distinctBy { it.contactId } as ArrayList + + // groups are obtained with contactID, not rawID, so assign them to proper contacts like this + val groups = getContactGroups(getStoredGroups()) + size = groups.size() + for (i in 0 until size) { + val key = groups.keyAt(i) + resultContacts.firstOrNull { it.contactId == key }?.groups = groups.valueAt(i) + } + activity.runOnUiThread { callback(resultContacts) } @@ -336,12 +338,11 @@ class ContactsHelper(val activity: BaseSimpleActivity) { val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) val newRowId = cursor.getLongValue(ContactsContract.Data.DATA1) + val groupTitle = storedGroups.firstOrNull { it.id == newRowId }?.title ?: continue + val group = Group(newRowId, groupTitle) if (groups[id] == null) { groups.put(id, ArrayList()) } - - val groupTitle = storedGroups.firstOrNull { it.id == newRowId }?.title ?: continue - val group = Group(newRowId, groupTitle) groups[id]!!.add(group) } while (cursor.moveToNext()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt index dbd23558..cf8cc42e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Group.kt @@ -1,3 +1,5 @@ package com.simplemobiletools.contacts.models -data class Group(var id: Long, var title: String) +data class Group(var id: Long, var title: String, var contactsCount: Int = 0) { + fun addContact() = contactsCount++ +}