summaryrefslogtreecommitdiffstats
path: root/core/java/android/text/method
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2011-09-01 13:27:33 -0700
committerGilles Debunne <debunne@google.com>2011-09-02 11:26:46 -0700
commit70a6312f09329bd0b19343bc7906f9ce665fe3ad (patch)
tree5e85edfbd2de5dee45b1d60229a8db379933e5cb /core/java/android/text/method
parent52f159c79e4ed3367a929f4bc34ab3e184f82a15 (diff)
downloadframeworks_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.java9
-rw-r--r--core/java/android/text/method/Touch.java9
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();
}