diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt index 2ad317bdba..f3a7f94bd4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt @@ -32,6 +32,10 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM set(newValue) { field = newValue; invalidateOptionsMenu() } private var members = listOf() set(value) { field = value; selectContactsAdapter.members = value } + private val publicKey: String + get() { + return TextSecurePreferences.getLocalNumber(this)!! + } private val selectContactsAdapter by lazy { SelectContactsAdapter(this, GlideApp.with(this)) @@ -72,7 +76,8 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM } private fun update(members: List) { - this.members = members + //if there is a Note to self conversation, it loads self in the list, so we need to remove it here + this.members = members.minus(publicKey) mainContentContainer.visibility = if (members.isEmpty()) View.GONE else View.VISIBLE emptyStateContainer.visibility = if (members.isEmpty()) View.VISIBLE else View.GONE invalidateOptionsMenu() diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt index 135762f661..e8bbede270 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt @@ -36,6 +36,27 @@ class SelectContactsAdapter(private val context: Context, private val glide: Gli isSelected) } + override fun onBindViewHolder(viewHolder: ViewHolder, + position: Int, + payloads: MutableList) { + if (payloads.isNotEmpty()) { + // Because these updates can be batched, + // there can be multiple payloads for a single bind + when (payloads[0]) { + Payload.MEMBER_CLICKED -> { + val member = members[position] + val isSelected = selectedMembers.contains(member) + viewHolder.view.toggleCheckbox(isSelected) + } + } + } else { + // When payload list is empty, + // or we don't have logic to handle a given type, + // default to full bind: + this.onBindViewHolder(viewHolder, position) + } + } + private fun onMemberClick(member: String) { if (selectedMembers.contains(member)) { selectedMembers.remove(member) @@ -43,6 +64,11 @@ class SelectContactsAdapter(private val context: Context, private val glide: Gli selectedMembers.add(member) } val index = members.indexOf(member) - notifyItemChanged(index) + notifyItemChanged(index, Payload.MEMBER_CLICKED) } -} \ No newline at end of file + + // define below the different events used to notify the adapter + enum class Payload { + MEMBER_CLICKED + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt index 4c6098a710..19642a6c87 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt @@ -82,8 +82,13 @@ class UserView : LinearLayout { } } + fun toggleCheckbox(isSelected: Boolean = false) { + actionIndicatorImageView.visibility = View.VISIBLE + actionIndicatorImageView.setImageResource(if (isSelected) R.drawable.ic_circle_check else R.drawable.ic_circle) + } + fun unbind() { } // endregion -} \ No newline at end of file +}