From c0f00eff25b82df3287571bdb1c8c2b52fa9145c Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 22 Jul 2022 15:08:38 -0300 Subject: [PATCH] Add reactions overlay to reply bottom sheets. --- .../StoryGroupReplyBottomSheetDialogFragment.kt | 12 ++++++++++++ .../viewer/reply/group/StoryGroupReplyFragment.kt | 2 ++ .../tabs/StoryViewsAndRepliesDialogFragment.kt | 13 +++++++++++++ 3 files changed, 27 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyBottomSheetDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyBottomSheetDialogFragment.kt index d403adffb..260788c14 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyBottomSheetDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyBottomSheetDialogFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.FrameLayout import androidx.core.view.updateLayoutParams import androidx.fragment.app.DialogFragment 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.stories.viewer.page.StoryViewerPageViewModel 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.LifecycleDisposable import kotlin.math.min @@ -46,6 +48,8 @@ class StoryGroupReplyBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDi private var shouldShowFullScreen = false private var initialParentHeight = 0 + private lateinit var reactionView: OnReactionSentView + private val storyViewerPageViewModel: StoryViewerPageViewModel by viewModels( ownerProducer = { requireParentFragment() } ) @@ -62,6 +66,10 @@ class StoryGroupReplyBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDi .commitAllowingStateLoss() } + reactionView = OnReactionSentView(requireContext()) + val container = view.rootView.findViewById(R.id.container) + container.addView(reactionView) + val bottomSheetBehavior = (requireDialog() as BottomSheetDialog).behavior bottomSheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { override fun onStateChanged(bottomSheet: View, newState: Int) = Unit @@ -112,6 +120,10 @@ class StoryGroupReplyBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDi requireView().invalidate() } + override fun onReactionEmojiSelected(emoji: String) { + reactionView.playForEmoji(emoji) + } + companion object { private const val ARG_STORY_ID = "arg.story.id" private const val ARG_GROUP_RECIPIENT_ID = "arg.group.recipient.id" diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt index f5a7152ac..2dc9ba62f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt @@ -348,6 +348,7 @@ class StoryGroupReplyFragment : override fun onReactionSelected(emoji: String) { dialog.dismiss() + findListener()?.onReactionEmojiSelected(emoji) sendReaction(emoji) } @@ -541,5 +542,6 @@ class StoryGroupReplyFragment : interface Callback { fun onStartDirectReply(recipientId: RecipientId) fun requestFullScreen(fullscreen: Boolean) + fun onReactionEmojiSelected(emoji: String) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/tabs/StoryViewsAndRepliesDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/tabs/StoryViewsAndRepliesDialogFragment.kt index 480d3c58c..c7f25fd48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/tabs/StoryViewsAndRepliesDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/tabs/StoryViewsAndRepliesDialogFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.FrameLayout import androidx.core.view.ViewCompat import androidx.core.view.updateLayoutParams 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.components.FixedRoundedCornerBottomSheetDialogFragment 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.reply.BottomSheetBehaviorDelegate import org.thoughtcrime.securesms.stories.viewer.reply.StoryViewsAndRepliesPagerChild import org.thoughtcrime.securesms.stories.viewer.reply.StoryViewsAndRepliesPagerParent 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.LifecycleDisposable import kotlin.math.min @@ -67,6 +70,8 @@ class StoryViewsAndRepliesDialogFragment : FixedRoundedCornerBottomSheetDialogFr private val onPageChangeCallback = PageChangeCallback() private val lifecycleDisposable = LifecycleDisposable() + private lateinit var reactionView: OnReactionSentView + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { 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?) { pager = view.findViewById(R.id.pager) + reactionView = OnReactionSentView(requireContext()) + val container = pager.rootView.findViewById(R.id.container) + container.addView(reactionView) + val bottomSheetBehavior = (requireDialog() as BottomSheetDialog).behavior bottomSheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { override fun onStateChanged(bottomSheet: View, newState: Int) = Unit @@ -149,6 +158,10 @@ class StoryViewsAndRepliesDialogFragment : FixedRoundedCornerBottomSheetDialogFr requireView().invalidate() } + override fun onReactionEmojiSelected(emoji: String) { + reactionView.playForEmoji(emoji) + } + private inner class PageChangeCallback : ViewPager2.OnPageChangeCallback() { override fun onPageScrollStateChanged(state: Int) { if (state == ViewPager2.SCROLL_STATE_IDLE) {