summaryrefslogtreecommitdiffstats
path: root/core/java/android/text/method
diff options
context:
space:
mode:
authorMaryam Garrett <mkamvar@google.com>2009-12-10 15:42:30 -0500
committerMaryam Garrett <mkamvar@google.com>2009-12-10 16:00:32 -0500
commitab9289320f598509cf358523ba173d69178a55ea (patch)
tree1ecc7f83f906546308e005699f5b57e0e896ea6b /core/java/android/text/method
parent159f0015418955501d8cf2744b0393db2e73f394 (diff)
downloadframeworks_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.java8
-rw-r--r--core/java/android/text/method/Touch.java20
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();