diff options
author | 2018-06-18 18:42:47 +0000 | |
---|---|---|
committer | 2018-06-18 18:42:47 +0000 | |
commit | 1b65af27d897ccfbfb7b61c7176cb6a670a9519c (patch) | |
tree | a23c3664bf6094b623692df371a1e55423b1bd42 | |
parent | 0e52664b0cae01ab8cf53ae784bfec79ebd9bf98 (diff) | |
parent | 7749c9a5e93b38f795afaa8409771645189dea2e (diff) |
Merge "Fix NotificaitonPanelView x-axis shift with IME" into pi-dev
4 files changed, 39 insertions, 28 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java index 39485c3c8800..29e0edaf25cc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java @@ -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(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java index 409a78391975..4e7f4f38ebd3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java @@ -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() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index 5477f882e5f9..075883a8ac52 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -331,30 +331,25 @@ 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); - - // If we're already inset enough (e.g. on the status bar side), we can have 0 margin - WindowInsets insets = getRootWindowInsets(); - int leftInset = insets.getSystemWindowInsetLeft(); - int rightInset = insets.getSystemWindowInsetRight(); - if (lp.leftMargin <= leftInset) { - lp.leftMargin = 0; - } - if (lp.rightMargin <= rightInset) { - lp.rightMargin = 0; - } + lp.leftMargin = Math.max(lp.leftMargin, cornerCutoutMargins.first); + lp.rightMargin = Math.max(lp.rightMargin, cornerCutoutMargins.second); + // If we're already inset enough (e.g. on the status bar side), we can have 0 margin + WindowInsets insets = getRootWindowInsets(); + int leftInset = insets.getSystemWindowInsetLeft(); + int rightInset = insets.getSystemWindowInsetRight(); + if (lp.leftMargin <= leftInset) { + lp.leftMargin = 0; + } + if (lp.rightMargin <= rightInset) { + lp.rightMargin = 0; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index 0390f60843d1..237ca25fe434 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -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; @@ -118,10 +119,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. |