summaryrefslogtreecommitdiffstats
path: root/core/java/android/webkit/WebTextView.java
diff options
context:
space:
mode:
authorLeon Scroggins <scroggo@google.com>2009-08-12 18:48:10 -0400
committerLeon Scroggins <scroggo@google.com>2009-08-13 14:21:24 -0400
commit6679f2f70813eb93bf88297dc2de5e56bc7d7ca0 (patch)
treec360a87363680a06eb68aa15aa6b17d59d2ee1b2 /core/java/android/webkit/WebTextView.java
parentda83f4674a564007baac03db062a289c8158d940 (diff)
downloadframeworks_base-6679f2f70813eb93bf88297dc2de5e56bc7d7ca0.zip
frameworks_base-6679f2f70813eb93bf88297dc2de5e56bc7d7ca0.tar.gz
frameworks_base-6679f2f70813eb93bf88297dc2de5e56bc7d7ca0.tar.bz2
Pass clicks to webkit's textfield to determine the new selection.
Requires a corresponding change to external/webkit. We were previously letting WebTextView handle clicks, determine the change in selection, and pass that down to webkit. This sometimes resulted in a different placement of the caret if the WebTextView and the webkit-rendered textfield did not line up exactly. Now, we pass the click directly to webkit, which determines the new selection and passes that info back to the WebTextView. This also has the benefit of letting the WebTextView reflect changes in the selection that originated from webkit. Also remove some unused parameters.
Diffstat (limited to 'core/java/android/webkit/WebTextView.java')
-rw-r--r--core/java/android/webkit/WebTextView.java25
1 files changed, 21 insertions, 4 deletions
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index f22adb7..a1f2223 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -85,6 +85,10 @@ import java.util.ArrayList;
// happens, the next time the user hits a key it is okay for the focus
// pointer to not match the WebTextView's node pointer
private boolean mOkayForFocusNotToMatch;
+ // Whether or not a selection change was generated from webkit. If it was,
+ // we do not need to pass the selection back to webkit.
+ private boolean mFromWebKit;
+ private boolean mGotTouchDown;
// Array to store the final character added in onTextChanged, so that its
// KeyEvents may be determined.
private char[] mCharacter = new char[1];
@@ -342,7 +346,7 @@ import java.util.ArrayList;
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
- if (mWebView != null) {
+ if (!mFromWebKit && mWebView != null) {
if (DebugFlags.WEB_TEXT_VIEW) {
Log.v(LOGTAG, "onSelectionChanged selStart=" + selStart
+ " selEnd=" + selEnd);
@@ -423,6 +427,7 @@ import java.util.ArrayList;
mDragStartTime = event.getEventTime();
mDragSent = false;
mScrolled = false;
+ mGotTouchDown = true;
break;
case MotionEvent.ACTION_MOVE:
Spannable buffer = getText();
@@ -456,14 +461,17 @@ import java.util.ArrayList;
case MotionEvent.ACTION_CANCEL:
if (!mScrolled) {
// If the page scrolled, or the TextView scrolled, we do not
- // want to change the selection, and the long press has already
- // been canceled, so there is no need to call into super.
- super.onTouchEvent(event);
+ // want to change the selection
+ cancelLongPress();
+ if (mGotTouchDown && mWebView != null) {
+ mWebView.touchUpOnTextField(event);
+ }
}
// Necessary for the WebView to reset its state
if (mWebView != null && mDragSent) {
mWebView.onTouchEvent(event);
}
+ mGotTouchDown = false;
break;
default:
break;
@@ -686,6 +694,15 @@ import java.util.ArrayList;
}
/**
+ * Set the selection, and disable our onSelectionChanged action.
+ */
+ /* package */ void setSelectionFromWebKit(int start, int end) {
+ mFromWebKit = true;
+ Selection.setSelection((Spannable) getText(), start, end);
+ mFromWebKit = false;
+ }
+
+ /**
* Set whether this is a single-line textfield or a multi-line textarea.
* Textfields scroll horizontally, and do not handle the enter key.
* Textareas behave oppositely.