From bd03f21cdf2ef17d2d016e5583d6bb1f17a4c44b Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 15 Apr 2025 10:50:23 -0300 Subject: [PATCH] Allow specification of whether we utilize windowTypes to lay out inset guidelines. --- .../components/InsetAwareConstraintLayout.kt | 21 +++++++++++++++++++ .../conversation/v2/ConversationFragment.kt | 2 ++ 2 files changed, 23 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.kt b/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.kt index 9e27f8e168..b004014a0e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.kt @@ -66,7 +66,11 @@ open class InsetAwareConstraintLayout @JvmOverloads constructor( private var previousKeyboardHeight: Int = 0 private var applyRootInsets: Boolean = false + private var insets: WindowInsetsCompat? = null + private var windowTypes: Int = InsetAwareConstraintLayout.windowTypes + private val windowInsetsListener = androidx.core.view.OnApplyWindowInsetsListener { _, insets -> + this.insets = insets applyInsets(windowInsets = insets.getInsets(windowTypes), keyboardInsets = insets.getInsets(keyboardType)) insets } @@ -100,6 +104,23 @@ open class InsetAwareConstraintLayout @JvmOverloads constructor( private fun insetTarget(): View = if (applyRootInsets) rootView else this + /** + * Specifies whether or not window insets should be accounted for when applying + * insets. This is useful when choosing whether to display the content in this + * constraint layout as a full-window view or as a framed view. + */ + fun setUseWindowTypes(useWindowTypes: Boolean) { + windowTypes = if (useWindowTypes) { + InsetAwareConstraintLayout.windowTypes + } else { + 0 + } + + if (insets != null) { + applyInsets(insets!!.getInsets(windowTypes), insets!!.getInsets(keyboardType)) + } + } + fun addKeyboardStateListener(listener: KeyboardStateListener) { keyboardStateListeners += listener } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index e724760bc1..2ddc4dc59c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -590,6 +590,8 @@ class ConversationFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { binding.toolbar.isBackInvokedCallbackEnabled = false + binding.root.setUseWindowTypes(resources.getWindowSizeClass().isCompact()) + disposables.bindTo(viewLifecycleOwner) if (requireActivity() is ConversationActivity) {