Turning off accessibility feature reboots the device
1. The touch explorer uses delayed injection of events which can happen after its hosting accessibility input filer has been unregistered, thus the explorer was trying to inject events when this is not allowed. Now upon unregistration of the accessibility explorer it resets the state of the touch explorer it hosts. bug:5105956 Change-Id: I720682abf93382aedf4f431eaac90fd2c781e442
This commit is contained in:
@@ -56,6 +56,11 @@ public class AccessibilityInputFilter extends InputFilter {
|
||||
* @param policyFlags The policy flags associated with the event.
|
||||
*/
|
||||
public void clear(MotionEvent event, int policyFlags);
|
||||
|
||||
/**
|
||||
* Requests that the explorer clears its internal state.
|
||||
*/
|
||||
public void clear();
|
||||
}
|
||||
|
||||
private TouchExplorer mTouchExplorer;
|
||||
@@ -71,6 +76,7 @@ public class AccessibilityInputFilter extends InputFilter {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "Accessibility input filter installed.");
|
||||
}
|
||||
mTouchExplorer = new TouchExplorer(this, mContext);
|
||||
super.onInstalled();
|
||||
}
|
||||
|
||||
@@ -79,6 +85,7 @@ public class AccessibilityInputFilter extends InputFilter {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "Accessibility input filter uninstalled.");
|
||||
}
|
||||
mTouchExplorer.clear();
|
||||
super.onUninstalled();
|
||||
}
|
||||
|
||||
@@ -93,11 +100,7 @@ public class AccessibilityInputFilter extends InputFilter {
|
||||
int deviceId = event.getDeviceId();
|
||||
if (mTouchscreenSourceDeviceId != deviceId) {
|
||||
mTouchscreenSourceDeviceId = deviceId;
|
||||
if (mTouchExplorer != null) {
|
||||
mTouchExplorer.clear(motionEvent, policyFlags);
|
||||
} else {
|
||||
mTouchExplorer = new TouchExplorer(this, mContext);
|
||||
}
|
||||
mTouchExplorer.clear(motionEvent, policyFlags);
|
||||
}
|
||||
if ((policyFlags & WindowManagerPolicy.FLAG_PASS_TO_USER) != 0) {
|
||||
mTouchExplorer.onMotionEvent(motionEvent, policyFlags);
|
||||
|
||||
@@ -858,8 +858,9 @@ public class TouchExplorer implements Explorer {
|
||||
/**
|
||||
* Clears the internal state of this explorer.
|
||||
*/
|
||||
private void clear() {
|
||||
public void clear() {
|
||||
mSendHoverDelayed.remove();
|
||||
mPerformLongPressDelayed.remove();
|
||||
mPointerTracker.clear();
|
||||
mLastTouchExploreEvent = null;
|
||||
mCurrentState = STATE_TOUCH_EXPLORING;
|
||||
|
||||
Reference in New Issue
Block a user