From 6e2cbb23cc3de7bc014bbf216ad477f6651ed593 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 18 Aug 2020 15:40:24 +1000 Subject: [PATCH] Exclude existing group members from the add members screen --- .../securesms/loki/activities/CreateClosedGroupActivity.kt | 2 +- .../securesms/loki/activities/EditClosedGroupActivity.kt | 1 + .../securesms/loki/activities/SelectContactsActivity.kt | 6 +++++- .../securesms/loki/activities/SelectContactsLoader.kt | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt b/src/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt index 2add7f3e56..35855ccad7 100644 --- a/src/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt @@ -66,7 +66,7 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM // region Updating override fun onCreateLoader(id: Int, bundle: Bundle?): Loader> { - return SelectContactsLoader(this) + return SelectContactsLoader(this, setOf()) } override fun onLoadFinished(loader: Loader>, members: List) { diff --git a/src/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt b/src/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt index 75f6f2a18d..e66883325c 100644 --- a/src/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt @@ -180,6 +180,7 @@ class EditClosedGroupActivity : PassphraseRequiredActionBarActivity() { private fun onAddMembersClick() { val intent = Intent(this@EditClosedGroupActivity, SelectContactsActivity::class.java) + intent.putExtra(SelectContactsActivity.Companion.usersToExcludeKey, members.toTypedArray()) startActivityForResult(intent, Companion.addUsersRequestCode) } diff --git a/src/org/thoughtcrime/securesms/loki/activities/SelectContactsActivity.kt b/src/org/thoughtcrime/securesms/loki/activities/SelectContactsActivity.kt index 5f2c3942da..9292f143bd 100644 --- a/src/org/thoughtcrime/securesms/loki/activities/SelectContactsActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/activities/SelectContactsActivity.kt @@ -18,12 +18,14 @@ import org.thoughtcrime.securesms.mms.GlideApp class SelectContactsActivity : PassphraseRequiredActionBarActivity(), LoaderManager.LoaderCallbacks> { private var members = listOf() set(value) { field = value; selectContactsAdapter.members = value } + private lateinit var usersToExclude: Set private val selectContactsAdapter by lazy { SelectContactsAdapter(this, GlideApp.with(this)) } companion object { + val usersToExcludeKey = "usersToExcludeKey" val selectedContactsKey = "selectedContactsKey" } @@ -34,6 +36,8 @@ class SelectContactsActivity : PassphraseRequiredActionBarActivity(), LoaderMana setContentView(R.layout.activity_select_contacts) supportActionBar!!.title = resources.getString(R.string.activity_select_contacts_title) + usersToExclude = intent.getStringArrayExtra(Companion.usersToExcludeKey)?.toSet() ?: setOf() + recyclerView.adapter = selectContactsAdapter recyclerView.layoutManager = LinearLayoutManager(this) @@ -48,7 +52,7 @@ class SelectContactsActivity : PassphraseRequiredActionBarActivity(), LoaderMana // region Updating override fun onCreateLoader(id: Int, bundle: Bundle?): Loader> { - return SelectContactsLoader(this) + return SelectContactsLoader(this, usersToExclude) } override fun onLoadFinished(loader: Loader>, members: List) { diff --git a/src/org/thoughtcrime/securesms/loki/activities/SelectContactsLoader.kt b/src/org/thoughtcrime/securesms/loki/activities/SelectContactsLoader.kt index 44a3d8cd1f..35e1b2cc7d 100644 --- a/src/org/thoughtcrime/securesms/loki/activities/SelectContactsLoader.kt +++ b/src/org/thoughtcrime/securesms/loki/activities/SelectContactsLoader.kt @@ -4,12 +4,12 @@ import android.content.Context import org.thoughtcrime.securesms.loki.utilities.ContactUtilities import org.thoughtcrime.securesms.util.AsyncLoader -class SelectContactsLoader(context: Context) : AsyncLoader>(context) { +class SelectContactsLoader(context: Context, val usersToExclude: Set) : AsyncLoader>(context) { override fun loadInBackground(): List { val contacts = ContactUtilities.getAllContacts(context) return contacts.filter { contact -> - !contact.recipient.isGroupRecipient && !contact.isOurDevice && !contact.isSlave + !contact.recipient.isGroupRecipient && !contact.isOurDevice && !contact.isSlave && !usersToExclude.contains(contact.recipient.address.toPhoneString()) }.map { it.recipient.address.toPhoneString() }