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 75ef4f9ea..c6ab3f4b6 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 @@ -267,7 +267,7 @@ class MultiselectForwardFragment : } private fun getConfiguration(contactSearchState: ContactSearchState): ContactSearchConfiguration { - return ContactSearchConfiguration.build { + return findListener()?.getSearchConfiguration(contactSearchState) ?: ContactSearchConfiguration.build { query = contactSearchState.query if (Stories.isFeatureEnabled() && isSelectedMediaValidForStories()) { 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 new file mode 100644 index 000000000..9b4a61e12 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/SearchConfigurationProvider.kt @@ -0,0 +1,8 @@ +package org.thoughtcrime.securesms.conversation.mutiselect.forward + +import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration +import org.thoughtcrime.securesms.contacts.paged.ContactSearchState + +interface SearchConfigurationProvider { + fun getSearchConfiguration(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 e56796537..cbb4dcf9f 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 @@ -18,6 +18,9 @@ import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.TransportOption import org.thoughtcrime.securesms.TransportOptions import org.thoughtcrime.securesms.components.emoji.EmojiEventListener +import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration +import org.thoughtcrime.securesms.contacts.paged.ContactSearchState +import org.thoughtcrime.securesms.conversation.mutiselect.forward.SearchConfigurationProvider import org.thoughtcrime.securesms.keyboard.emoji.EmojiKeyboardPageFragment import org.thoughtcrime.securesms.keyboard.emoji.search.EmojiSearchFragment import org.thoughtcrime.securesms.mediasend.Media @@ -35,7 +38,8 @@ class MediaSelectionActivity : MediaReviewFragment.Callback, EmojiKeyboardPageFragment.Callback, EmojiEventListener, - EmojiSearchFragment.Callback { + EmojiSearchFragment.Callback, + SearchConfigurationProvider { lateinit var viewModel: MediaSelectionViewModel @@ -44,6 +48,9 @@ class MediaSelectionActivity : private val destination: MediaSelectionDestination get() = MediaSelectionDestination.fromBundle(requireNotNull(intent.getBundleExtra(DESTINATION))) + private val isStory: Boolean + get() = intent.getBooleanExtra(IS_STORY, false) + override fun attachBaseContext(newBase: Context) { delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES super.attachBaseContext(newBase) @@ -201,6 +208,24 @@ class MediaSelectionActivity : viewModel.sendCommand(HudCommand.CloseEmojiSearch) } + override fun getSearchConfiguration(contactSearchState: ContactSearchState): ContactSearchConfiguration? { + return if (isStory) { + ContactSearchConfiguration.build { + query = contactSearchState.query + + addSection( + ContactSearchConfiguration.Section.Stories( + groupStories = contactSearchState.groupStories, + includeHeader = true, + headerAction = Stories.getHeaderAction(supportFragmentManager) + ) + ) + } + } else { + null + } + } + private inner class OnBackPressed : OnBackPressedCallback(true) { override fun handleOnBackPressed() { val navController = Navigation.findNavController(this@MediaSelectionActivity, R.id.fragment_container) @@ -221,12 +246,19 @@ class MediaSelectionActivity : private const val MESSAGE = "message" private const val DESTINATION = "destination" private const val IS_REPLY = "is_reply" + private const val IS_STORY = "is_story" @JvmStatic fun camera(context: Context): Intent { + return camera(context, false) + } + + @JvmStatic + fun camera(context: Context, isStory: Boolean): Intent { return buildIntent( context = context, - startAction = R.id.action_directly_to_mediaCaptureFragment + startAction = R.id.action_directly_to_mediaCaptureFragment, + isStory = isStory ) } @@ -307,7 +339,8 @@ class MediaSelectionActivity : media: List = listOf(), destination: MediaSelectionDestination = MediaSelectionDestination.ChooseAfterMediaSelection, message: CharSequence? = null, - isReply: Boolean = false + isReply: Boolean = false, + isStory: Boolean = false ): Intent { return Intent(context, MediaSelectionActivity::class.java).apply { putExtra(START_ACTION, startAction) @@ -316,6 +349,7 @@ class MediaSelectionActivity : putExtra(MESSAGE, message) putExtra(DESTINATION, destination.toBundle()) putExtra(IS_REPLY, isReply) + putExtra(IS_STORY, isStory) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendFragment.kt index bf4878c27..d3e627557 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendFragment.kt @@ -13,7 +13,6 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.RecyclerView import org.signal.core.util.DimensionUnit import org.thoughtcrime.securesms.R -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 @@ -25,6 +24,7 @@ import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryPostCreationViewMod import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.sharing.ShareSelectionAdapter import org.thoughtcrime.securesms.sharing.ShareSelectionMappingModel +import org.thoughtcrime.securesms.stories.Stories import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs import org.thoughtcrime.securesms.stories.settings.create.CreateStoryWithViewersFragment import org.thoughtcrime.securesms.stories.settings.hide.HideStoryFromDialogFragment @@ -131,10 +131,7 @@ class TextStoryPostSendFragment : Fragment(R.layout.stories_send_text_post_fragm ContactSearchConfiguration.Section.Stories( groupStories = contactSearchState.groupStories, includeHeader = true, - headerAction = getHeaderAction(), - expandConfig = ContactSearchConfiguration.ExpandConfig( - isExpanded = contactSearchState.expandedSections.contains(ContactSearchConfiguration.SectionKey.STORIES) - ) + headerAction = Stories.getHeaderAction(childFragmentManager) ) ) } @@ -183,15 +180,6 @@ class TextStoryPostSendFragment : Fragment(R.layout.stories_send_text_post_fragm .alpha(0f) } - 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) - } - } - override fun onNewStoryClicked() { findNavController().navigate(R.id.action_textStoryPostSendFragment_to_newStory) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt index f5351efb5..ce85ecd81 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt @@ -1,7 +1,12 @@ package org.thoughtcrime.securesms.stories +import androidx.fragment.app.FragmentManager +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.contacts.HeaderAction import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.mediasend.v2.stories.ChooseStoryTypeBottomSheet import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.FeatureFlags object Stories { @@ -14,4 +19,13 @@ object Stories { fun isFeatureEnabled(): Boolean { return isFeatureAvailable() && !SignalStore.storyValues().isFeatureDisabled } + + fun getHeaderAction(fragmentManager: FragmentManager): HeaderAction { + return HeaderAction( + R.string.ContactsCursorLoader_new_story, + R.drawable.ic_plus_20 + ) { + ChooseStoryTypeBottomSheet().show(fragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG) + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt index 3b2c9e0cc..e5017d354 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingFragment.kt @@ -70,7 +70,7 @@ class StoriesLandingFragment : .ifNecessary() .withRationaleDialog(getString(R.string.ConversationActivity_to_capture_photos_and_video_allow_signal_access_to_the_camera), R.drawable.ic_camera_24) .withPermanentDenialDialog(getString(R.string.ConversationActivity_signal_needs_the_camera_permission_to_take_photos_or_video)) - .onAllGranted { startActivity(MediaSelectionActivity.camera(requireContext())) } + .onAllGranted { startActivity(MediaSelectionActivity.camera(requireContext(), isStory = true)) } .onAnyDenied { Toast.makeText(requireContext(), R.string.ConversationActivity_signal_needs_camera_permissions_to_take_photos_or_video, Toast.LENGTH_LONG).show() } .execute() }