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
This commit is contained in:
Daniel Norman
2023-02-06 14:04:07 -08:00
parent 4fcb6f4ebd
commit 974305c21e

View File

@@ -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: