diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index d8e754775a..5fdf5d0f37 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -342,6 +342,7 @@ public final class ContactSelectionListFragment extends LoggingFragment { .map(r -> new ContactSearchKey.RecipientSearchKey(r, false)) .collect(java.util.stream.Collectors.toSet()), selectionLimit, + isMulti, new ContactSearchAdapter.DisplayOptions( isMulti, ContactSearchAdapter.DisplaySecondaryInformation.ALWAYS, diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt index 2c3a22b6e3..3864851f38 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchMediator.kt @@ -43,6 +43,7 @@ class ContactSearchMediator( private val fragment: Fragment, private val fixedContacts: Set = setOf(), selectionLimits: SelectionLimits, + private val isMultiSelect: Boolean = true, displayOptions: ContactSearchAdapter.DisplayOptions, mapStateToConfiguration: (ContactSearchState) -> ContactSearchConfiguration, private val callbacks: Callbacks = SimpleCallbacks(), @@ -61,6 +62,7 @@ class ContactSearchMediator( fragment, ContactSearchViewModel.Factory( selectionLimits = selectionLimits, + isMultiSelect = isMultiSelect, repository = ContactSearchRepository(), performSafetyNumberChecks = performSafetyNumberChecks, arbitraryRepository = arbitraryRepository, diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel.kt index 581465e395..7d8710c3c0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel.kt @@ -33,6 +33,7 @@ import org.whispersystems.signalservice.api.util.Preconditions class ContactSearchViewModel( private val savedStateHandle: SavedStateHandle, private val selectionLimits: SelectionLimits, + private val isMultiSelect: Boolean, private val contactSearchRepository: ContactSearchRepository, private val performSafetyNumberChecks: Boolean, private val arbitraryRepository: ArbitraryRepository?, @@ -116,7 +117,11 @@ class ContactSearchViewModel( safetyNumberRepository.batchSafetyNumberCheck(newSelectionEntries) } - internalSelectedContacts.update { it + newSelectionEntries } + if (!isMultiSelect && newSelectionEntries.isNotEmpty()) { + internalSelectedContacts.update { newSelectionEntries.toSet() } + } else { + internalSelectedContacts.update { it + newSelectionEntries } + } } } @@ -172,6 +177,7 @@ class ContactSearchViewModel( class Factory( private val selectionLimits: SelectionLimits, + private val isMultiSelect: Boolean = true, private val repository: ContactSearchRepository, private val performSafetyNumberChecks: Boolean, private val arbitraryRepository: ArbitraryRepository?, @@ -183,6 +189,7 @@ class ContactSearchViewModel( ContactSearchViewModel( savedStateHandle = handle, selectionLimits = selectionLimits, + isMultiSelect = isMultiSelect, contactSearchRepository = repository, performSafetyNumberChecks = performSafetyNumberChecks, arbitraryRepository = arbitraryRepository, diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt index 846dbf4178..696f1105f5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragment.kt @@ -123,16 +123,17 @@ class MultiselectForwardFragment : contactSearchRecycler = view.findViewById(R.id.contact_selection_list) contactSearchMediator = ContactSearchMediator( - this, - emptySet(), - RemoteConfig.shareSelectionLimit, - ContactSearchAdapter.DisplayOptions( + fragment = this, + fixedContacts = emptySet(), + selectionLimits = RemoteConfig.shareSelectionLimit, + isMultiSelect = !args.selectSingleRecipient, + displayOptions = ContactSearchAdapter.DisplayOptions( displayCheckBox = !args.selectSingleRecipient, displaySecondaryInformation = ContactSearchAdapter.DisplaySecondaryInformation.NEVER, displayStoryRing = true ), - this::getConfiguration, - object : ContactSearchMediator.SimpleCallbacks() { + mapStateToConfiguration = this::getConfiguration, + callbacks = object : ContactSearchMediator.SimpleCallbacks() { override fun onBeforeContactsSelected(view: View?, contactSearchKeys: Set): Set { val filtered: Set = filterContacts(view, contactSearchKeys) Log.d(TAG, "onBeforeContactsSelected() Attempting to select: ${contactSearchKeys.map { it.toString() }}, Filtered selection: ${filtered.map { it.toString() } }") diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 82d804001d..6fb5d765b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -285,6 +285,7 @@ public class ConversationListFragment extends MainFragment implements Conversati contactSearchMediator = new ContactSearchMediator(this, Collections.emptySet(), SelectionLimits.NO_LIMITS, + false, new ContactSearchAdapter.DisplayOptions( false, ContactSearchAdapter.DisplaySecondaryInformation.NEVER, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt index 377196dde9..9a4f0c482a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseGroupStoryBottomSheet.kt @@ -66,6 +66,7 @@ class ChooseGroupStoryBottomSheet : FixedRoundedCornerBottomSheetDialogFragment( mediator = ContactSearchMediator( fragment = this, selectionLimits = RemoteConfig.shareSelectionLimit, + isMultiSelect = true, displayOptions = ContactSearchAdapter.DisplayOptions( displayCheckBox = true, displaySecondaryInformation = ContactSearchAdapter.DisplaySecondaryInformation.NEVER diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/connections/ViewAllSignalConnectionsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/connections/ViewAllSignalConnectionsFragment.kt index 866228d3aa..70a2b530d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/connections/ViewAllSignalConnectionsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/connections/ViewAllSignalConnectionsFragment.kt @@ -28,6 +28,7 @@ class ViewAllSignalConnectionsFragment : Fragment(R.layout.view_all_signal_conne val mediator = ContactSearchMediator( fragment = this, selectionLimits = SelectionLimits(0, 0), + isMultiSelect = false, displayOptions = ContactSearchAdapter.DisplayOptions( displayCheckBox = false, displaySecondaryInformation = ContactSearchAdapter.DisplaySecondaryInformation.NEVER