From 3cd02c2b036d2196e97744681b84554b5ad4ee4d Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Thu, 2 Feb 2023 14:07:45 -0800 Subject: [PATCH] Hook-up the accessibility (magnifier) ontransition cb to shell Notifies the magnifier stuff that a transition is happening so it can, in turn, notify some observer Bug: 267646116 Test: open an app with magnifier enabled Change-Id: Icf6e4ce937dcd804b483091bd995ec7b40d7384e --- .../server/wm/AccessibilityController.java | 34 +++++++++++++++++++ .../com/android/server/wm/Transition.java | 5 +++ 2 files changed, 39 insertions(+) diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 65127e4a3b31e..8ce8c46d19394 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -342,6 +342,18 @@ final class AccessibilityController { // Not relevant for the window observer. } + void onWMTransition(int displayId, @WindowManager.TransitionType int type) { + if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) { + mAccessibilityTracing.logTrace(TAG + ".onAppWindowTransition", + FLAGS_MAGNIFICATION_CALLBACK, "displayId=" + displayId + "; type=" + type); + } + final DisplayMagnifier displayMagnifier = mDisplayMagnifiers.get(displayId); + if (displayMagnifier != null) { + displayMagnifier.onWMTransition(displayId, type); + } + // Not relevant for the window observer. + } + void onWindowTransition(WindowState windowState, int transition) { if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK | FLAGS_WINDOWS_FOR_ACCESSIBILITY_CALLBACK)) { @@ -708,6 +720,28 @@ final class AccessibilityController { } } + void onWMTransition(int displayId, @WindowManager.TransitionType int type) { + if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) { + mAccessibilityTracing.logTrace(LOG_TAG + ".onWMTransition", + FLAGS_MAGNIFICATION_CALLBACK, "displayId=" + displayId + "; type=" + type); + } + if (DEBUG_WINDOW_TRANSITIONS) { + Slog.i(LOG_TAG, "Window transition: " + WindowManager.transitTypeToString(type) + + " displayId: " + displayId); + } + final boolean magnifying = mMagnifedViewport.isMagnifying(); + if (magnifying) { + // All opening/closing situations. + switch (type) { + case WindowManager.TRANSIT_OPEN: + case WindowManager.TRANSIT_TO_FRONT: + case WindowManager.TRANSIT_CLOSE: + case WindowManager.TRANSIT_TO_BACK: + mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_USER_CONTEXT_CHANGED); + } + } + } + void onWindowTransition(WindowState windowState, int transition) { if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) { mAccessibilityTracing.logTrace(LOG_TAG + ".onWindowTransition", diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index d2f30ced46c8c..a9849694a324e 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1114,6 +1114,11 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { // client, we should finish and apply it here so the transactions aren't lost. cleanUpOnFailure(); } + final AccessibilityController accessibilityController = + dc.mWmService.mAccessibilityController; + if (accessibilityController.hasCallbacks()) { + accessibilityController.onWMTransition(dc.getDisplayId(), mType); + } } else { // No player registered, so just finish/apply immediately cleanUpOnFailure();