kopia lustrzana https://github.com/ryukoposting/Signal-Android
Only display stories if you entered through stories.
rodzic
4dca554967
commit
9281bcdd7d
|
@ -267,7 +267,7 @@ class MultiselectForwardFragment :
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getConfiguration(contactSearchState: ContactSearchState): ContactSearchConfiguration {
|
private fun getConfiguration(contactSearchState: ContactSearchState): ContactSearchConfiguration {
|
||||||
return ContactSearchConfiguration.build {
|
return findListener<SearchConfigurationProvider>()?.getSearchConfiguration(contactSearchState) ?: ContactSearchConfiguration.build {
|
||||||
query = contactSearchState.query
|
query = contactSearchState.query
|
||||||
|
|
||||||
if (Stories.isFeatureEnabled() && isSelectedMediaValidForStories()) {
|
if (Stories.isFeatureEnabled() && isSelectedMediaValidForStories()) {
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -18,6 +18,9 @@ import org.thoughtcrime.securesms.R
|
||||||
import org.thoughtcrime.securesms.TransportOption
|
import org.thoughtcrime.securesms.TransportOption
|
||||||
import org.thoughtcrime.securesms.TransportOptions
|
import org.thoughtcrime.securesms.TransportOptions
|
||||||
import org.thoughtcrime.securesms.components.emoji.EmojiEventListener
|
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.EmojiKeyboardPageFragment
|
||||||
import org.thoughtcrime.securesms.keyboard.emoji.search.EmojiSearchFragment
|
import org.thoughtcrime.securesms.keyboard.emoji.search.EmojiSearchFragment
|
||||||
import org.thoughtcrime.securesms.mediasend.Media
|
import org.thoughtcrime.securesms.mediasend.Media
|
||||||
|
@ -35,7 +38,8 @@ class MediaSelectionActivity :
|
||||||
MediaReviewFragment.Callback,
|
MediaReviewFragment.Callback,
|
||||||
EmojiKeyboardPageFragment.Callback,
|
EmojiKeyboardPageFragment.Callback,
|
||||||
EmojiEventListener,
|
EmojiEventListener,
|
||||||
EmojiSearchFragment.Callback {
|
EmojiSearchFragment.Callback,
|
||||||
|
SearchConfigurationProvider {
|
||||||
|
|
||||||
lateinit var viewModel: MediaSelectionViewModel
|
lateinit var viewModel: MediaSelectionViewModel
|
||||||
|
|
||||||
|
@ -44,6 +48,9 @@ class MediaSelectionActivity :
|
||||||
private val destination: MediaSelectionDestination
|
private val destination: MediaSelectionDestination
|
||||||
get() = MediaSelectionDestination.fromBundle(requireNotNull(intent.getBundleExtra(DESTINATION)))
|
get() = MediaSelectionDestination.fromBundle(requireNotNull(intent.getBundleExtra(DESTINATION)))
|
||||||
|
|
||||||
|
private val isStory: Boolean
|
||||||
|
get() = intent.getBooleanExtra(IS_STORY, false)
|
||||||
|
|
||||||
override fun attachBaseContext(newBase: Context) {
|
override fun attachBaseContext(newBase: Context) {
|
||||||
delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES
|
delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES
|
||||||
super.attachBaseContext(newBase)
|
super.attachBaseContext(newBase)
|
||||||
|
@ -201,6 +208,24 @@ class MediaSelectionActivity :
|
||||||
viewModel.sendCommand(HudCommand.CloseEmojiSearch)
|
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) {
|
private inner class OnBackPressed : OnBackPressedCallback(true) {
|
||||||
override fun handleOnBackPressed() {
|
override fun handleOnBackPressed() {
|
||||||
val navController = Navigation.findNavController(this@MediaSelectionActivity, R.id.fragment_container)
|
val navController = Navigation.findNavController(this@MediaSelectionActivity, R.id.fragment_container)
|
||||||
|
@ -221,12 +246,19 @@ class MediaSelectionActivity :
|
||||||
private const val MESSAGE = "message"
|
private const val MESSAGE = "message"
|
||||||
private const val DESTINATION = "destination"
|
private const val DESTINATION = "destination"
|
||||||
private const val IS_REPLY = "is_reply"
|
private const val IS_REPLY = "is_reply"
|
||||||
|
private const val IS_STORY = "is_story"
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun camera(context: Context): Intent {
|
fun camera(context: Context): Intent {
|
||||||
|
return camera(context, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun camera(context: Context, isStory: Boolean): Intent {
|
||||||
return buildIntent(
|
return buildIntent(
|
||||||
context = context,
|
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<Media> = listOf(),
|
media: List<Media> = listOf(),
|
||||||
destination: MediaSelectionDestination = MediaSelectionDestination.ChooseAfterMediaSelection,
|
destination: MediaSelectionDestination = MediaSelectionDestination.ChooseAfterMediaSelection,
|
||||||
message: CharSequence? = null,
|
message: CharSequence? = null,
|
||||||
isReply: Boolean = false
|
isReply: Boolean = false,
|
||||||
|
isStory: Boolean = false
|
||||||
): Intent {
|
): Intent {
|
||||||
return Intent(context, MediaSelectionActivity::class.java).apply {
|
return Intent(context, MediaSelectionActivity::class.java).apply {
|
||||||
putExtra(START_ACTION, startAction)
|
putExtra(START_ACTION, startAction)
|
||||||
|
@ -316,6 +349,7 @@ class MediaSelectionActivity :
|
||||||
putExtra(MESSAGE, message)
|
putExtra(MESSAGE, message)
|
||||||
putExtra(DESTINATION, destination.toBundle())
|
putExtra(DESTINATION, destination.toBundle())
|
||||||
putExtra(IS_REPLY, isReply)
|
putExtra(IS_REPLY, isReply)
|
||||||
|
putExtra(IS_STORY, isStory)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@ import androidx.navigation.fragment.findNavController
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.signal.core.util.DimensionUnit
|
import org.signal.core.util.DimensionUnit
|
||||||
import org.thoughtcrime.securesms.R
|
import org.thoughtcrime.securesms.R
|
||||||
import org.thoughtcrime.securesms.contacts.HeaderAction
|
|
||||||
import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration
|
import org.thoughtcrime.securesms.contacts.paged.ContactSearchConfiguration
|
||||||
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey
|
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey
|
||||||
import org.thoughtcrime.securesms.contacts.paged.ContactSearchMediator
|
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.recipients.RecipientId
|
||||||
import org.thoughtcrime.securesms.sharing.ShareSelectionAdapter
|
import org.thoughtcrime.securesms.sharing.ShareSelectionAdapter
|
||||||
import org.thoughtcrime.securesms.sharing.ShareSelectionMappingModel
|
import org.thoughtcrime.securesms.sharing.ShareSelectionMappingModel
|
||||||
|
import org.thoughtcrime.securesms.stories.Stories
|
||||||
import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs
|
import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs
|
||||||
import org.thoughtcrime.securesms.stories.settings.create.CreateStoryWithViewersFragment
|
import org.thoughtcrime.securesms.stories.settings.create.CreateStoryWithViewersFragment
|
||||||
import org.thoughtcrime.securesms.stories.settings.hide.HideStoryFromDialogFragment
|
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(
|
ContactSearchConfiguration.Section.Stories(
|
||||||
groupStories = contactSearchState.groupStories,
|
groupStories = contactSearchState.groupStories,
|
||||||
includeHeader = true,
|
includeHeader = true,
|
||||||
headerAction = getHeaderAction(),
|
headerAction = Stories.getHeaderAction(childFragmentManager)
|
||||||
expandConfig = ContactSearchConfiguration.ExpandConfig(
|
|
||||||
isExpanded = contactSearchState.expandedSections.contains(ContactSearchConfiguration.SectionKey.STORIES)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -183,15 +180,6 @@ class TextStoryPostSendFragment : Fragment(R.layout.stories_send_text_post_fragm
|
||||||
.alpha(0f)
|
.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() {
|
override fun onNewStoryClicked() {
|
||||||
findNavController().navigate(R.id.action_textStoryPostSendFragment_to_newStory)
|
findNavController().navigate(R.id.action_textStoryPostSendFragment_to_newStory)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
package org.thoughtcrime.securesms.stories
|
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.keyvalue.SignalStore
|
||||||
|
import org.thoughtcrime.securesms.mediasend.v2.stories.ChooseStoryTypeBottomSheet
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient
|
import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
|
import org.thoughtcrime.securesms.util.BottomSheetUtil
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags
|
import org.thoughtcrime.securesms.util.FeatureFlags
|
||||||
|
|
||||||
object Stories {
|
object Stories {
|
||||||
|
@ -14,4 +19,13 @@ object Stories {
|
||||||
fun isFeatureEnabled(): Boolean {
|
fun isFeatureEnabled(): Boolean {
|
||||||
return isFeatureAvailable() && !SignalStore.storyValues().isFeatureDisabled
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ class StoriesLandingFragment :
|
||||||
.ifNecessary()
|
.ifNecessary()
|
||||||
.withRationaleDialog(getString(R.string.ConversationActivity_to_capture_photos_and_video_allow_signal_access_to_the_camera), R.drawable.ic_camera_24)
|
.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))
|
.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() }
|
.onAnyDenied { Toast.makeText(requireContext(), R.string.ConversationActivity_signal_needs_camera_permissions_to_take_photos_or_video, Toast.LENGTH_LONG).show() }
|
||||||
.execute()
|
.execute()
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue