From 7ca86538e37d0cd50345f2374cc869b4daa708ef Mon Sep 17 00:00:00 2001 From: Hafiz Date: Fri, 13 Jun 2025 09:27:44 -0500 Subject: [PATCH] Use WindowInsetsListener to adjust chat layout Remove old applyScrollContentWindowInsets helper and IME listeners Add ViewCompat.setOnApplyWindowInsetsListener on root view Translate chatBarView and recyclerView by IME height and pad for nav-bar insets Force initial inset dispatch with ViewCompat.requestApplyInsets() --- .../ui/fragments/social/ChatFragment.kt | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt index 5a38eef19..221622f33 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt @@ -8,6 +8,8 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.view.isGone import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle @@ -140,7 +142,36 @@ open class ChatFragment : BaseFragment() { } } } - binding?.chatBarView?.let { applyScrollContentWindowInsets(it) } + + binding?.root.apply { + ViewCompat.setOnApplyWindowInsetsListener(this!!) { _, insets -> + val ime = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom + val nav = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom + + binding?.chatBarView?.translationY = -ime.toFloat() + binding?.chatBarView?.setPadding( + binding?.chatBarView!!.paddingLeft, + binding?.chatBarView!!.paddingTop, + binding?.chatBarView!!.paddingRight, + nav + ) + + + binding?.recyclerView?.translationY = -ime.toFloat() + + + binding?.recyclerView?.setPadding( + binding?.recyclerView!!.paddingLeft, + binding?.recyclerView!!.paddingTop, + binding?.recyclerView!!.paddingRight, + ime + nav + ) + + insets + } + ViewCompat.requestApplyInsets(this) + } + } override fun onResume() {