summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/text/method/ArrowKeyMovementMethod.java10
-rw-r--r--core/java/android/widget/TextView.java52
2 files changed, 23 insertions, 39 deletions
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java
index 0d012d6..d724320 100644
--- a/core/java/android/text/method/ArrowKeyMovementMethod.java
+++ b/core/java/android/text/method/ArrowKeyMovementMethod.java
@@ -190,7 +190,9 @@ public class ArrowKeyMovementMethod implements MovementMethod {
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int initialScrollX = -1, initialScrollY = -1;
- if (event.getAction() == MotionEvent.ACTION_UP) {
+ final int action = event.getAction();
+
+ if (action == MotionEvent.ACTION_UP) {
initialScrollX = Touch.getInitialScrollX(widget, buffer);
initialScrollY = Touch.getInitialScrollY(widget, buffer);
}
@@ -198,7 +200,7 @@ public class ArrowKeyMovementMethod implements MovementMethod {
boolean handled = Touch.onTouchEvent(widget, buffer, event);
if (widget.isFocused() && !widget.didTouchFocusSelect()) {
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ if (action == MotionEvent.ACTION_DOWN) {
boolean cap = isCap(buffer);
if (cap) {
int offset = widget.getOffset((int) event.getX(), (int) event.getY());
@@ -211,7 +213,7 @@ public class ArrowKeyMovementMethod implements MovementMethod {
// mode once the view detected it needed to scroll.
widget.getParent().requestDisallowInterceptTouchEvent(true);
}
- } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
+ } else if (action == MotionEvent.ACTION_MOVE) {
boolean cap = isCap(buffer);
if (cap && handled) {
@@ -231,7 +233,7 @@ public class ArrowKeyMovementMethod implements MovementMethod {
Selection.extendSelection(buffer, offset);
return true;
}
- } else if (event.getAction() == MotionEvent.ACTION_UP) {
+ } else if (action == MotionEvent.ACTION_UP) {
// If we have scrolled, then the up shouldn't move the cursor,
// but we do need to make sure the cursor is still visible at
// the current scroll offset to avoid the scroll jumping later
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 57af643..cfdcd32 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -220,8 +220,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private boolean mTemporaryDetach;
private boolean mDispatchTemporaryDetach;
- private boolean mEatTouchRelease = false;
- private boolean mScrolled = false;
+ private boolean mDiscardNextActionUp = false;
+ private boolean mIgnoreActionUpEvent = false;
private Editable.Factory mEditableFactory = Editable.Factory.getInstance();
private Spannable.Factory mSpannableFactory = Spannable.Factory.getInstance();
@@ -7002,26 +7002,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
- private void onTapUpEvent(int prevStart, int prevEnd) {
- final int start = getSelectionStart();
- final int end = getSelectionEnd();
-
- if (start == end) {
- if (start >= prevStart && start < prevEnd) {
- // Restore previous selection
- Selection.setSelection((Spannable)mText, prevStart, prevEnd);
- return;
- } else {
- // Tapping outside stops selection mode, if any
- stopSelectionActionMode();
-
- if (hasInsertionController()) {
- getInsertionController().show();
- }
- }
- }
- }
-
class CommitSelectionReceiver extends ResultReceiver {
private final int mPrevStart, mPrevEnd;
@@ -7066,7 +7046,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// Reset this state; it will be re-set if super.onTouchEvent
// causes focus to move to the view.
mTouchFocusSelected = false;
- mScrolled = false;
+ mIgnoreActionUpEvent = false;
}
final boolean superResult = super.onTouchEvent(event);
@@ -7076,8 +7056,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* move the selection away from whatever the menu action was
* trying to affect.
*/
- if (mEatTouchRelease && action == MotionEvent.ACTION_UP) {
- mEatTouchRelease = false;
+ if (mDiscardNextActionUp && action == MotionEvent.ACTION_UP) {
+ mDiscardNextActionUp = false;
return superResult;
}
@@ -7106,7 +7086,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mSelectionModifierCursorController.updatePosition();
}
}
- if (action == MotionEvent.ACTION_UP && !mScrolled && isFocused()) {
+ if (action == MotionEvent.ACTION_UP && !mIgnoreActionUpEvent && isFocused()) {
InputMethodManager imm = (InputMethodManager)
getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
@@ -7117,13 +7097,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
if (!mTextIsSelectable) {
- // Selection in read-only text should not bring up the IME.
+ // Show the IME, except when selecting in read-only text.
handled |= imm.showSoftInput(this, 0, csr) && (csr != null);
}
- // Cannot be done by CommitSelectionReceiver, which might not always be called,
- // for instance when dealing with an ExtractEditText.
- onTapUpEvent(oldSelStart, oldSelEnd);
+ stopSelectionActionMode();
+ if (hasInsertionController()) {
+ getInsertionController().show();
+ }
}
}
@@ -7181,7 +7162,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void cancelLongPress() {
super.cancelLongPress();
- mScrolled = true;
+ mIgnoreActionUpEvent = true;
}
@Override
@@ -7815,7 +7796,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public boolean performLongClick() {
if (super.performLongClick()) {
- mEatTouchRelease = true;
+ mDiscardNextActionUp = true;
return true;
}
@@ -7826,7 +7807,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
stopSelectionActionMode();
Selection.setSelection((Spannable)mText, offset);
getInsertionController().show(0);
- mEatTouchRelease = true;
+ mDiscardNextActionUp = true;
return true;
}
@@ -7845,13 +7826,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
getSelectionController().show();
}
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
- mEatTouchRelease = true;
+ mDiscardNextActionUp = true;
return true;
}
if (startSelectionActionMode()) {
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
- mEatTouchRelease = true;
+ mDiscardNextActionUp = true;
return true;
}
@@ -8772,6 +8753,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
final int slopSquared = doubleTapSlop * doubleTapSlop;
if (distanceSquared < slopSquared) {
startSelectionActionMode();
+ mDiscardNextActionUp = true;
}
}