From f93d23ac588606dc3bc90c38b027047231486647 Mon Sep 17 00:00:00 2001 From: Miranda Kephart Date: Mon, 1 Feb 2021 14:50:05 -0500 Subject: [PATCH] Fix screenshot behavior with display cutout Insets need to be set on the decor view, rather than the screenshot view, in order to be picked up correctly. Bug: 179050074 Fix: 179050074 Test: manual; taking a screenshot on a phone with a display cutout results in a black bar at the top of the screen pre-change and correctly fills the screen post-change Change-Id: I4784027009359376624699c4ef3e174c047c086d --- .../systemui/screenshot/ScreenshotController.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java index d6413ed63e6e1..79e618d29f362 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java @@ -388,12 +388,6 @@ public class ScreenshotController { } }); - // ignore system bar insets for the purpose of window layout - mScreenshotView.setOnApplyWindowInsetsListener((v, insets) -> v.onApplyWindowInsets( - new WindowInsets.Builder(insets) - .setInsets(WindowInsets.Type.all(), Insets.NONE) - .build())); - // TODO(159460485): Remove this when focus is handled properly in the system mScreenshotView.setOnTouchListener((v, event) -> { if (event.getActionMasked() == MotionEvent.ACTION_OUTSIDE) { @@ -533,9 +527,6 @@ public class ScreenshotController { attachWindow(); - if (DEBUG_WINDOW) { - Log.d(TAG, "setContentView: " + mScreenshotView); - } mScreenshotView.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override @@ -549,7 +540,13 @@ public class ScreenshotController { } }); mScreenshotView.setScreenshot(mScreenBitmap, screenInsets); + if (DEBUG_WINDOW) { + Log.d(TAG, "setContentView: " + mScreenshotView); + } setContentView(mScreenshotView); + // ignore system bar insets for the purpose of window layout + mWindow.getDecorView().setOnApplyWindowInsetsListener( + (v, insets) -> WindowInsets.CONSUMED); cancelTimeout(); // restarted after animation }