SetupWizard: Fix the accessibility services gesture
Returning false from onInterceptTouchEvent() or onTouchEvent() causes getPointerCount() to never be greater than 1, therefore enabling the accessibility services is currently impossible. Fix this and simplify the code merging onInterceptTouchEvent() into onTouchEvent(). Change-Id: Ieadbb41f9f3f3fb62d11f5a29986630d35e7e8c4
This commit is contained in:
@@ -42,9 +42,7 @@ public class WelcomeActivity extends BaseSetupWizardActivity {
|
|||||||
mRootView.setOnTouchListener(new View.OnTouchListener() {
|
mRootView.setOnTouchListener(new View.OnTouchListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
boolean consumeIntercept = mEnableAccessibilityController.onInterceptTouchEvent(event);
|
return mEnableAccessibilityController.onTouchEvent(event);
|
||||||
boolean consumeTouch = mEnableAccessibilityController.onTouchEvent(event);
|
|
||||||
return consumeIntercept && consumeTouch;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -90,7 +90,6 @@ public class EnableAccessibilityController {
|
|||||||
private final float mTouchSlop;
|
private final float mTouchSlop;
|
||||||
|
|
||||||
private boolean mDestroyed;
|
private boolean mDestroyed;
|
||||||
private boolean mCanceled;
|
|
||||||
|
|
||||||
private float mFirstPointerDownX;
|
private float mFirstPointerDownX;
|
||||||
private float mFirstPointerDownY;
|
private float mFirstPointerDownY;
|
||||||
@@ -157,9 +156,18 @@ public class EnableAccessibilityController {
|
|||||||
mDestroyed = true;
|
mDestroyed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onInterceptTouchEvent(MotionEvent event) {
|
public boolean onTouchEvent(MotionEvent event) {
|
||||||
if (event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN
|
final int pointerCount = event.getPointerCount();
|
||||||
&& event.getPointerCount() == 2) {
|
final int action = event.getActionMasked();
|
||||||
|
|
||||||
|
if (pointerCount != 2) {
|
||||||
|
cancel();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
case MotionEvent.ACTION_POINTER_DOWN: {
|
||||||
mFirstPointerDownX = event.getX(0);
|
mFirstPointerDownX = event.getX(0);
|
||||||
mFirstPointerDownY = event.getY(0);
|
mFirstPointerDownY = event.getY(0);
|
||||||
mSecondPointerDownX = event.getX(1);
|
mSecondPointerDownX = event.getX(1);
|
||||||
@@ -168,33 +176,9 @@ public class EnableAccessibilityController {
|
|||||||
SPEAK_WARNING_DELAY_MILLIS);
|
SPEAK_WARNING_DELAY_MILLIS);
|
||||||
mHandler.sendEmptyMessageDelayed(MESSAGE_ENABLE_ACCESSIBILITY,
|
mHandler.sendEmptyMessageDelayed(MESSAGE_ENABLE_ACCESSIBILITY,
|
||||||
ENABLE_ACCESSIBILITY_DELAY_MILLIS);
|
ENABLE_ACCESSIBILITY_DELAY_MILLIS);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onTouchEvent(MotionEvent event) {
|
|
||||||
final int pointerCount = event.getPointerCount();
|
|
||||||
final int action = event.getActionMasked();
|
|
||||||
if (mCanceled) {
|
|
||||||
if (action == MotionEvent.ACTION_UP) {
|
|
||||||
mCanceled = false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
switch (action) {
|
|
||||||
case MotionEvent.ACTION_POINTER_DOWN: {
|
|
||||||
if (pointerCount > 2) {
|
|
||||||
cancel();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_MOVE: {
|
case MotionEvent.ACTION_MOVE: {
|
||||||
//We only care about a 2 fingered move
|
|
||||||
if (pointerCount < 2) {
|
|
||||||
cancel();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
final float firstPointerMove = MathUtils.dist(event.getX(0),
|
final float firstPointerMove = MathUtils.dist(event.getX(0),
|
||||||
event.getY(0), mFirstPointerDownX, mFirstPointerDownY);
|
event.getY(0), mFirstPointerDownX, mFirstPointerDownY);
|
||||||
if (Math.abs(firstPointerMove) > mTouchSlop) {
|
if (Math.abs(firstPointerMove) > mTouchSlop) {
|
||||||
@@ -207,6 +191,7 @@ public class EnableAccessibilityController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
case MotionEvent.ACTION_POINTER_UP:
|
case MotionEvent.ACTION_POINTER_UP:
|
||||||
case MotionEvent.ACTION_CANCEL: {
|
case MotionEvent.ACTION_CANCEL: {
|
||||||
cancel();
|
cancel();
|
||||||
@@ -217,7 +202,6 @@ public class EnableAccessibilityController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void cancel() {
|
private void cancel() {
|
||||||
mCanceled = true;
|
|
||||||
if (mHandler.hasMessages(MESSAGE_SPEAK_WARNING)) {
|
if (mHandler.hasMessages(MESSAGE_SPEAK_WARNING)) {
|
||||||
mHandler.removeMessages(MESSAGE_SPEAK_WARNING);
|
mHandler.removeMessages(MESSAGE_SPEAK_WARNING);
|
||||||
} else if (mHandler.hasMessages(MESSAGE_ENABLE_ACCESSIBILITY)) {
|
} else if (mHandler.hasMessages(MESSAGE_ENABLE_ACCESSIBILITY)) {
|
||||||
|
Reference in New Issue
Block a user