adding a toggle for optional duplicate contact filtering, enabled by default

This commit is contained in:
tibbi
2018-04-30 20:13:22 +02:00
parent 23aa17df6f
commit 28dd320b9e
18 changed files with 60 additions and 15 deletions

View File

@ -48,6 +48,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
private var storedShowContactThumbnails = false
private var storedShowPhoneNumbers = false
private var storedStartNameWithSurname = false
private var storedFilterDuplicates = true
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -118,6 +119,10 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
favorites_fragment?.startNameWithSurnameChanged(configStartNameWithSurname)
}
if (storedFilterDuplicates != config.filterDuplicates) {
refreshContacts(ALL_TABS_MASK)
}
if (werePermissionsHandled && !isFirstResume) {
if (viewpager.adapter == null) {
initFragments()
@ -175,6 +180,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
storedShowContactThumbnails = showContactThumbnails
storedShowPhoneNumbers = showPhoneNumbers
storedStartNameWithSurname = startNameWithSurname
storedFilterDuplicates = filterDuplicates
}
}

View File

@ -31,6 +31,7 @@ class SettingsActivity : SimpleActivity() {
setupShowContactThumbnails()
setupShowPhoneNumbers()
setupStartNameWithSurname()
setupFilterDuplicates()
setupOnContactClick()
updateTextColors(settings_holder)
}
@ -97,6 +98,14 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun setupFilterDuplicates() {
settings_filter_duplicates.isChecked = config.filterDuplicates
settings_filter_duplicates_holder.setOnClickListener {
settings_filter_duplicates.toggle()
config.filterDuplicates = settings_filter_duplicates.isChecked
}
}
private fun setupOnContactClick() {
settings_on_contact_click.text = getOnContactClickText()
settings_on_contact_click_holder.setOnClickListener {

View File

@ -44,4 +44,8 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getInt(SHOW_CONTACT_FIELDS, SHOW_FIRST_NAME_FIELD or SHOW_SURNAME_FIELD or SHOW_PHONE_NUMBERS_FIELD or SHOW_EMAILS_FIELD or
SHOW_ADDRESSES_FIELD or SHOW_EVENTS_FIELD or SHOW_NOTES_FIELD or SHOW_GROUPS_FIELD or SHOW_CONTACT_SOURCE_FIELD)
set(showContactFields) = prefs.edit().putInt(SHOW_CONTACT_FIELDS, showContactFields).apply()
var filterDuplicates: Boolean
get() = prefs.getBoolean(FILTER_DUPLICATES, true)
set(filterDuplicates) = prefs.edit().putBoolean(FILTER_DUPLICATES, filterDuplicates).apply()
}

View File

@ -12,6 +12,7 @@ const val LOCAL_ACCOUNT_NAME = "local_account_name"
const val LOCAL_ACCOUNT_TYPE = "local_account_type"
const val ON_CONTACT_CLICK = "on_contact_click"
const val SHOW_CONTACT_FIELDS = "show_contact_fields"
const val FILTER_DUPLICATES = "filter_duplicates"
const val CONTACT_ID = "contact_id"
const val SMT_PRIVATE = "smt_private" // used at the contact source of local contacts hidden from other apps

View File

@ -41,9 +41,11 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
val contactsSize = contacts.size()
var resultContacts = ArrayList<Contact>(contactsSize)
(0 until contactsSize).mapTo(resultContacts) { contacts.valueAt(it) }
resultContacts = resultContacts.distinctBy {
it.getHashToCompare()
} as ArrayList<Contact>
if (activity.config.filterDuplicates) {
resultContacts = resultContacts.distinctBy {
it.getHashToCompare()
} as ArrayList<Contact>
}
// groups are obtained with contactID, not rawID, so assign them to proper contacts like this
val groups = getContactGroups(getStoredGroups())