diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index fcb090a76d5b1..717c7156f9174 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -66,6 +66,7 @@ import com.android.systemui.shared.system.WindowManagerWrapper; import java.io.PrintWriter; import java.text.NumberFormat; +import java.util.Collections; import java.util.Locale; /** @@ -178,7 +179,13 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold // Initialize listeners. mMirrorViewRunnable = () -> { if (mMirrorView != null) { + final Rect oldViewBounds = new Rect(mMirrorViewBounds); mMirrorView.getBoundsOnScreen(mMirrorViewBounds); + if (oldViewBounds.width() != mMirrorViewBounds.width() + || oldViewBounds.height() != mMirrorViewBounds.height()) { + mMirrorView.setSystemGestureExclusionRects(Collections.singletonList( + new Rect(0, 0, mMirrorViewBounds.width(), mMirrorViewBounds.height()))); + } updateSystemUIStateIfNeeded(); mWindowMagnifierCallback.onWindowMagnifierBoundsChanged( mDisplayId, mMirrorViewBounds); @@ -269,6 +276,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold if (mMirrorWindowControl != null) { mMirrorWindowControl.destroyControl(); } + mMirrorViewBounds.setEmpty(); updateSystemUIStateIfNeeded(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java index ad99e4d5a7727..f62069d35d350 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java @@ -77,6 +77,8 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import java.util.List; + @LargeTest @RunWith(AndroidTestingRunner.class) public class WindowMagnificationControllerTest extends SysuiTestCase { @@ -151,6 +153,19 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { eq(mContext.getDisplayId()), any(Rect.class)); } + @Test + public void enableWindowMagnification_systemGestureExclusionRectsIsSet() { + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN, + Float.NaN); + }); + // Wait for Rects updated. + waitForIdleSync(); + + List rects = mWindowManager.getAttachedView().getSystemGestureExclusionRects(); + assertFalse(rects.isEmpty()); + } + @Test public void deleteWindowMagnification_destroyControl() { mInstrumentation.runOnMainSync(() -> {