From 04e3ea9b85e7b6383da6f02bc9ad189a3fccadd0 Mon Sep 17 00:00:00 2001 From: ryanlwlin Date: Tue, 27 Jul 2021 14:34:11 +0800 Subject: [PATCH] Adjust the click point when magnification is activated After ag/5612023, the click point calculation should depend on the global screen coordinate instead of the coordinate before magnification. Bug: 193200262 Test: manual test on launcher Change-Id: If51885f43e78c1554fdcd0642fb301a466d3bdba --- .../AccessibilityManagerService.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 0e39327991237..a11e2641e5c9a 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3576,31 +3576,36 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } synchronized (mLock) { - Rect boundsInScreen = mTempRect; - focus.getBoundsInScreen(boundsInScreen); + Rect boundsInScreenBeforeMagnification = mTempRect; - // Apply magnification if needed. + focus.getBoundsInScreen(boundsInScreenBeforeMagnification); + final Point nodeCenter = new Point(boundsInScreenBeforeMagnification.centerX(), + boundsInScreenBeforeMagnification.centerY()); + + // Invert magnification if needed. MagnificationSpec spec = getCompatibleMagnificationSpecLocked(focus.getWindowId()); if (spec != null && !spec.isNop()) { - boundsInScreen.offset((int) -spec.offsetX, (int) -spec.offsetY); - boundsInScreen.scale(1 / spec.scale); + boundsInScreenBeforeMagnification.offset((int) -spec.offsetX, + (int) -spec.offsetY); + boundsInScreenBeforeMagnification.scale(1 / spec.scale); } - // Clip to the window bounds. + //Clip to the window bounds. Rect windowBounds = mTempRect1; getWindowBounds(focus.getWindowId(), windowBounds); - if (!boundsInScreen.intersect(windowBounds)) { + if (!boundsInScreenBeforeMagnification.intersect(windowBounds)) { return false; } - // Clip to the screen bounds. + //Clip to the screen bounds. Point screenSize = mTempPoint; mDefaultDisplay.getRealSize(screenSize); - if (!boundsInScreen.intersect(0, 0, screenSize.x, screenSize.y)) { + if (!boundsInScreenBeforeMagnification.intersect(0, 0, screenSize.x, + screenSize.y)) { return false; } - outPoint.set(boundsInScreen.centerX(), boundsInScreen.centerY()); + outPoint.set(nodeCenter.x, nodeCenter.y); } return true;