From 974305c21ec0b3cd8f54f4cac32ca45ad39c41b1 Mon Sep 17 00:00:00 2001 From: Daniel Norman Date: Mon, 6 Feb 2023 14:04:07 -0800 Subject: [PATCH] Uses DisplayManager to get default display for landscape layout. The previous mLayout.getDisplay() was returning null, causing this code path to trigger a NPE in display.getRotation() for landscape devices. Bug: 261252772 Test: Install AccessibilityMenu on a large-screen device. Enable the a11y service and interact with the UI. Change-Id: Ie4f96ba22e9874c81d70b5ad449c3ead5da437ff --- .../accessibilitymenu/view/A11yMenuOverlayLayout.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java index 7bdb8f9a00d28..e61522b7530fc 100644 --- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java +++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java @@ -24,6 +24,7 @@ import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; +import android.hardware.display.DisplayManager; import android.os.Handler; import android.os.Looper; import android.view.Display; @@ -73,6 +74,7 @@ public class A11yMenuOverlayLayout { private final AccessibilityMenuService mService; private final WindowManager mWindowManager; + private final DisplayManager mDisplayManager; private ViewGroup mLayout; private WindowManager.LayoutParams mLayoutParameter; private A11yMenuViewPager mA11yMenuViewPager; @@ -82,6 +84,7 @@ public class A11yMenuOverlayLayout { public A11yMenuOverlayLayout(AccessibilityMenuService service) { mService = service; mWindowManager = mService.getSystemService(WindowManager.class); + mDisplayManager = mService.getSystemService(DisplayManager.class); configureLayout(); mHandler = new Handler(Looper.getMainLooper()); mAccessibilityManager = mService.getSystemService(AccessibilityManager.class); @@ -161,9 +164,9 @@ public class A11yMenuOverlayLayout { /** Updates a11y menu layout position by configuring layout params. */ private void updateLayoutPosition() { - Display display = mLayout.getDisplay(); + final Display display = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY); final int orientation = mService.getResources().getConfiguration().orientation; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { + if (display != null && orientation == Configuration.ORIENTATION_LANDSCAPE) { switch (display.getRotation()) { case Surface.ROTATION_90: case Surface.ROTATION_180: