diff options
Diffstat (limited to 'core/java/android/widget/TextView.java')
-rw-r--r-- | core/java/android/widget/TextView.java | 52 |
1 files changed, 17 insertions, 35 deletions
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; } } |