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
This commit is contained in:
ryanlwlin
2021-07-27 14:34:11 +08:00
parent f322e418ce
commit 04e3ea9b85

View File

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