diff options
-rw-r--r-- | core/java/android/text/method/ArrowKeyMovementMethod.java | 10 | ||||
-rw-r--r-- | core/java/android/widget/TextView.java | 52 |
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; } } |