diff options
author | Gilles Debunne <debunne@google.com> | 2011-09-01 13:27:33 -0700 |
---|---|---|
committer | Gilles Debunne <debunne@google.com> | 2011-09-02 11:26:46 -0700 |
commit | 70a6312f09329bd0b19343bc7906f9ce665fe3ad (patch) | |
tree | 5e85edfbd2de5dee45b1d60229a8db379933e5cb /core/java/android/text/method | |
parent | 52f159c79e4ed3367a929f4bc34ab3e184f82a15 (diff) | |
download | frameworks_base-70a6312f09329bd0b19343bc7906f9ce665fe3ad.zip frameworks_base-70a6312f09329bd0b19343bc7906f9ce665fe3ad.tar.gz frameworks_base-70a6312f09329bd0b19343bc7906f9ce665fe3ad.tar.bz2 |
Fixes around text selection
Text selection mode was started by two consecutive taps inside a
field with selectAllOnFocus.
ArrowKeyMovementMethod does not respect the possible cancelLongPress and handles up events.
As a result a scroll that happens to end up at its initial position will be considered a tap
and will move the cursor.
This is however not considered as a tap in TextView and a possible selection mode would not
be stopped in that case.
Fixed by making ArrowKeyMovementMethod aware of the cancel that happened in Touch.
Change-Id: I07372b703f250e1edc7ee0665318ce30441b9187
Diffstat (limited to 'core/java/android/text/method')
-rw-r--r-- | core/java/android/text/method/ArrowKeyMovementMethod.java | 9 | ||||
-rw-r--r-- | core/java/android/text/method/Touch.java | 9 |
2 files changed, 6 insertions, 12 deletions
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java index fe96565..b8728ee 100644 --- a/core/java/android/text/method/ArrowKeyMovementMethod.java +++ b/core/java/android/text/method/ArrowKeyMovementMethod.java @@ -232,8 +232,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme if (widget.isFocused() && !widget.didTouchFocusSelect()) { if (action == MotionEvent.ACTION_DOWN) { - boolean cap = isSelecting(buffer); - if (cap) { + if (isSelecting(buffer)) { int offset = widget.getOffsetForPosition(event.getX(), event.getY()); buffer.setSpan(LAST_TAP_DOWN, offset, offset, Spannable.SPAN_POINT_POINT); @@ -245,9 +244,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme widget.getParent().requestDisallowInterceptTouchEvent(true); } } else if (action == MotionEvent.ACTION_MOVE) { - boolean cap = isSelecting(buffer); - - if (cap && handled) { + if (isSelecting(buffer) && handled) { // Before selecting, make sure we've moved out of the "slop". // handled will be true, if we're in select mode AND we're // OUT of the slop @@ -279,7 +276,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme if (isSelecting(buffer)) { buffer.removeSpan(LAST_TAP_DOWN); Selection.extendSelection(buffer, offset); - } else { + } else if (!widget.shouldIgnoreActionUpEvent()) { Selection.setSelection(buffer, offset); } diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java index a528044..3f9b945 100644 --- a/core/java/android/text/method/Touch.java +++ b/core/java/android/text/method/Touch.java @@ -147,12 +147,10 @@ public class Touch { int nx = widget.getScrollX() + (int) dx; int ny = widget.getScrollY() + (int) dy; - int padding = widget.getTotalPaddingTop() + - widget.getTotalPaddingBottom(); + int padding = widget.getTotalPaddingTop() + widget.getTotalPaddingBottom(); Layout layout = widget.getLayout(); - ny = Math.min(ny, layout.getHeight() - (widget.getHeight() - - padding)); + ny = Math.min(ny, layout.getHeight() - (widget.getHeight() - padding)); ny = Math.max(ny, 0); int oldX = widget.getScrollX(); @@ -161,8 +159,7 @@ public class Touch { scrollTo(widget, layout, nx, ny); // If we actually scrolled, then cancel the up action. - if (oldX != widget.getScrollX() - || oldY != widget.getScrollY()) { + if (oldX != widget.getScrollX() || oldY != widget.getScrollY()) { widget.cancelLongPress(); } |