From dc6d1a9cc3a23c26c786a732e729fdd418b57d29 Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Thu, 28 Aug 2014 18:40:57 -0700 Subject: [PATCH] Fix the global gesture to enable accessibility. 1. There was a bug in the touch explorer which was crashing almost every time after accessibility was enabled via the gesture. The problem was that in dragging state when a finger goes up we were not transitioning to touch exploring state. 2. The global actions dialog was not going away after enabling accessibility while it should as the user brought it up to turn accessibility on rather to interact with global actions. bug:15254250 Change-Id: Iaa45f758e09566822775b53e87d2980138e85ef9 --- .../policy/impl/EnableAccessibilityController.java | 6 +++++- .../com/android/internal/policy/impl/GlobalActions.java | 8 +++++++- .../com/android/server/accessibility/TouchExplorer.java | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/policy/src/com/android/internal/policy/impl/EnableAccessibilityController.java b/policy/src/com/android/internal/policy/impl/EnableAccessibilityController.java index 71b0d53572d2c..6f79f587d163d 100644 --- a/policy/src/com/android/internal/policy/impl/EnableAccessibilityController.java +++ b/policy/src/com/android/internal/policy/impl/EnableAccessibilityController.java @@ -83,6 +83,7 @@ public class EnableAccessibilityController { private final Context mContext; + private final Runnable mOnAccessibilityEnabledCallback; private final UserManager mUserManager; private final TextToSpeech mTts; private final Ringtone mTone; @@ -97,8 +98,9 @@ public class EnableAccessibilityController { private float mSecondPointerDownX; private float mSecondPointerDownY; - public EnableAccessibilityController(Context context) { + public EnableAccessibilityController(Context context, Runnable onAccessibilityEnabledCallback) { mContext = context; + mOnAccessibilityEnabledCallback = onAccessibilityEnabledCallback; mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mTts = new TextToSpeech(context, new TextToSpeech.OnInitListener() { @Override @@ -275,5 +277,7 @@ public class EnableAccessibilityController { /* ignore */ } } + + mOnAccessibilityEnabledCallback.run(); } } diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java index ae9465472e061..41695c11bfca2 100644 --- a/policy/src/com/android/internal/policy/impl/GlobalActions.java +++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java @@ -1073,7 +1073,13 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac // is dismissed on the first down while the global gesture is a long press // with two fingers anywhere on the screen. if (EnableAccessibilityController.canEnableAccessibilityViaGesture(mContext)) { - mEnableAccessibilityController = new EnableAccessibilityController(mContext); + mEnableAccessibilityController = new EnableAccessibilityController(mContext, + new Runnable() { + @Override + public void run() { + dismiss(); + } + }); super.setCanceledOnTouchOutside(false); } else { mEnableAccessibilityController = null; diff --git a/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java index ac0ca0afe6b0e..af5c13dee0db3 100644 --- a/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java +++ b/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java @@ -708,6 +708,7 @@ class TouchExplorer implements EventStreamTransformation { // Send an event to the end of the drag gesture. sendMotionEvent(event, MotionEvent.ACTION_UP, pointerIdBits, policyFlags); } + mCurrentState = STATE_TOUCH_EXPLORING; } break; case MotionEvent.ACTION_UP: { mAms.onTouchInteractionEnd();