mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Attempt to fix message replies bottom sheet overlap.
This commit is contained in:
committed by
Clark Chen
parent
45d2a5d0b6
commit
490d3549e2
@@ -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() }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user