diff options
| -rw-r--r-- | services/java/com/android/server/accessibility/AccessibilityManagerService.java | 4 | ||||
| -rw-r--r-- | services/java/com/android/server/accessibility/TouchExplorer.java | 40 |
2 files changed, 30 insertions, 14 deletions
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java index 3bddd9d025e0..9399fe932018 100644 --- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -588,6 +588,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } + int getActiveWindowId() { + return mSecurityPolicy.mActiveWindowId; + } + private Service getQueryBridge() { if (mQueryBridge == null) { AccessibilityServiceInfo info = new AccessibilityServiceInfo(); diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java index 14784dce89d0..a36c67305d35 100644 --- a/services/java/com/android/server/accessibility/TouchExplorer.java +++ b/services/java/com/android/server/accessibility/TouchExplorer.java @@ -190,6 +190,9 @@ public class TouchExplorer { // The long pressing pointer Y if coordinate remapping is needed. private int mLongPressingPointerDeltaY; + // The id of the last touch explored window. + private int mLastTouchedWindowId; + /** * Creates a new instance. * @@ -305,6 +308,11 @@ public class TouchExplorer { mInjectedPointerTracker.mLastInjectedHoverEvent.recycle(); mInjectedPointerTracker.mLastInjectedHoverEvent = null; } + mLastTouchedWindowId = -1; + } break; + case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER: + case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT: { + mLastTouchedWindowId = event.getWindowId(); } break; } } @@ -1078,13 +1086,15 @@ public class TouchExplorer { clickLocationX = (int) lastExploreEvent.getX(lastExplorePointerIndex); clickLocationY = (int) lastExploreEvent.getY(lastExplorePointerIndex); Rect activeWindowBounds = mTempRect; - mAms.getActiveWindowBounds(activeWindowBounds); - if (activeWindowBounds.contains(clickLocationX, clickLocationY)) { - Rect focusBounds = mTempRect; - if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) { - if (!focusBounds.contains(clickLocationX, clickLocationY)) { - clickLocationX = focusBounds.centerX(); - clickLocationY = focusBounds.centerY(); + if (mLastTouchedWindowId == mAms.getActiveWindowId()) { + mAms.getActiveWindowBounds(activeWindowBounds); + if (activeWindowBounds.contains(clickLocationX, clickLocationY)) { + Rect focusBounds = mTempRect; + if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) { + if (!focusBounds.contains(clickLocationX, clickLocationY)) { + clickLocationX = focusBounds.centerX(); + clickLocationY = focusBounds.centerY(); + } } } } @@ -1308,13 +1318,15 @@ public class TouchExplorer { clickLocationX = (int) lastExploreEvent.getX(lastExplorePointerIndex); clickLocationY = (int) lastExploreEvent.getY(lastExplorePointerIndex); Rect activeWindowBounds = mTempRect; - mAms.getActiveWindowBounds(activeWindowBounds); - if (activeWindowBounds.contains(clickLocationX, clickLocationY)) { - Rect focusBounds = mTempRect; - if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) { - if (!focusBounds.contains(clickLocationX, clickLocationY)) { - clickLocationX = focusBounds.centerX(); - clickLocationY = focusBounds.centerY(); + if (mLastTouchedWindowId == mAms.getActiveWindowId()) { + mAms.getActiveWindowBounds(activeWindowBounds); + if (activeWindowBounds.contains(clickLocationX, clickLocationY)) { + Rect focusBounds = mTempRect; + if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) { + if (!focusBounds.contains(clickLocationX, clickLocationY)) { + clickLocationX = focusBounds.centerX(); + clickLocationY = focusBounds.centerY(); + } } } } |