Merge "Turning off accessibility feature reboots the device"
diff --git a/services/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
index 8ba0a0b..769cb6a 100644
--- a/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
+++ b/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
@@ -56,6 +56,11 @@
          * @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 @@
         if (DEBUG) {
             Slog.d(TAG, "Accessibility input filter installed.");
         }
+        mTouchExplorer = new TouchExplorer(this, mContext);
         super.onInstalled();
     }
 
@@ -79,6 +85,7 @@
         if (DEBUG) {
             Slog.d(TAG, "Accessibility input filter uninstalled.");
         }
+        mTouchExplorer.clear();
         super.onUninstalled();
     }
 
@@ -93,11 +100,7 @@
             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);
diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java
index 0808d5d..4ad2916 100644
--- a/services/java/com/android/server/accessibility/TouchExplorer.java
+++ b/services/java/com/android/server/accessibility/TouchExplorer.java
@@ -858,8 +858,9 @@
     /**
      * 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;