diff options
author | Maryam Garrett <mkamvar@google.com> | 2009-12-10 15:42:30 -0500 |
---|---|---|
committer | Maryam Garrett <mkamvar@google.com> | 2009-12-10 16:00:32 -0500 |
commit | ab9289320f598509cf358523ba173d69178a55ea (patch) | |
tree | 1ecc7f83f906546308e005699f5b57e0e896ea6b /core/java/android/text/method | |
parent | 159f0015418955501d8cf2744b0393db2e73f394 (diff) | |
download | frameworks_base-ab9289320f598509cf358523ba173d69178a55ea.zip frameworks_base-ab9289320f598509cf358523ba173d69178a55ea.tar.gz frameworks_base-ab9289320f598509cf358523ba173d69178a55ea.tar.bz2 |
Allows users to scroll while in select mode.
This change allows the user to select-n-scroll. While a user
is in select mode, and they try to scroll, the textbox will
scroll in the direction of the selection, and expand the selection.
Diffstat (limited to 'core/java/android/text/method')
-rw-r--r-- | core/java/android/text/method/ArrowKeyMovementMethod.java | 8 | ||||
-rw-r--r-- | core/java/android/text/method/Touch.java | 20 |
2 files changed, 23 insertions, 5 deletions
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java index 789172f..e27804c 100644 --- a/core/java/android/text/method/ArrowKeyMovementMethod.java +++ b/core/java/android/text/method/ArrowKeyMovementMethod.java @@ -254,6 +254,12 @@ implements MovementMethod buffer.setSpan(LAST_TAP_DOWN, offset, offset, Spannable.SPAN_POINT_POINT); + + // Disallow intercepting of the touch events, so that + // users can scroll and select at the same time. + // without this, users would get booted out of select + // mode once the view detected it needed to scroll. + widget.getParent().requestDisallowInterceptTouchEvent(true); } } else if (event.getAction() == MotionEvent.ACTION_MOVE ) { boolean cap = (MetaKeyKeyListener.getMetaState(buffer, @@ -277,7 +283,7 @@ implements MovementMethod int spanstart; int spanend; if (offset >= lastDownOffset) { - // expand to from word start of the original tap to new word + // Expand from word start of the original tap to new word // end, since we are selecting "forwards" spanstart = findWordStart(buffer, lastDownOffset); spanend = findWordEnd(buffer, offset); diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java index aa8d979..42ad10e 100644 --- a/core/java/android/text/method/Touch.java +++ b/core/java/android/text/method/Touch.java @@ -24,6 +24,7 @@ import android.util.Log; import android.view.MotionEvent; import android.view.ViewConfiguration; import android.widget.TextView; +import android.view.KeyEvent; public class Touch { private Touch() { } @@ -139,10 +140,21 @@ public class Touch { if (ds[0].mFarEnough) { ds[0].mUsed = true; - - float dx = ds[0].mX - event.getX(); - float dy = ds[0].mY - event.getY(); - + boolean cap = (MetaKeyKeyListener.getMetaState(buffer, + KeyEvent.META_SHIFT_ON) == 1) || + (MetaKeyKeyListener.getMetaState(buffer, + MetaKeyKeyListener.META_SELECTING) != 0); + float dx; + float dy; + if (cap) { + // if we're selecting, we want the scroll to go in + // the direction of the drag + dx = event.getX() - ds[0].mX; + dy = event.getY() - ds[0].mY; + } else { + dx = ds[0].mX - event.getX(); + dy = ds[0].mY - event.getY(); + } ds[0].mX = event.getX(); ds[0].mY = event.getY(); |