Multiple skin tones for reaction bursts.

This commit is contained in:
Nicholas Tinsley
2024-04-24 14:41:01 -04:00
committed by Greyson Parrelli
parent fa32b7a883
commit 00a91e32fc
5 changed files with 11 additions and 10 deletions

View File

@@ -498,7 +498,7 @@ class StoryViewerPageFragment :
childFragmentManager.setFragmentResultListener(StoryDirectReplyDialogFragment.REQUEST_EMOJI, viewLifecycleOwner) { _, bundle -> childFragmentManager.setFragmentResultListener(StoryDirectReplyDialogFragment.REQUEST_EMOJI, viewLifecycleOwner) { _, bundle ->
val emoji = bundle.getString(StoryDirectReplyDialogFragment.REQUEST_EMOJI) val emoji = bundle.getString(StoryDirectReplyDialogFragment.REQUEST_EMOJI)
if (emoji != null) { if (emoji != null) {
reactionAnimationView.playForEmoji(emoji) reactionAnimationView.playForEmoji(listOf(emoji))
viewModel.setIsDisplayingReactionAnimation(true) viewModel.setIsDisplayingReactionAnimation(true)
} }
} }

View File

@@ -122,7 +122,7 @@ class StoryGroupReplyBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDi
} }
override fun onReactionEmojiSelected(emoji: String) { override fun onReactionEmojiSelected(emoji: String) {
reactionView.playForEmoji(emoji) reactionView.playForEmoji(listOf(emoji))
} }
companion object { companion object {

View File

@@ -47,13 +47,13 @@ class MultiReactionBurstLayout @JvmOverloads constructor(
.filter { it.value.groupBy { event -> event.sender }.size >= REACTION_COUNT_THRESHOLD } .filter { it.value.groupBy { event -> event.sender }.size >= REACTION_COUNT_THRESHOLD }
.values .values
.map { it.sortedBy { event -> event.timestamp } } .map { it.sortedBy { event -> event.timestamp } }
.map { it[REACTION_COUNT_THRESHOLD - 1] } .sortedBy { it.last().timestamp }
.sortedBy { it.timestamp }
.take(MAX_SIMULTANEOUS_REACTIONS - cooldownTimes.filter { it.value > System.currentTimeMillis() }.size) .take(MAX_SIMULTANEOUS_REACTIONS - cooldownTimes.filter { it.value > System.currentTimeMillis() }.size)
.forEach { .forEach {
val reactionView = getNextReactionView() val reactionView = getNextReactionView()
reactionView.playForEmoji(it.reaction) reactionView.playForEmoji(it.map { event -> event.reaction })
cooldownTimes[EmojiUtil.getCanonicalRepresentation(it.reaction)] = it.timestamp + cooldownDuration.inWholeMilliseconds val lastEvent = it.last()
cooldownTimes[EmojiUtil.getCanonicalRepresentation(lastEvent.reaction)] = lastEvent.timestamp + cooldownDuration.inWholeMilliseconds
} }
} }

View File

@@ -32,7 +32,7 @@ class OnReactionSentView @JvmOverloads constructor(
}) })
} }
fun playForEmoji(emoji: CharSequence) { fun playForEmoji(emojis: List<CharSequence>) {
motionLayout.progress = 0f motionLayout.progress = 0f
listOf( listOf(
@@ -47,8 +47,9 @@ class OnReactionSentView @JvmOverloads constructor(
R.id.emoji_9, R.id.emoji_9,
R.id.emoji_10, R.id.emoji_10,
R.id.emoji_11 R.id.emoji_11
).forEach { ).forEachIndexed { index, it ->
findViewById<EmojiImageView>(it).setImageEmoji(emoji) val emojiIndex = index % emojis.size
findViewById<EmojiImageView>(it).setImageEmoji(emojis[emojiIndex])
} }
motionLayout.requestLayout() motionLayout.requestLayout()

View File

@@ -159,7 +159,7 @@ class StoryViewsAndRepliesDialogFragment : FixedRoundedCornerBottomSheetDialogFr
} }
override fun onReactionEmojiSelected(emoji: String) { override fun onReactionEmojiSelected(emoji: String) {
reactionView.playForEmoji(emoji) reactionView.playForEmoji(listOf(emoji))
} }
private inner class PageChangeCallback : ViewPager2.OnPageChangeCallback() { private inner class PageChangeCallback : ViewPager2.OnPageChangeCallback() {