am c3493f94: am 88676e0b: Merge "TouchExploer computes incorrectly the click location." into lmp-dev
* commit 'c3493f943e89213fe0ae20fe12b586f28ceae174': TouchExploer computes incorrectly the click location.
This commit is contained in:
@@ -787,6 +787,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean accessibilityFocusOnlyInActiveWindow() {
|
||||||
|
synchronized (mLock) {
|
||||||
|
return mWindowsForAccessibilityCallback == null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int getActiveWindowId() {
|
int getActiveWindowId() {
|
||||||
return mSecurityPolicy.getActiveWindowId();
|
return mSecurityPolicy.getActiveWindowId();
|
||||||
}
|
}
|
||||||
@@ -3596,6 +3602,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void notifyWindowsChanged() {
|
private void notifyWindowsChanged() {
|
||||||
|
if (mWindowsForAccessibilityCallback == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
final long identity = Binder.clearCallingIdentity();
|
final long identity = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
// Let the client know the windows changed.
|
// Let the client know the windows changed.
|
||||||
@@ -3680,6 +3689,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRetrievalAllowingWindow(int windowId) {
|
private boolean isRetrievalAllowingWindow(int windowId) {
|
||||||
|
// The system gets to interact with any window it wants.
|
||||||
|
if (Binder.getCallingUid() == Process.SYSTEM_UID) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (windowId == mActiveWindowId) {
|
if (windowId == mActiveWindowId) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1151,42 +1151,12 @@ class TouchExplorer implements EventStreamTransformation {
|
|||||||
mSendTouchInteractionEndDelayed.forceSendAndRemove();
|
mSendTouchInteractionEndDelayed.forceSendAndRemove();
|
||||||
}
|
}
|
||||||
|
|
||||||
int clickLocationX;
|
|
||||||
int clickLocationY;
|
|
||||||
|
|
||||||
final int pointerId = secondTapUp.getPointerId(secondTapUp.getActionIndex());
|
final int pointerId = secondTapUp.getPointerId(secondTapUp.getActionIndex());
|
||||||
final int pointerIndex = secondTapUp.findPointerIndex(pointerId);
|
final int pointerIndex = secondTapUp.findPointerIndex(pointerId);
|
||||||
|
|
||||||
MotionEvent lastExploreEvent =
|
Point clickLocation = mTempPoint;
|
||||||
mInjectedPointerTracker.getLastInjectedHoverEventForClick();
|
if (!computeClickLocation(clickLocation)) {
|
||||||
if (lastExploreEvent == null) {
|
return;
|
||||||
// No last touch explored event but there is accessibility focus in
|
|
||||||
// the active window. We click in the focus bounds.
|
|
||||||
Point point = mTempPoint;
|
|
||||||
if (mAms.getAccessibilityFocusClickPointInScreen(point)) {
|
|
||||||
clickLocationX = point.x;
|
|
||||||
clickLocationY = point.y;
|
|
||||||
} else {
|
|
||||||
// Out of luck - do nothing.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If the click is within the active window but not within the
|
|
||||||
// accessibility focus bounds we click in the focus bounds.
|
|
||||||
final int lastExplorePointerIndex = lastExploreEvent.getActionIndex();
|
|
||||||
clickLocationX = (int) lastExploreEvent.getX(lastExplorePointerIndex);
|
|
||||||
clickLocationY = (int) lastExploreEvent.getY(lastExplorePointerIndex);
|
|
||||||
Rect activeWindowBounds = mTempRect;
|
|
||||||
if (mLastTouchedWindowId == mAms.getActiveWindowId()) {
|
|
||||||
mAms.getActiveWindowBounds(activeWindowBounds);
|
|
||||||
if (activeWindowBounds.contains(clickLocationX, clickLocationY)) {
|
|
||||||
Point point = mTempPoint;
|
|
||||||
if (mAms.getAccessibilityFocusClickPointInScreen(point)) {
|
|
||||||
clickLocationX = point.x;
|
|
||||||
clickLocationY = point.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do the click.
|
// Do the click.
|
||||||
@@ -1195,8 +1165,8 @@ class TouchExplorer implements EventStreamTransformation {
|
|||||||
secondTapUp.getPointerProperties(pointerIndex, properties[0]);
|
secondTapUp.getPointerProperties(pointerIndex, properties[0]);
|
||||||
PointerCoords[] coords = new PointerCoords[1];
|
PointerCoords[] coords = new PointerCoords[1];
|
||||||
coords[0] = new PointerCoords();
|
coords[0] = new PointerCoords();
|
||||||
coords[0].x = clickLocationX;
|
coords[0].x = clickLocation.x;
|
||||||
coords[0].y = clickLocationY;
|
coords[0].y = clickLocation.y;
|
||||||
MotionEvent event = MotionEvent.obtain(secondTapUp.getDownTime(),
|
MotionEvent event = MotionEvent.obtain(secondTapUp.getDownTime(),
|
||||||
secondTapUp.getEventTime(), MotionEvent.ACTION_DOWN, 1, properties,
|
secondTapUp.getEventTime(), MotionEvent.ACTION_DOWN, 1, properties,
|
||||||
coords, 0, 0, 1.0f, 1.0f, secondTapUp.getDeviceId(), 0,
|
coords, 0, 0, 1.0f, 1.0f, secondTapUp.getDeviceId(), 0,
|
||||||
@@ -1246,6 +1216,24 @@ class TouchExplorer implements EventStreamTransformation {
|
|||||||
MAX_DRAGGING_ANGLE_COS);
|
MAX_DRAGGING_ANGLE_COS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean computeClickLocation(Point outLocation) {
|
||||||
|
MotionEvent lastExploreEvent = mInjectedPointerTracker.getLastInjectedHoverEventForClick();
|
||||||
|
if (lastExploreEvent != null) {
|
||||||
|
final int lastExplorePointerIndex = lastExploreEvent.getActionIndex();
|
||||||
|
outLocation.x = (int) lastExploreEvent.getX(lastExplorePointerIndex);
|
||||||
|
outLocation.y = (int) lastExploreEvent.getY(lastExplorePointerIndex);
|
||||||
|
if (!mAms.accessibilityFocusOnlyInActiveWindow()
|
||||||
|
|| mLastTouchedWindowId == mAms.getActiveWindowId()) {
|
||||||
|
mAms.getAccessibilityFocusClickPointInScreen(outLocation);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (mAms.getAccessibilityFocusClickPointInScreen(outLocation)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the symbolic name of a state.
|
* Gets the symbolic name of a state.
|
||||||
*
|
*
|
||||||
@@ -1328,41 +1316,14 @@ class TouchExplorer implements EventStreamTransformation {
|
|||||||
final int pointerId = mEvent.getPointerId(mEvent.getActionIndex());
|
final int pointerId = mEvent.getPointerId(mEvent.getActionIndex());
|
||||||
final int pointerIndex = mEvent.findPointerIndex(pointerId);
|
final int pointerIndex = mEvent.findPointerIndex(pointerId);
|
||||||
|
|
||||||
MotionEvent lastExploreEvent =
|
Point clickLocation = mTempPoint;
|
||||||
mInjectedPointerTracker.getLastInjectedHoverEventForClick();
|
if (!computeClickLocation(clickLocation)) {
|
||||||
if (lastExploreEvent == null) {
|
return;
|
||||||
// No last touch explored event but there is accessibility focus in
|
|
||||||
// the active window. We click in the focus bounds.
|
|
||||||
Point point = mTempPoint;
|
|
||||||
if (mAms.getAccessibilityFocusClickPointInScreen(point)) {
|
|
||||||
clickLocationX = point.x;
|
|
||||||
clickLocationY = point.y;
|
|
||||||
} else {
|
|
||||||
// Out of luck - do nothing.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If the click is within the active window but not within the
|
|
||||||
// accessibility focus bounds we click in the focus bounds.
|
|
||||||
final int lastExplorePointerIndex = lastExploreEvent.getActionIndex();
|
|
||||||
clickLocationX = (int) lastExploreEvent.getX(lastExplorePointerIndex);
|
|
||||||
clickLocationY = (int) lastExploreEvent.getY(lastExplorePointerIndex);
|
|
||||||
Rect activeWindowBounds = mTempRect;
|
|
||||||
if (mLastTouchedWindowId == mAms.getActiveWindowId()) {
|
|
||||||
mAms.getActiveWindowBounds(activeWindowBounds);
|
|
||||||
if (activeWindowBounds.contains(clickLocationX, clickLocationY)) {
|
|
||||||
Point point = mTempPoint;
|
|
||||||
if (mAms.getAccessibilityFocusClickPointInScreen(point)) {
|
|
||||||
clickLocationX = point.x;
|
|
||||||
clickLocationY = point.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mLongPressingPointerId = pointerId;
|
mLongPressingPointerId = pointerId;
|
||||||
mLongPressingPointerDeltaX = (int) mEvent.getX(pointerIndex) - clickLocationX;
|
mLongPressingPointerDeltaX = (int) mEvent.getX(pointerIndex) - clickLocation.x;
|
||||||
mLongPressingPointerDeltaY = (int) mEvent.getY(pointerIndex) - clickLocationY;
|
mLongPressingPointerDeltaY = (int) mEvent.getY(pointerIndex) - clickLocation.y;
|
||||||
|
|
||||||
sendHoverExitAndTouchExplorationGestureEndIfNeeded(mPolicyFlags);
|
sendHoverExitAndTouchExplorationGestureEndIfNeeded(mPolicyFlags);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user