diff options
2 files changed, 26 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java index 964b135d7b50..99cf095ef61d 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java @@ -18,6 +18,7 @@ package com.android.systemui.accessibility; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_NONE; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; +import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import android.annotation.NonNull; import android.annotation.UiContext; @@ -36,6 +37,7 @@ import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; +import android.view.WindowMetrics; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; @@ -362,21 +364,21 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL PixelFormat.TRANSPARENT); params.gravity = Gravity.TOP | Gravity.LEFT; params.accessibilityTitle = getAccessibilityWindowTitle(context); + params.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; return params; } private Rect getDraggableWindowBounds() { final int layoutMargin = mContext.getResources().getDimensionPixelSize( R.dimen.magnification_switch_button_margin); - final Rect boundRect = new Rect(mWindowManager.getCurrentWindowMetrics().getBounds()); - final Insets systemBars = - mWindowManager.getCurrentWindowMetrics().getWindowInsets() - .getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()); - final Rect insets = new Rect(layoutMargin, - systemBars.top + layoutMargin, - mParams.width + layoutMargin, - mParams.height + layoutMargin + systemBars.bottom); - boundRect.inset(insets); + final WindowMetrics windowMetrics = mWindowManager.getCurrentWindowMetrics(); + final Insets windowInsets = windowMetrics.getWindowInsets().getInsetsIgnoringVisibility( + WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout()); + final Rect boundRect = new Rect(windowMetrics.getBounds()); + boundRect.offsetTo(0, 0); + boundRect.inset(0, 0, mParams.width, mParams.height); + boundRect.inset(windowInsets); + boundRect.inset(layoutMargin, layoutMargin); return boundRect; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java index d18997438d59..ab5bdf4835da 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java @@ -22,6 +22,7 @@ import static android.view.MotionEvent.ACTION_CANCEL; import static android.view.MotionEvent.ACTION_DOWN; import static android.view.MotionEvent.ACTION_MOVE; import static android.view.MotionEvent.ACTION_UP; +import static android.view.WindowInsets.Type.displayCutout; import static android.view.WindowInsets.Type.systemBars; import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK; @@ -225,7 +226,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { } @Test - public void onApplyWindowInsetsWithWindowInsetsChange_buttonIsShowing_draggableBoundsChanged() { + public void onSystemBarsInsetsChanged_buttonIsShowing_draggableBoundsChanged() { mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); final Rect oldDraggableBounds = new Rect(mMagnificationModeSwitch.mDraggableWindowBounds); @@ -238,6 +239,19 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { } @Test + public void onDisplayCutoutInsetsChanged_buttonIsShowing_draggableBoundsChanged() { + mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); + final Rect oldDraggableBounds = new Rect(mMagnificationModeSwitch.mDraggableWindowBounds); + + mWindowManager.setWindowInsets(new WindowInsets.Builder() + .setInsetsIgnoringVisibility(displayCutout(), Insets.of(20, 30, 20, 30)) + .build()); + mSpyImageView.onApplyWindowInsets(WindowInsets.CONSUMED); + + assertNotEquals(oldDraggableBounds, mMagnificationModeSwitch.mDraggableWindowBounds); + } + + @Test public void onDraggingGestureFinish_buttonIsShowing_stickToRightEdge() { final int windowHalfWidth = mWindowManager.getCurrentWindowMetrics().getBounds().width() / 2; |