diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/AccessibilityController.java | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 5e4f75cca10d..c57ac11723b4 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -132,17 +132,20 @@ final class AccessibilityController { return false; } - if (mWindowsForAccessibilityObserver.get(displayId) != null) { - final Display display = dc.getDisplay(); - if (display.getType() == Display.TYPE_VIRTUAL && dc.getParentWindow() != null) { - // The window observer of this embedded display had been set from - // window manager after setting its parent window. - return false; - } else { - throw new IllegalStateException( - "Windows for accessibility callback of display " - + displayId + " already set!"); + final Display display = dc.getDisplay(); + if (display.getType() == Display.TYPE_VIRTUAL && dc.getParentWindow() != null) { + // If this display is an embedded one, its window observer should have been set from + // window manager after setting its parent window. But if its window observer is + // empty, that means this mapping didn't be set, and needs to do this again. + // This happened when accessibility window observer is disabled and enabled again. + if (mWindowsForAccessibilityObserver.get(displayId) == null) { + handleWindowObserverOfEmbeddedDisplayLocked(displayId, dc.getParentWindow()); } + return false; + } else if (mWindowsForAccessibilityObserver.get(displayId) != null) { + throw new IllegalStateException( + "Windows for accessibility callback of display " + + displayId + " already set!"); } mWindowsForAccessibilityObserver.put(displayId, new WindowsForAccessibilityObserver(mService, displayId, callback)); |