Long click: use the node's window's bounds instead of asking WMS.

The WindowManagerService#getWindowFrame method returns an empty rect
when the requested window has no window state. As evident by the
checks in wm/AccessibilityWindowsPopulator not all windows have a
WindowState known by WMS.

This change grabs the node's window's bounds by getting the node's
A11yWindowInfo then checking bounds in screen. This always returns a
non-empty rect because it uses bounds data from SurfaceFlinger's
onWindowInfosChanged callback.

Bug: 317166487
Test: atest TouchInteractionControllerTest
Test: Launch an app in aspect ratio compat mode. Use TalkBack swipe
      gestures to focus on the aspect ratio button. Double-tap and hold
      anywhere on the screen. Observe that the button is long-clicked.
Change-Id: I09ea7bfc002c9878304d273bfc7f87d3e6de0d0a
diff --git a/services/accessibility/accessibility.aconfig b/services/accessibility/accessibility.aconfig
index 8ab2e0f..5846c92 100644
--- a/services/accessibility/accessibility.aconfig
+++ b/services/accessibility/accessibility.aconfig
@@ -91,6 +91,16 @@
 }
 
 flag {
+    name: "focus_click_point_window_bounds_from_a11y_window_info"
+    namespace: "accessibility"
+    description: "Uses A11yWindowInfo bounds for focus click point bounds checking"
+    bug: "317166487"
+    metadata {
+        purpose: PURPOSE_BUGFIX
+    }
+}
+
+flag {
     name: "fullscreen_fling_gesture"
     namespace: "accessibility"
     description: "When true, adds a fling gesture animation for fullscreen magnification"
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index ccf9a90..3378bf2 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -5234,7 +5234,14 @@
 
                 //Clip to the window bounds.
                 Rect windowBounds = mTempRect1;
-                getWindowBounds(focus.getWindowId(), windowBounds);
+                if (Flags.focusClickPointWindowBoundsFromA11yWindowInfo()) {
+                    AccessibilityWindowInfo window = focus.getWindow();
+                    if (window != null) {
+                        window.getBoundsInScreen(windowBounds);
+                    }
+                } else {
+                    getWindowBounds(focus.getWindowId(), windowBounds);
+                }
                 if (!boundsInScreenBeforeMagnification.intersect(windowBounds)) {
                     return false;
                 }