mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-20 11:08:31 +00:00
Fix crash when keyboard animation ends after view destroyed.
This commit is contained in:
@@ -37,7 +37,7 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
|
|||||||
listeners.add(listener)
|
listeners.add(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun remoteInputListener(listener: Listener) {
|
fun removeInputListener(listener: Listener) {
|
||||||
listeners.remove(listener)
|
listeners.remove(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,13 +57,13 @@ class InputAwareConstraintLayout @JvmOverloads constructor(
|
|||||||
val listener = object : Listener, KeyboardStateListener {
|
val listener = object : Listener, KeyboardStateListener {
|
||||||
override fun onInputHidden() {
|
override fun onInputHidden() {
|
||||||
onHidden()
|
onHidden()
|
||||||
remoteInputListener(this)
|
removeInputListener(this)
|
||||||
removeKeyboardStateListener(this)
|
removeKeyboardStateListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onKeyboardHidden() {
|
override fun onKeyboardHidden() {
|
||||||
onHidden()
|
onHidden()
|
||||||
remoteInputListener(this)
|
removeInputListener(this)
|
||||||
removeKeyboardStateListener(this)
|
removeKeyboardStateListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -569,6 +569,7 @@ class ConversationFragment :
|
|||||||
private var dataObserver: DataObserver? = null
|
private var dataObserver: DataObserver? = null
|
||||||
private var menuProvider: ConversationOptionsMenu.Provider? = null
|
private var menuProvider: ConversationOptionsMenu.Provider? = null
|
||||||
private var scrollListener: ScrollListener? = null
|
private var scrollListener: ScrollListener? = null
|
||||||
|
private var keyboardEvents: KeyboardEvents? = null
|
||||||
private var progressDialog: ProgressCardDialogFragment? = null
|
private var progressDialog: ProgressCardDialogFragment? = null
|
||||||
|
|
||||||
private val jumpAndPulseScrollStrategy = object : ScrollToPositionDelegate.ScrollStrategy {
|
private val jumpAndPulseScrollStrategy = object : ScrollToPositionDelegate.ScrollStrategy {
|
||||||
@@ -770,6 +771,12 @@ class ConversationFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
keyboardEvents?.let {
|
||||||
|
container.removeInputListener(it)
|
||||||
|
container.removeKeyboardStateListener(it)
|
||||||
|
}
|
||||||
|
keyboardEvents = null
|
||||||
|
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
if (pinnedShortcutReceiver != null) {
|
if (pinnedShortcutReceiver != null) {
|
||||||
requireActivity().unregisterReceiver(pinnedShortcutReceiver)
|
requireActivity().unregisterReceiver(pinnedShortcutReceiver)
|
||||||
@@ -1154,9 +1161,10 @@ class ConversationFragment :
|
|||||||
dataObserver = DataObserver()
|
dataObserver = DataObserver()
|
||||||
adapter.registerAdapterDataObserver(dataObserver!!)
|
adapter.registerAdapterDataObserver(dataObserver!!)
|
||||||
|
|
||||||
val keyboardEvents = KeyboardEvents()
|
keyboardEvents = KeyboardEvents().also {
|
||||||
container.addInputListener(keyboardEvents)
|
container.addInputListener(it)
|
||||||
container.addKeyboardStateListener(keyboardEvents)
|
container.addKeyboardStateListener(it)
|
||||||
|
}
|
||||||
|
|
||||||
childFragmentManager.setFragmentResultListener(AttachmentKeyboardFragment.RESULT_KEY, viewLifecycleOwner, AttachmentKeyboardFragmentListener())
|
childFragmentManager.setFragmentResultListener(AttachmentKeyboardFragment.RESULT_KEY, viewLifecycleOwner, AttachmentKeyboardFragmentListener())
|
||||||
motionEventRelay.setDrain(MotionEventRelayDrain(this))
|
motionEventRelay.setDrain(MotionEventRelayDrain(this))
|
||||||
@@ -4745,6 +4753,9 @@ class ConversationFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onKeyboardAnimationEnded() {
|
override fun onKeyboardAnimationEnded() {
|
||||||
|
if (view == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (!container.isKeyboardShowing) {
|
if (!container.isKeyboardShowing) {
|
||||||
closeEmojiSearch()
|
closeEmojiSearch()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user