Skip to content

Commit f9e3854

Browse files
committed
do not store the visible contact sources, store the ignored ones instead
1 parent 22a4cca commit f9e3854

File tree

11 files changed

+49
-30
lines changed

11 files changed

+49
-30
lines changed

app/src/main/kotlin/com/simplemobiletools/contacts/activities/SelectContactActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.simplemobiletools.contacts.dialogs.ChangeSortingDialog
1818
import com.simplemobiletools.contacts.dialogs.FilterContactSourcesDialog
1919
import com.simplemobiletools.contacts.extensions.config
2020
import com.simplemobiletools.contacts.extensions.getContactPublicUri
21+
import com.simplemobiletools.contacts.extensions.getVisibleContactSources
2122
import com.simplemobiletools.contacts.helpers.ContactsHelper
2223
import com.simplemobiletools.contacts.helpers.SMT_PRIVATE
2324
import com.simplemobiletools.contacts.models.Contact
@@ -98,7 +99,7 @@ class SelectContactActivity : SimpleActivity() {
9899
}
99100
} as ArrayList<Contact>
100101

101-
val contactSources = config.displayContactSources
102+
val contactSources = getVisibleContactSources()
102103
contacts = contacts.filter { contactSources.contains(it.source) } as ArrayList<Contact>
103104

104105
Contact.sorting = config.sorting

app/src/main/kotlin/com/simplemobiletools/contacts/adapters/FilterContactSourcesAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import com.simplemobiletools.contacts.models.ContactSource
1414
import kotlinx.android.synthetic.main.item_filter_contact_source.view.*
1515
import java.util.*
1616

17-
class FilterContactSourcesAdapter(val activity: SimpleActivity, private val contactSources: List<ContactSource>, private val displayContactSources: Set<String>) :
17+
class FilterContactSourcesAdapter(val activity: SimpleActivity, private val contactSources: List<ContactSource>, private val displayContactSources: ArrayList<String>) :
1818
RecyclerView.Adapter<FilterContactSourcesAdapter.ViewHolder>() {
1919
private val itemViews = SparseArray<View>()
2020
private val selectedPositions = HashSet<Int>()

app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/ExportContactsDialog.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.simplemobiletools.commons.extensions.*
66
import com.simplemobiletools.contacts.R
77
import com.simplemobiletools.contacts.activities.SimpleActivity
88
import com.simplemobiletools.contacts.adapters.FilterContactSourcesAdapter
9-
import com.simplemobiletools.contacts.extensions.config
9+
import com.simplemobiletools.contacts.extensions.getVisibleContactSources
1010
import com.simplemobiletools.contacts.helpers.ContactsHelper
1111
import com.simplemobiletools.contacts.helpers.SMT_PRIVATE
1212
import com.simplemobiletools.contacts.models.ContactSource
@@ -25,7 +25,7 @@ class ExportContactsDialog(val activity: SimpleActivity, val path: String, priva
2525
ContactsHelper(activity).getContactSources {
2626
it.mapTo(contactSources, { it.copy() })
2727
activity.runOnUiThread {
28-
export_contacts_list.adapter = FilterContactSourcesAdapter(activity, it, activity.config.displayContactSources)
28+
export_contacts_list.adapter = FilterContactSourcesAdapter(activity, it, activity.getVisibleContactSources())
2929
}
3030
}
3131
}

app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/FilterContactSourcesDialog.kt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.simplemobiletools.contacts.R
66
import com.simplemobiletools.contacts.activities.SimpleActivity
77
import com.simplemobiletools.contacts.adapters.FilterContactSourcesAdapter
88
import com.simplemobiletools.contacts.extensions.config
9+
import com.simplemobiletools.contacts.extensions.getVisibleContactSources
910
import com.simplemobiletools.contacts.helpers.ContactsHelper
1011
import com.simplemobiletools.contacts.helpers.SMT_PRIVATE
1112
import com.simplemobiletools.contacts.models.ContactSource
@@ -24,29 +25,36 @@ class FilterContactSourcesDialog(val activity: SimpleActivity, private val callb
2425
}
2526

2627
it.mapTo(contactSources, { it.copy() })
27-
val selectedSources = activity.config.displayContactSources
28+
val selectedSources = activity.getVisibleContactSources()
2829
activity.runOnUiThread {
2930
view.filter_contact_sources_list.adapter = FilterContactSourcesAdapter(activity, it, selectedSources)
3031

3132
dialog = AlertDialog.Builder(activity)
3233
.setPositiveButton(R.string.ok, { dialogInterface, i -> confirmEventTypes() })
3334
.setNegativeButton(R.string.cancel, null)
3435
.create().apply {
35-
activity.setupDialogStuff(view, this)
36-
}
36+
activity.setupDialogStuff(view, this)
37+
}
3738
}
3839
}
3940
}
4041

4142
private fun confirmEventTypes() {
4243
val selectedIndexes = (view.filter_contact_sources_list.adapter as FilterContactSourcesAdapter).getSelectedItemsSet()
43-
val selectedContactSources = HashSet<String>()
44-
selectedIndexes.forEach {
45-
selectedContactSources.add(if (contactSources[it].type == SMT_PRIVATE) SMT_PRIVATE else contactSources[it].name)
44+
val ignoredIndexes = ArrayList<Int>()
45+
for (i in 0 until contactSources.size) {
46+
if (!selectedIndexes.contains(i)) {
47+
ignoredIndexes.add(i)
48+
}
49+
}
50+
51+
val ignoredContactSources = HashSet<String>()
52+
ignoredIndexes.forEach {
53+
ignoredContactSources.add(if (contactSources[it].type == SMT_PRIVATE) SMT_PRIVATE else contactSources[it].name)
4654
}
4755

48-
if (activity.config.displayContactSources != selectedContactSources) {
49-
activity.config.displayContactSources = selectedContactSources
56+
if (activity.getVisibleContactSources() != ignoredContactSources) {
57+
activity.config.ignoredContactSources = ignoredContactSources
5058
callback()
5159
}
5260
dialog?.dismiss()

app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/SelectContactsDialog.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.simplemobiletools.contacts.R
77
import com.simplemobiletools.contacts.activities.SimpleActivity
88
import com.simplemobiletools.contacts.adapters.SelectContactsAdapter
99
import com.simplemobiletools.contacts.extensions.config
10+
import com.simplemobiletools.contacts.extensions.getVisibleContactSources
1011
import com.simplemobiletools.contacts.models.Contact
1112
import kotlinx.android.synthetic.main.layout_select_contact.view.*
1213

@@ -18,7 +19,7 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL
1819
init {
1920
var allContacts = initialContacts
2021
if (selectContacts == null) {
21-
val contactSources = activity.config.displayContactSources
22+
val contactSources = activity.getVisibleContactSources()
2223
allContacts = allContacts.filter { contactSources.contains(it.source) } as ArrayList<Contact>
2324

2425
initiallySelectedContacts = allContacts.filter { it.starred == 1 } as ArrayList<Contact>

app/src/main/kotlin/com/simplemobiletools/contacts/extensions/Activity.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.simplemobiletools.contacts.extensions
22

3+
import android.app.Activity
34
import android.content.Intent
45
import android.net.Uri
56
import android.provider.ContactsContract
@@ -17,6 +18,7 @@ import com.simplemobiletools.contacts.helpers.ContactsHelper
1718
import com.simplemobiletools.contacts.helpers.SMT_PRIVATE
1819
import com.simplemobiletools.contacts.helpers.VcfExporter
1920
import com.simplemobiletools.contacts.models.Contact
21+
import com.simplemobiletools.contacts.models.ContactSource
2022
import java.io.File
2123

2224
fun SimpleActivity.startCallIntent(recipient: String) {
@@ -181,3 +183,11 @@ fun BaseSimpleActivity.getContactPublicUri(contact: Contact): Uri {
181183
val lookupKey = ContactsHelper(this).getContactLookupKey(contact.id.toString())
182184
return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
183185
}
186+
187+
fun Activity.getVisibleContactSources(): ArrayList<String> {
188+
val sources = ContactsHelper(this).getDeviceContactSources()
189+
sources.add(ContactSource(getString(R.string.phone_storage_hidden), SMT_PRIVATE))
190+
val sourceNames = ArrayList(sources).map { if (it.type == SMT_PRIVATE) SMT_PRIVATE else it.name }.toMutableList() as ArrayList<String>
191+
sourceNames.removeAll(config.ignoredContactSources)
192+
return sourceNames
193+
}

app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ import com.simplemobiletools.contacts.activities.MainActivity
1515
import com.simplemobiletools.contacts.activities.SimpleActivity
1616
import com.simplemobiletools.contacts.adapters.ContactsAdapter
1717
import com.simplemobiletools.contacts.adapters.GroupsAdapter
18-
import com.simplemobiletools.contacts.extensions.config
19-
import com.simplemobiletools.contacts.extensions.editContact
20-
import com.simplemobiletools.contacts.extensions.tryStartCall
21-
import com.simplemobiletools.contacts.extensions.viewContact
18+
import com.simplemobiletools.contacts.extensions.*
2219
import com.simplemobiletools.contacts.helpers.*
2320
import com.simplemobiletools.contacts.models.Contact
2421
import com.simplemobiletools.contacts.models.Group
@@ -103,7 +100,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
103100
this is GroupsFragment -> contacts
104101
this is FavoritesFragment -> contacts.filter { it.starred == 1 } as ArrayList<Contact>
105102
else -> {
106-
val contactSources = config.displayContactSources
103+
val contactSources = activity!!.getVisibleContactSources()
107104
contacts.filter { contactSources.contains(it.source) } as ArrayList<Contact>
108105
}
109106
}

app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ class Config(context: Context) : BaseConfig(context) {
88
fun newInstance(context: Context) = Config(context)
99
}
1010

11-
var displayContactSources: HashSet<String>
12-
get() = prefs.getStringSet(DISPLAY_CONTACT_SOURCES, hashSetOf("-1")) as HashSet
13-
set(displayContactSources) = prefs.edit().remove(DISPLAY_CONTACT_SOURCES).putStringSet(DISPLAY_CONTACT_SOURCES, displayContactSources).apply()
11+
var ignoredContactSources: HashSet<String>
12+
get() = prefs.getStringSet(IGNORED_CONTACT_SOURCES, hashSetOf("")) as HashSet
13+
set(ignoreContactSources) = prefs.edit().remove(IGNORED_CONTACT_SOURCES).putStringSet(IGNORED_CONTACT_SOURCES, ignoreContactSources).apply()
1414

1515
var showContactThumbnails: Boolean
1616
get() = prefs.getBoolean(SHOW_CONTACT_THUMBNAILS, true)

app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import android.provider.ContactsContract.CommonDataKinds
55
// shared prefs
66
const val SHOW_CONTACT_THUMBNAILS = "show_contact_thumbnails"
77
const val SHOW_PHONE_NUMBERS = "show_phone_numbers"
8-
const val DISPLAY_CONTACT_SOURCES = "display_contact_sources"
8+
const val IGNORED_CONTACT_SOURCES = "ignored_contact_sources"
99
const val START_NAME_WITH_SURNAME = "start_name_with_surname"
1010
const val LAST_USED_CONTACT_SOURCE = "last_used_contact_source"
1111
const val LOCAL_ACCOUNT_NAME = "local_account_name"

app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.simplemobiletools.contacts.helpers
22

33
import android.accounts.AccountManager
4+
import android.app.Activity
45
import android.content.*
56
import android.database.Cursor
67
import android.graphics.Bitmap
@@ -11,7 +12,6 @@ import android.provider.ContactsContract.CommonDataKinds.Note
1112
import android.provider.MediaStore
1213
import android.text.TextUtils
1314
import android.util.SparseArray
14-
import com.simplemobiletools.commons.activities.BaseSimpleActivity
1515
import com.simplemobiletools.commons.extensions.*
1616
import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME
1717
import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME
@@ -22,14 +22,14 @@ import com.simplemobiletools.contacts.extensions.*
2222
import com.simplemobiletools.contacts.models.*
2323
import com.simplemobiletools.contacts.overloads.times
2424

25-
class ContactsHelper(val activity: BaseSimpleActivity) {
25+
class ContactsHelper(val activity: Activity) {
2626
private val BATCH_SIZE = 100
27-
private var displayContactSources = HashSet<String>()
27+
private var displayContactSources = ArrayList<String>()
2828

2929
fun getContacts(callback: (ArrayList<Contact>) -> Unit) {
3030
Thread {
3131
val contacts = SparseArray<Contact>()
32-
displayContactSources = activity.config.displayContactSources
32+
displayContactSources = activity.getVisibleContactSources()
3333
getDeviceContacts(contacts)
3434

3535
if (displayContactSources.contains(SMT_PRIVATE)) {
@@ -72,6 +72,7 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
7272
val selectionArgs = getSourcesSelectionArgs(CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
7373
val sortOrder = getSortString()
7474

75+
val names = HashSet<String>()
7576
var cursor: Cursor? = null
7677
try {
7778
cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
@@ -89,6 +90,7 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
8990
val addresses = ArrayList<Address>()
9091
val events = ArrayList<Event>()
9192
val accountName = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: ""
93+
names.add(accountName)
9294
val starred = cursor.getIntValue(CommonDataKinds.StructuredName.STARRED)
9395
val contactId = cursor.getIntValue(ContactsContract.Data.CONTACT_ID)
9496
val thumbnailUri = cursor.getStringValue(CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI) ?: ""
@@ -647,7 +649,7 @@ class ContactsHelper(val activity: BaseSimpleActivity) {
647649
return ArrayList(sources)
648650
}
649651

650-
private fun getDeviceContactSources(): LinkedHashSet<ContactSource> {
652+
fun getDeviceContactSources(): LinkedHashSet<ContactSource> {
651653
val sources = LinkedHashSet<ContactSource>()
652654
if (!activity.hasContactPermissions()) {
653655
return sources

0 commit comments

Comments
 (0)