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

Commit ccf94a1b authored by Jordan Demeulenaere's avatar Jordan Demeulenaere
Browse files

Fix the SysUI dialogs size after rotating

This CL fixes a bug where the width of any SystemUIDialog animated by
DialogLaunchAnimator would be smaller than it was supposed to be. See
b/230825604#comment4 for more info.

Bug: 230825604
Test: Manual
Change-Id: Ief2265b93fb4e45138f2f8c890c085d00e86b76d
parent 0656f1c0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -16,7 +16,8 @@
-->
<resources>
    <!-- DialogLaunchAnimator -->
    <item type="id" name="launch_animation_running"/>
    <item type="id" name="tag_launch_animation_running"/>
    <item type="id" name="tag_dialog_background"/>

    <!-- ViewBoundsAnimator -->
    <item type="id" name="tag_animator"/>
+3 −2
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ class DialogLaunchAnimator @JvmOverloads constructor(
            positionXInterpolator = ActivityLaunchAnimator.INTERPOLATORS.positionInterpolator
        )

        private val TAG_LAUNCH_ANIMATION_RUNNING = R.id.launch_animation_running
        private val TAG_LAUNCH_ANIMATION_RUNNING = R.id.tag_launch_animation_running
    }

    /**
@@ -447,6 +447,7 @@ private class AnimatedDialog(
            dialogContentWithBackground
        }
        this.dialogContentWithBackground = dialogContentWithBackground
        dialogContentWithBackground.setTag(R.id.tag_dialog_background, true)

        val background = dialogContentWithBackground.background
        originalDialogBackgroundColor =
@@ -584,7 +585,7 @@ private class AnimatedDialog(
                GhostView.removeGhost(touchSurface)
            },
            onLaunchAnimationEnd = {
                touchSurface.setTag(R.id.launch_animation_running, null)
                touchSurface.setTag(R.id.tag_launch_animation_running, null)

                // We hide the touch surface when the dialog is showing. We will make this
                // view visible again when dismissing the dialog.
+9 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.os.Looper;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewRootImpl;
import android.view.Window;
@@ -376,11 +377,17 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
    }

    private static int getHorizontalInsets(Dialog dialog) {
        if (dialog.getWindow().getDecorView() == null) {
        View decorView = dialog.getWindow().getDecorView();
        if (decorView == null) {
            return 0;
        }

        Drawable background = dialog.getWindow().getDecorView().getBackground();
        // We first look for the background on the dialogContentWithBackground added by
        // DialogLaunchAnimator. If it's not there, we use the background of the DecorView.
        View viewWithBackground = decorView.findViewByPredicate(
                view -> view.getTag(R.id.tag_dialog_background) != null);
        Drawable background = viewWithBackground != null ? viewWithBackground.getBackground()
                : decorView.getBackground();
        Insets insets = background != null ? background.getOpticalInsets() : Insets.NONE;
        return insets.left + insets.right;
    }