kopia lustrzana https://github.com/ryukoposting/Signal-Android
Add reactions overlay to reply bottom sheets.
rodzic
b183a38f3c
commit
c0f00eff25
|
@ -5,6 +5,7 @@ import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.FrameLayout
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
|
@ -15,6 +16,7 @@ import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialog
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||||
import org.thoughtcrime.securesms.stories.viewer.page.StoryViewerPageViewModel
|
import org.thoughtcrime.securesms.stories.viewer.page.StoryViewerPageViewModel
|
||||||
import org.thoughtcrime.securesms.stories.viewer.reply.BottomSheetBehaviorDelegate
|
import org.thoughtcrime.securesms.stories.viewer.reply.BottomSheetBehaviorDelegate
|
||||||
|
import org.thoughtcrime.securesms.stories.viewer.reply.reaction.OnReactionSentView
|
||||||
import org.thoughtcrime.securesms.util.BottomSheetUtil.requireCoordinatorLayout
|
import org.thoughtcrime.securesms.util.BottomSheetUtil.requireCoordinatorLayout
|
||||||
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
@ -46,6 +48,8 @@ class StoryGroupReplyBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDi
|
||||||
private var shouldShowFullScreen = false
|
private var shouldShowFullScreen = false
|
||||||
private var initialParentHeight = 0
|
private var initialParentHeight = 0
|
||||||
|
|
||||||
|
private lateinit var reactionView: OnReactionSentView
|
||||||
|
|
||||||
private val storyViewerPageViewModel: StoryViewerPageViewModel by viewModels(
|
private val storyViewerPageViewModel: StoryViewerPageViewModel by viewModels(
|
||||||
ownerProducer = { requireParentFragment() }
|
ownerProducer = { requireParentFragment() }
|
||||||
)
|
)
|
||||||
|
@ -62,6 +66,10 @@ class StoryGroupReplyBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDi
|
||||||
.commitAllowingStateLoss()
|
.commitAllowingStateLoss()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reactionView = OnReactionSentView(requireContext())
|
||||||
|
val container = view.rootView.findViewById<FrameLayout>(R.id.container)
|
||||||
|
container.addView(reactionView)
|
||||||
|
|
||||||
val bottomSheetBehavior = (requireDialog() as BottomSheetDialog).behavior
|
val bottomSheetBehavior = (requireDialog() as BottomSheetDialog).behavior
|
||||||
bottomSheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
|
bottomSheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
|
||||||
override fun onStateChanged(bottomSheet: View, newState: Int) = Unit
|
override fun onStateChanged(bottomSheet: View, newState: Int) = Unit
|
||||||
|
@ -112,6 +120,10 @@ class StoryGroupReplyBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDi
|
||||||
requireView().invalidate()
|
requireView().invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onReactionEmojiSelected(emoji: String) {
|
||||||
|
reactionView.playForEmoji(emoji)
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val ARG_STORY_ID = "arg.story.id"
|
private const val ARG_STORY_ID = "arg.story.id"
|
||||||
private const val ARG_GROUP_RECIPIENT_ID = "arg.group.recipient.id"
|
private const val ARG_GROUP_RECIPIENT_ID = "arg.group.recipient.id"
|
||||||
|
|
|
@ -348,6 +348,7 @@ class StoryGroupReplyFragment :
|
||||||
|
|
||||||
override fun onReactionSelected(emoji: String) {
|
override fun onReactionSelected(emoji: String) {
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
|
findListener<Callback>()?.onReactionEmojiSelected(emoji)
|
||||||
sendReaction(emoji)
|
sendReaction(emoji)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -541,5 +542,6 @@ class StoryGroupReplyFragment :
|
||||||
interface Callback {
|
interface Callback {
|
||||||
fun onStartDirectReply(recipientId: RecipientId)
|
fun onStartDirectReply(recipientId: RecipientId)
|
||||||
fun requestFullScreen(fullscreen: Boolean)
|
fun requestFullScreen(fullscreen: Boolean)
|
||||||
|
fun onReactionEmojiSelected(emoji: String)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.FrameLayout
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
|
@ -17,11 +18,13 @@ import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import org.thoughtcrime.securesms.R
|
import org.thoughtcrime.securesms.R
|
||||||
import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialogFragment
|
import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialogFragment
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||||
|
import org.thoughtcrime.securesms.stories.viewer.page.StoryViewerPageFragment
|
||||||
import org.thoughtcrime.securesms.stories.viewer.page.StoryViewerPageViewModel
|
import org.thoughtcrime.securesms.stories.viewer.page.StoryViewerPageViewModel
|
||||||
import org.thoughtcrime.securesms.stories.viewer.reply.BottomSheetBehaviorDelegate
|
import org.thoughtcrime.securesms.stories.viewer.reply.BottomSheetBehaviorDelegate
|
||||||
import org.thoughtcrime.securesms.stories.viewer.reply.StoryViewsAndRepliesPagerChild
|
import org.thoughtcrime.securesms.stories.viewer.reply.StoryViewsAndRepliesPagerChild
|
||||||
import org.thoughtcrime.securesms.stories.viewer.reply.StoryViewsAndRepliesPagerParent
|
import org.thoughtcrime.securesms.stories.viewer.reply.StoryViewsAndRepliesPagerParent
|
||||||
import org.thoughtcrime.securesms.stories.viewer.reply.group.StoryGroupReplyFragment
|
import org.thoughtcrime.securesms.stories.viewer.reply.group.StoryGroupReplyFragment
|
||||||
|
import org.thoughtcrime.securesms.stories.viewer.reply.reaction.OnReactionSentView
|
||||||
import org.thoughtcrime.securesms.util.BottomSheetUtil.requireCoordinatorLayout
|
import org.thoughtcrime.securesms.util.BottomSheetUtil.requireCoordinatorLayout
|
||||||
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
@ -67,6 +70,8 @@ class StoryViewsAndRepliesDialogFragment : FixedRoundedCornerBottomSheetDialogFr
|
||||||
private val onPageChangeCallback = PageChangeCallback()
|
private val onPageChangeCallback = PageChangeCallback()
|
||||||
private val lifecycleDisposable = LifecycleDisposable()
|
private val lifecycleDisposable = LifecycleDisposable()
|
||||||
|
|
||||||
|
private lateinit var reactionView: OnReactionSentView
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
return inflater.inflate(R.layout.stories_views_and_replies_fragment, container, false)
|
return inflater.inflate(R.layout.stories_views_and_replies_fragment, container, false)
|
||||||
}
|
}
|
||||||
|
@ -74,6 +79,10 @@ class StoryViewsAndRepliesDialogFragment : FixedRoundedCornerBottomSheetDialogFr
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
pager = view.findViewById(R.id.pager)
|
pager = view.findViewById(R.id.pager)
|
||||||
|
|
||||||
|
reactionView = OnReactionSentView(requireContext())
|
||||||
|
val container = pager.rootView.findViewById<FrameLayout>(R.id.container)
|
||||||
|
container.addView(reactionView)
|
||||||
|
|
||||||
val bottomSheetBehavior = (requireDialog() as BottomSheetDialog).behavior
|
val bottomSheetBehavior = (requireDialog() as BottomSheetDialog).behavior
|
||||||
bottomSheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
|
bottomSheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
|
||||||
override fun onStateChanged(bottomSheet: View, newState: Int) = Unit
|
override fun onStateChanged(bottomSheet: View, newState: Int) = Unit
|
||||||
|
@ -149,6 +158,10 @@ class StoryViewsAndRepliesDialogFragment : FixedRoundedCornerBottomSheetDialogFr
|
||||||
requireView().invalidate()
|
requireView().invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onReactionEmojiSelected(emoji: String) {
|
||||||
|
reactionView.playForEmoji(emoji)
|
||||||
|
}
|
||||||
|
|
||||||
private inner class PageChangeCallback : ViewPager2.OnPageChangeCallback() {
|
private inner class PageChangeCallback : ViewPager2.OnPageChangeCallback() {
|
||||||
override fun onPageScrollStateChanged(state: Int) {
|
override fun onPageScrollStateChanged(state: Int) {
|
||||||
if (state == ViewPager2.SCROLL_STATE_IDLE) {
|
if (state == ViewPager2.SCROLL_STATE_IDLE) {
|
||||||
|
|
Ładowanie…
Reference in New Issue