Attempt to fix message replies bottom sheet overlap.

This commit is contained in:
Cody Henthorne
2023-12-18 10:10:16 -05:00
committed by Clark Chen
parent 45d2a5d0b6
commit 490d3549e2
2 changed files with 49 additions and 10 deletions

View File

@@ -26,12 +26,20 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
private var inputId: Int? = null
private var input: Fragment? = null
private var wasKeyboardVisibleBeforeToggle: Boolean = false
private val listeners: MutableSet<Listener> = mutableSetOf()
val isInputShowing: Boolean
get() = input != null
lateinit var fragmentManager: FragmentManager
var listener: Listener? = null
fun addInputListener(listener: Listener) {
listeners.add(listener)
}
fun remoteInputListener(listener: Listener) {
listeners.remove(listener)
}
fun showSoftkey(editText: EditText) {
ViewUtil.focusAndShowKeyboard(editText)
@@ -44,6 +52,33 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
hideInput(resetKeyboardGuideline = true)
}
fun runAfterAllHidden(imeTarget: EditText, onHidden: () -> Unit) {
if (isInputShowing || isKeyboardShowing) {
val listener = object : Listener, KeyboardStateListener {
override fun onInputHidden() {
onHidden()
remoteInputListener(this)
removeKeyboardStateListener(this)
}
override fun onKeyboardHidden() {
onHidden()
remoteInputListener(this)
removeKeyboardStateListener(this)
}
override fun onInputShown() = Unit
override fun onKeyboardShown() = Unit
}
addInputListener(listener)
addKeyboardStateListener(listener)
hideAll(imeTarget)
} else {
onHidden()
}
}
fun toggleInput(fragmentCreator: FragmentCreator, imeTarget: EditText, showSoftKeyOnHide: Boolean = wasKeyboardVisibleBeforeToggle) {
if (fragmentCreator.id == inputId) {
if (showSoftKeyOnHide) {
@@ -85,7 +120,7 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
overrideKeyboardGuidelineWithPreviousHeight()
ViewUtil.hideKeyboard(context, imeTarget)
listener?.onInputShown()
listeners.forEach { it.onInputShown() }
}
private fun hideInput(resetKeyboardGuideline: Boolean) {
@@ -107,7 +142,7 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
}
if (inputHidden) {
listener?.onInputHidden()
listeners.forEach { it.onInputHidden() }
}
}

View File

@@ -953,7 +953,7 @@ class ConversationFragment :
adapter.registerAdapterDataObserver(dataObserver!!)
val keyboardEvents = KeyboardEvents()
container.listener = keyboardEvents
container.addInputListener(keyboardEvents)
container.addKeyboardStateListener(keyboardEvents)
requireActivity()
.onBackPressedDispatcher
@@ -1470,7 +1470,9 @@ class ConversationFragment :
findViewById<View>(R.id.scheduled_messages_show_all)
.setOnClickListener {
val recipient = viewModel.recipientSnapshot ?: return@setOnClickListener
ScheduledMessagesBottomSheet.show(childFragmentManager, args.threadId, recipient.id)
container.runAfterAllHidden(composeText) {
ScheduledMessagesBottomSheet.show(childFragmentManager, args.threadId, recipient.id)
}
}
findViewById<TextView>(R.id.scheduled_messages_text).text = resources.getQuantityString(R.plurals.conversation_scheduled_messages_bar__number_of_messages, count, count)
@@ -2505,11 +2507,13 @@ class ConversationFragment :
activity ?: return
val recipientId = viewModel.recipientSnapshot?.id ?: return
MessageQuotesBottomSheet.show(
childFragmentManager,
MessageId(messageRecord.id),
recipientId
)
container.runAfterAllHidden(composeText) {
MessageQuotesBottomSheet.show(
childFragmentManager,
MessageId(messageRecord.id),
recipientId
)
}
}
override fun onMoreTextClicked(conversationRecipientId: RecipientId, messageId: Long, isMms: Boolean) {