From 87ad4be11782e48b9aed80bdf1b3ab9261429617 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 14 Mar 2022 11:05:42 -0300 Subject: [PATCH] Fix issue where user could not select a group story. --- .../forward/MultiselectForwardFragment.kt | 15 +++------------ .../forward/SearchConfigurationProvider.kt | 12 +++++++++++- .../mediasend/v2/MediaSelectionActivity.kt | 5 +++-- .../v2/stories/ChooseStoryTypeBottomSheet.kt | 6 +++--- 4 files changed, 20 insertions(+), 18 deletions(-) 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 c6ab3f4b68..0d9436f495 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 @@ -20,7 +20,6 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.ContactFilterView -import org.thoughtcrime.securesms.contacts.HeaderAction import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.contacts.paged.ContactSearchMediator @@ -35,6 +34,7 @@ import org.thoughtcrime.securesms.sharing.MultiShareArgs import org.thoughtcrime.securesms.sharing.ShareSelectionAdapter import org.thoughtcrime.securesms.sharing.ShareSelectionMappingModel import org.thoughtcrime.securesms.stories.Stories +import org.thoughtcrime.securesms.stories.Stories.getHeaderAction import org.thoughtcrime.securesms.stories.settings.create.CreateStoryFlowDialogFragment import org.thoughtcrime.securesms.stories.settings.create.CreateStoryWithViewersFragment import org.thoughtcrime.securesms.util.BottomSheetUtil @@ -257,17 +257,8 @@ class MultiselectForwardFragment : viewModel.cancelSend() } - private fun getHeaderAction(): HeaderAction { - return HeaderAction( - R.string.ContactsCursorLoader_new_story, - R.drawable.ic_plus_20 - ) { - ChooseStoryTypeBottomSheet().show(childFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG) - } - } - private fun getConfiguration(contactSearchState: ContactSearchState): ContactSearchConfiguration { - return findListener()?.getSearchConfiguration(contactSearchState) ?: ContactSearchConfiguration.build { + return findListener()?.getSearchConfiguration(childFragmentManager, contactSearchState) ?: ContactSearchConfiguration.build { query = contactSearchState.query if (Stories.isFeatureEnabled() && isSelectedMediaValidForStories()) { @@ -275,7 +266,7 @@ class MultiselectForwardFragment : ContactSearchConfiguration.Section.Stories( groupStories = contactSearchState.groupStories, includeHeader = true, - headerAction = getHeaderAction(), + headerAction = getHeaderAction(childFragmentManager), expandConfig = ContactSearchConfiguration.ExpandConfig( isExpanded = contactSearchState.expandedSections.contains(ContactSearchConfiguration.SectionKey.STORIES) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/SearchConfigurationProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/SearchConfigurationProvider.kt index 9b4a61e120..3b2ace8fe3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/SearchConfigurationProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/SearchConfigurationProvider.kt @@ -1,8 +1,18 @@ package org.thoughtcrime.securesms.conversation.mutiselect.forward +import androidx.fragment.app.FragmentManager import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration import org.thoughtcrime.securesms.contacts.paged.ContactSearchState +/** + * Allows a parent of MultiselectForwardFragment to provide a custom search page configuration. + */ interface SearchConfigurationProvider { - fun getSearchConfiguration(contactSearchState: ContactSearchState): ContactSearchConfiguration? = null + /** + * @param fragmentManager The child fragment manager of the MultiselectForwardFragment, to launch actions in to. + * @param contactSearchState The search state, to build the configuration from. + * + * @return A configuration or null. Returning null will result in MultiselectForwardFragment using it's default configuration. + */ + fun getSearchConfiguration(fragmentManager: FragmentManager, contactSearchState: ContactSearchState): ContactSearchConfiguration? = null } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt index cbb4dcf9f0..3e5c92cb41 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt @@ -9,6 +9,7 @@ import android.view.ViewGroup import androidx.activity.OnBackPressedCallback import androidx.activity.viewModels import androidx.appcompat.app.AppCompatDelegate +import androidx.fragment.app.FragmentManager import androidx.lifecycle.ViewModelProvider import androidx.navigation.Navigation import androidx.navigation.fragment.NavHostFragment @@ -208,7 +209,7 @@ class MediaSelectionActivity : viewModel.sendCommand(HudCommand.CloseEmojiSearch) } - override fun getSearchConfiguration(contactSearchState: ContactSearchState): ContactSearchConfiguration? { + override fun getSearchConfiguration(fragmentManager: FragmentManager, contactSearchState: ContactSearchState): ContactSearchConfiguration? { return if (isStory) { ContactSearchConfiguration.build { query = contactSearchState.query @@ -217,7 +218,7 @@ class MediaSelectionActivity : ContactSearchConfiguration.Section.Stories( groupStories = contactSearchState.groupStories, includeHeader = true, - headerAction = Stories.getHeaderAction(supportFragmentManager) + headerAction = Stories.getHeaderAction(fragmentManager) ) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt index 0db87d8e4e..0a0a4521fb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/stories/ChooseStoryTypeBottomSheet.kt @@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsIcon import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.components.settings.conversation.preferences.LargeIconClickPreference -import org.thoughtcrime.securesms.util.fragments.findListener +import org.thoughtcrime.securesms.util.fragments.requireListener class ChooseStoryTypeBottomSheet : DSLSettingsBottomSheetFragment( layoutId = R.layout.dsl_settings_bottom_sheet_no_handle @@ -45,7 +45,7 @@ class ChooseStoryTypeBottomSheet : DSLSettingsBottomSheetFragment( ), onClick = { dismissAllowingStateLoss() - findListener()?.onNewStoryClicked() + requireListener().onNewStoryClicked() } ) ) @@ -67,7 +67,7 @@ class ChooseStoryTypeBottomSheet : DSLSettingsBottomSheetFragment( ), onClick = { dismissAllowingStateLoss() - findListener()?.onGroupStoryClicked() + requireListener().onGroupStoryClicked() } ) )