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

Commit 7749c9a5 authored by felkachang's avatar felkachang Committed by Selim Cinek
Browse files

Fix NotificaitonPanelView x-axis shift with IME

IME will trigger the fitSystemWindow. And, there is a difference of
the parameter insets between IME and no IME. The insets.right and
insets.left report 0 without IME but positive number with IME
because IME is a type of system window and trigger fitSystemWindow
and then take the cutout as part of system window.

StatusBarWindowView handle the following condition
cutout > 0 && cutout == systemWindowInset and make its children not
layout on the safe inset both of cut out and system window. In order
to handle that cut out become system window, to take the maximum of
cut out and system window to make sure that the safe inset is
decided in StatusBarWindowView and its view decent only care about
the corner cut out.

Because StatusBarWindowView make both of PhoneStatusBarView's parent
and NotificationPanelView to have the margin for both of cutout and
system window, the counting of the padding and panel translation of
the HeadsUpStatusBarView need to do the relative changes.

Change-Id: Iafdc6a85e0e7d360b1bfc1e820f6e0779c32753f
Fix: 79957419
Fix: 109945733
Fix: 109865908
Test: atest SystemUITests
parent d54c3a30
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -178,11 +178,7 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout {
     * @param translationX how to translate the horizontal position
     */
    public void setPanelTranslation(float translationX) {
        if (isLayoutRtl()) {
            setTranslationX(translationX + mCutOutInset);
        } else {
            setTranslationX(translationX - mCutOutInset);
        }
        setTranslationX(translationX);
        updateDrawingRect();
    }

+10 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.phone;

import android.graphics.Point;
import android.graphics.Rect;
import android.view.DisplayCutout;
import android.view.View;
import android.view.WindowInsets;

@@ -159,8 +160,15 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
        }

        WindowInsets windowInset = mStackScroller.getRootWindowInsets();
        return windowInset.getSystemWindowInsetLeft() + mStackScroller.getRight()
                + windowInset.getSystemWindowInsetRight() - realDisplaySize;
        DisplayCutout cutout = (windowInset != null) ? windowInset.getDisplayCutout() : null;
        int sysWinLeft = (windowInset != null) ? windowInset.getStableInsetLeft() : 0;
        int sysWinRight = (windowInset != null) ? windowInset.getStableInsetRight() : 0;
        int cutoutLeft = (cutout != null) ? cutout.getSafeInsetLeft() : 0;
        int cutoutRight = (cutout != null) ? cutout.getSafeInsetRight() : 0;
        int leftInset = Math.max(sysWinLeft, cutoutLeft);
        int rightInset = Math.max(sysWinRight, cutoutRight);

        return leftInset + mStackScroller.getRight() + rightInset - realDisplaySize;
    }

    public void updatePanelTranslation() {
+13 −18
Original line number Diff line number Diff line
@@ -331,16 +331,13 @@ public class PhoneStatusBarView extends PanelBar {
        // or letterboxing from the right or left sides.

        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();
        if (mDisplayCutout == null) {
        if (mDisplayCutout == null || mDisplayCutout.isEmpty()
                || mLastOrientation != ORIENTATION_PORTRAIT || cornerCutoutMargins == null) {
            lp.leftMargin = 0;
            lp.rightMargin = 0;
            return;
        }

        lp.leftMargin = mDisplayCutout.getSafeInsetLeft();
        lp.rightMargin = mDisplayCutout.getSafeInsetRight();

        if (cornerCutoutMargins != null) {
        lp.leftMargin = Math.max(lp.leftMargin, cornerCutoutMargins.first);
        lp.rightMargin = Math.max(lp.rightMargin, cornerCutoutMargins.second);

@@ -354,8 +351,6 @@ public class PhoneStatusBarView extends PanelBar {
        if (lp.rightMargin <= rightInset) {
            lp.rightMargin = 0;
        }

        }
    }

    public static Pair<Integer, Integer> cornerCutoutMargins(DisplayCutout cutout,
+15 −3
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.IBinder;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.ActionMode;
import android.view.DisplayCutout;
import android.view.InputDevice;
import android.view.InputQueue;
import android.view.KeyEvent;
@@ -112,10 +113,21 @@ public class StatusBarWindowView extends FrameLayout {
            boolean paddingChanged = insets.top != getPaddingTop()
                    || insets.bottom != getPaddingBottom();

            int rightCutout = 0;
            int leftCutout = 0;
            DisplayCutout displayCutout = getRootWindowInsets().getDisplayCutout();
            if (displayCutout != null) {
                leftCutout = displayCutout.getSafeInsetLeft();
                rightCutout = displayCutout.getSafeInsetRight();
            }

            int targetLeft = Math.max(insets.left, leftCutout);
            int targetRight = Math.max(insets.right, rightCutout);

            // Super-special right inset handling, because scrims and backdrop need to ignore it.
            if (insets.right != mRightInset || insets.left != mLeftInset) {
                mRightInset = insets.right;
                mLeftInset = insets.left;
            if (targetRight != mRightInset || targetLeft != mLeftInset) {
                mRightInset = targetRight;
                mLeftInset = targetLeft;
                applyMargins();
            }
            // Drop top inset, and pass through bottom inset.