Fix crash when keyboard animation ends after view destroyed.

This commit is contained in:
Alex Hart
2025-12-10 09:34:53 -04:00
committed by Michelle Tang
parent 673cff8eed
commit 067a22ff90
2 changed files with 17 additions and 6 deletions

View File

@@ -37,7 +37,7 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
listeners.add(listener)
}
fun remoteInputListener(listener: Listener) {
fun removeInputListener(listener: Listener) {
listeners.remove(listener)
}
@@ -57,13 +57,13 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
val listener = object : Listener, KeyboardStateListener {
override fun onInputHidden() {
onHidden()
remoteInputListener(this)
removeInputListener(this)
removeKeyboardStateListener(this)
}
override fun onKeyboardHidden() {
onHidden()
remoteInputListener(this)
removeInputListener(this)
removeKeyboardStateListener(this)
}

View File

@@ -569,6 +569,7 @@ class ConversationFragment :
private var dataObserver: DataObserver? = null
private var menuProvider: ConversationOptionsMenu.Provider? = null
private var scrollListener: ScrollListener? = null
private var keyboardEvents: KeyboardEvents? = null
private var progressDialog: ProgressCardDialogFragment? = null
private val jumpAndPulseScrollStrategy = object : ScrollToPositionDelegate.ScrollStrategy {
@@ -770,6 +771,12 @@ class ConversationFragment :
}
override fun onDestroyView() {
keyboardEvents?.let {
container.removeInputListener(it)
container.removeKeyboardStateListener(it)
}
keyboardEvents = null
super.onDestroyView()
if (pinnedShortcutReceiver != null) {
requireActivity().unregisterReceiver(pinnedShortcutReceiver)
@@ -1154,9 +1161,10 @@ class ConversationFragment :
dataObserver = DataObserver()
adapter.registerAdapterDataObserver(dataObserver!!)
val keyboardEvents = KeyboardEvents()
container.addInputListener(keyboardEvents)
container.addKeyboardStateListener(keyboardEvents)
keyboardEvents = KeyboardEvents().also {
container.addInputListener(it)
container.addKeyboardStateListener(it)
}
childFragmentManager.setFragmentResultListener(AttachmentKeyboardFragment.RESULT_KEY, viewLifecycleOwner, AttachmentKeyboardFragmentListener())
motionEventRelay.setDrain(MotionEventRelayDrain(this))
@@ -4745,6 +4753,9 @@ class ConversationFragment :
}
override fun onKeyboardAnimationEnded() {
if (view == null) {
return
}
if (!container.isKeyboardShowing) {
closeEmojiSearch()
}