Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d492d89 authored by Jordan Demeulenaere's avatar Jordan Demeulenaere
Browse files

Apply navigation bars insets to the fullscreen dialog

This CL ensures that we apply the navigation/task bars instead of
fullscreen dialogs animated by DialogLaunchAnimator to the fullscreen
View (that is the parent of the dialog content + background) and not to
the Dialog DecorView. This prevents the dialog from being clipped by the
navigation/task bars insets when animating.

Bug: 232063468
Test: Manual
Change-Id: I3e98205a2b3da0f5536a48601b39620e7933b9c9
parent 9fcf0aac
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -515,11 +515,20 @@ private class AnimatedDialog(
        dialogContentWithBackground.setTransitionVisibility(View.INVISIBLE)

        // Make sure the dialog is visible instantly and does not do any window animation.
        window.attributes.windowAnimations = R.style.Animation_LaunchAnimation
        val attributes = window.attributes
        attributes.windowAnimations = R.style.Animation_LaunchAnimation

        // Ensure that the animation is not clipped by the display cut-out when animating this
        // dialog into an app.
        window.attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
        attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS

        // Ensure that the animation is not clipped by the navigation/task bars when animating this
        // dialog into an app.
        val wasFittingNavigationBars =
            attributes.fitInsetsTypes and WindowInsets.Type.navigationBars() != 0
        attributes.fitInsetsTypes =
            attributes.fitInsetsTypes and WindowInsets.Type.navigationBars().inv()

        window.attributes = window.attributes

        // We apply the insets ourselves to make sure that the paddings are set on the correct
@@ -527,7 +536,13 @@ private class AnimatedDialog(
        window.setDecorFitsSystemWindows(false)
        val viewWithInsets = (dialogContentWithBackground.parent as ViewGroup)
        viewWithInsets.setOnApplyWindowInsetsListener { view, windowInsets ->
            val insets = windowInsets.getInsets(WindowInsets.Type.displayCutout())
            val type = if (wasFittingNavigationBars) {
                WindowInsets.Type.displayCutout() or WindowInsets.Type.navigationBars()
            } else {
                WindowInsets.Type.displayCutout()
            }

            val insets = windowInsets.getInsets(type)
            view.setPadding(insets.left, insets.top, insets.right, insets.bottom)
            WindowInsets.CONSUMED
        }