Allow forwarding of Text Stories.

This commit is contained in:
Alex Hart
2022-03-17 16:03:26 -03:00
committed by Cody Henthorne
parent 43ad0b2294
commit e3c491860a
5 changed files with 103 additions and 46 deletions

View File

@@ -130,13 +130,15 @@ class MultiselectForwardFragment :
container.addView(bottomBar)
contactSearchMediator.getSelectionState().observe(viewLifecycleOwner) {
shareSelectionAdapter.submitList(it.mapIndexed { index, key -> ShareSelectionMappingModel(key.requireShareContact(), index == 0) })
contactSearchMediator.getSelectionState().observe(viewLifecycleOwner) { contactSelection ->
shareSelectionAdapter.submitList(contactSelection.mapIndexed { index, key -> ShareSelectionMappingModel(key.requireShareContact(), index == 0) })
if (it.isNotEmpty() && !bottomBar.isVisible) {
addMessage.visible = contactSelection.any { key -> key !is ContactSearchKey.Story } && getMultiShareArgs().isNotEmpty()
if (contactSelection.isNotEmpty() && !bottomBar.isVisible) {
bottomBar.animation = AnimationUtils.loadAnimation(requireContext(), R.anim.slide_fade_from_bottom)
bottomBar.visible = true
} else if (it.isEmpty() && bottomBar.isVisible) {
} else if (contactSelection.isEmpty() && bottomBar.isVisible) {
bottomBar.animation = AnimationUtils.loadAnimation(requireContext(), R.anim.slide_fade_to_bottom)
bottomBar.visible = false
}
@@ -162,8 +164,6 @@ class MultiselectForwardFragment :
sendButton.isEnabled = it.stage == MultiselectForwardState.Stage.Selection
}
addMessage.visible = getMultiShareArgs().isNotEmpty()
setFragmentResultListener(CreateStoryWithViewersFragment.REQUEST_KEY) { _, bundle ->
val recipientId: RecipientId = bundle.getParcelable(CreateStoryWithViewersFragment.STORY_RECIPIENT)!!
contactSearchMediator.setKeysSelected(setOf(ContactSearchKey.Story(recipientId)))
@@ -282,40 +282,48 @@ class MultiselectForwardFragment :
query = contactSearchState.query
if (Stories.isFeatureEnabled() && isSelectedMediaValidForStories()) {
val expandedConfig: ContactSearchConfiguration.ExpandConfig? = if (isSelectedMediaValidForNonStories()) {
ContactSearchConfiguration.ExpandConfig(
isExpanded = contactSearchState.expandedSections.contains(ContactSearchConfiguration.SectionKey.STORIES)
)
} else {
null
}
addSection(
ContactSearchConfiguration.Section.Stories(
groupStories = contactSearchState.groupStories,
includeHeader = true,
headerAction = getHeaderAction(childFragmentManager),
expandConfig = ContactSearchConfiguration.ExpandConfig(
isExpanded = contactSearchState.expandedSections.contains(ContactSearchConfiguration.SectionKey.STORIES)
expandConfig = expandedConfig
)
)
}
if (isSelectedMediaValidForNonStories()) {
if (query.isNullOrEmpty()) {
addSection(
ContactSearchConfiguration.Section.Recents(
includeHeader = true
)
)
)
}
}
if (query.isNullOrEmpty()) {
addSection(
ContactSearchConfiguration.Section.Recents(
includeHeader = true
ContactSearchConfiguration.Section.Individuals(
includeHeader = true,
transportType = if (includeSms()) ContactSearchConfiguration.TransportType.ALL else ContactSearchConfiguration.TransportType.PUSH,
includeSelf = true
)
)
addSection(
ContactSearchConfiguration.Section.Groups(
includeHeader = true,
includeMms = includeSms()
)
)
}
addSection(
ContactSearchConfiguration.Section.Individuals(
includeHeader = true,
transportType = if (includeSms()) ContactSearchConfiguration.TransportType.ALL else ContactSearchConfiguration.TransportType.PUSH,
includeSelf = true
)
)
addSection(
ContactSearchConfiguration.Section.Groups(
includeHeader = true,
includeMms = includeSms()
)
)
}
}
@@ -327,6 +335,10 @@ class MultiselectForwardFragment :
return getMultiShareArgs().all { it.isValidForStories }
}
private fun isSelectedMediaValidForNonStories(): Boolean {
return getMultiShareArgs().all { it.isValidForNonStories }
}
override fun onGroupStoryClicked() {
ChooseGroupStoryBottomSheet().show(parentFragmentManager, ChooseGroupStoryBottomSheet.GROUP_STORY)
}

View File

@@ -72,6 +72,7 @@ class MultiselectForwardFragmentArgs(
val linkPreview = mediaMessage?.linkPreviews?.firstOrNull()
builder.withLinkPreview(linkPreview)
builder.asTextStory(mediaMessage?.storyType?.isTextStory ?: false)
}
if (conversationMessage.messageRecord.isMms && conversationMessage.multiselectCollection.isMediaSelected(selectedParts)) {

View File

@@ -61,13 +61,17 @@ class MultiselectForwardRepository(context: Context) {
val results = mappedArgs.sortedBy { it.timestamp }.map { MultiShareSender.sendSync(it) }
if (additionalMessage.isNotEmpty()) {
val additional = MultiShareArgs.Builder(sharedContactsAndThreads)
val additional = MultiShareArgs.Builder(sharedContactsAndThreads.filterNot { it.isStory }.toSet())
.withDraftText(additionalMessage)
.build()
val additionalResult: MultiShareSender.MultiShareSendResultCollection = MultiShareSender.sendSync(additional)
if (additional.shareContactAndThreads.isNotEmpty()) {
val additionalResult: MultiShareSender.MultiShareSendResultCollection = MultiShareSender.sendSync(additional)
handleResults(results + additionalResult, resultHandlers)
handleResults(results + additionalResult, resultHandlers)
} else {
handleResults(results, resultHandlers)
}
} else {
handleResults(results, resultHandlers)
}