From 6ea63f3e346263198592679c1df00f090ea50b08 Mon Sep 17 00:00:00 2001 From: Sagar <85388413+Sagar0-0@users.noreply.github.com> Date: Wed, 9 Apr 2025 18:55:56 +0530 Subject: [PATCH] Avoid sending blank replies and do not clear input when sending reactions. --- .../viewer/reply/composer/StoryReplyComposer.kt | 15 +++++++++++---- .../direct/StoryDirectReplyDialogFragment.kt | 10 ++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/composer/StoryReplyComposer.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/composer/StoryReplyComposer.kt index 5be0d6644a..d25e39d162 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/composer/StoryReplyComposer.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/composer/StoryReplyComposer.kt @@ -92,15 +92,22 @@ class StoryReplyComposer @JvmOverloads constructor( } input.doAfterTextChanged { - val notEmpty = !it.isNullOrEmpty() - reply.isEnabled = notEmpty - if (notEmpty && reply.visibility != View.VISIBLE) { - val transition = AutoTransition().setDuration(200L).setInterpolator(OvershootInterpolator(1f)) + if (it == null) return@doAfterTextChanged + val isEmpty = it.isBlank() + reply.isEnabled = !isEmpty + val transition = AutoTransition().setDuration(200L).setInterpolator(OvershootInterpolator(1f)) + if (!isEmpty && reply.visibility != View.VISIBLE) { TransitionManager.beginDelayedTransition(bubbleView, transition) reply.visibility = View.VISIBLE reply.scaleX = 0f reply.scaleY = 0f reply.animate().setDuration(150).scaleX(1f).scaleY(1f).setInterpolator(OvershootInterpolator(1f)).start() + } else if (isEmpty) { + TransitionManager.beginDelayedTransition(bubbleView, transition) + reply.visibility = View.GONE + reply.scaleX = 1f + reply.scaleY = 1f + reply.animate().setDuration(150).scaleX(0f).scaleY(0f).setInterpolator(OvershootInterpolator(1f)).start() } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyDialogFragment.kt index 6a19d6849f..39066fbfb2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/direct/StoryDirectReplyDialogFragment.kt @@ -92,7 +92,7 @@ class StoryDirectReplyDialogFragment : } override fun onReactionClicked(emoji: String) { - sendReaction(emoji) + sendReaction(emoji, composer.input.text.isNullOrBlank()) } override fun onPickAnyReactionClicked() { @@ -176,11 +176,11 @@ class StoryDirectReplyDialogFragment : } override fun onReactWithAnyEmojiSelected(emoji: String) { - sendReaction(emoji) + sendReaction(emoji, composer.input.text.isNullOrBlank()) isReactClosingAfterSend = true } - private fun sendReaction(emoji: String) { + private fun sendReaction(emoji: String, shouldClose: Boolean) { lifecycleDisposable += viewModel.sendReaction(emoji) .observeOn(AndroidSchedulers.mainThread()) .subscribe { @@ -190,7 +190,9 @@ class StoryDirectReplyDialogFragment : putString(REQUEST_EMOJI, emoji) } ) - dismissAllowingStateLoss() + if (shouldClose) { + dismissAllowingStateLoss() + } } } }