summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author George Mount <mount@google.com> 2012-03-21 10:29:08 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2012-03-21 10:29:08 -0700
commitf3616da6a8f5576c99a0cf1884f2c6be758f63f7 (patch)
tree1c02379fb5787fe10158a6b607976607dcc6c08c
parentceb0909bc2c9427f4b5a2c8cad219cdb73577956 (diff)
parentf796fdfe6d5ebc4f22b5cb167f866c7a74d71260 (diff)
Merge "Make paste window and caret handle show up at the right time."
-rw-r--r--core/java/android/webkit/WebViewClassic.java43
-rw-r--r--core/java/android/webkit/WebViewCore.java7
2 files changed, 36 insertions, 14 deletions
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index 13a2c94e7832..aa4de2e125ce 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -1255,6 +1255,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
static final int AUTOFILL_FORM = 148;
static final int ANIMATE_TEXT_SCROLL = 149;
static final int EDIT_TEXT_SIZE_CHANGED = 150;
+ static final int SHOW_CARET_HANDLE = 151;
private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID;
private static final int LAST_PACKAGE_MSG_ID = HIT_TEST_RESULT;
@@ -5468,9 +5469,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
private boolean setupWebkitSelect() {
syncSelectionCursors();
- if (mIsCaretSelection) {
- showPasteWindow();
- } else if (!startSelectActionMode()) {
+ if (!mIsCaretSelection && !startSelectActionMode()) {
selectionDone();
return false;
}
@@ -5539,7 +5538,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
if (!mIsCaretSelection) {
updateWebkitSelection();
}
- mIsCaretSelection = false;
invalidate(); // redraw without selection
mAutoScrollX = 0;
mAutoScrollY = 0;
@@ -6378,8 +6376,15 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
case MotionEvent.ACTION_UP: {
mGestureDetector.onTouchEvent(ev);
if (mTouchInEditText && mConfirmMove) {
+ stopTouch();
break; // We've been scrolling the edit text.
}
+ if (!mConfirmMove && mIsEditingText && mSelectionStarted &&
+ mIsCaretSelection) {
+ showPasteWindow();
+ stopTouch();
+ break;
+ }
// pass the touch events from UI thread to WebCore thread
if (shouldForwardTouchEvent()) {
TouchEventData ted = new TouchEventData();
@@ -6765,7 +6770,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
syncSelectionCursors();
if (mIsCaretSelection) {
resetCaretTimer();
- showPasteWindow();
}
invalidate();
}
@@ -8524,6 +8528,14 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
}
break;
+ case SHOW_CARET_HANDLE:
+ if (!mSelectingText && mIsEditingText && mIsCaretSelection) {
+ setupWebkitSelect();
+ resetCaretTimer();
+ showPasteWindow();
+ }
+ break;
+
default:
super.handleMessage(msg);
break;
@@ -8823,13 +8835,20 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
(data.mStart != data.mEnd ||
(mFieldPointer == nodePointer && mFieldPointer != 0))) {
mIsCaretSelection = (data.mStart == data.mEnd);
- if (!mSelectingText) {
- setupWebkitSelect();
- } else if (!mSelectionStarted) {
- syncSelectionCursors();
- }
- if (mIsCaretSelection) {
- resetCaretTimer();
+ if (mIsCaretSelection &&
+ (mInputConnection == null ||
+ mInputConnection.getEditable().length() == 0)) {
+ // There's no text, don't show caret handle.
+ selectionDone();
+ } else {
+ if (!mSelectingText) {
+ setupWebkitSelect();
+ } else if (!mSelectionStarted) {
+ syncSelectionCursors();
+ }
+ if (mIsCaretSelection) {
+ resetCaretTimer();
+ }
}
} else {
selectionDone();
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index a36ce06988eb..1efa4e34ca39 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1778,7 +1778,10 @@ public final class WebViewCore {
case SELECT_WORD_AT: {
int x = msg.arg1;
int y = msg.arg2;
- nativeSelectWordAt(mNativeClass, x, y);
+ if (!nativeSelectWordAt(mNativeClass, x, y)) {
+ mWebView.mPrivateHandler.obtainMessage(WebViewClassic.SHOW_CARET_HANDLE)
+ .sendToTarget();
+ }
break;
}
case SELECT_ALL:
@@ -3120,7 +3123,7 @@ public final class WebViewCore {
private native void nativeSelectText(int nativeClass,
int startX, int startY, int endX, int endY);
private native void nativeClearTextSelection(int nativeClass);
- private native void nativeSelectWordAt(int nativeClass, int x, int y);
+ private native boolean nativeSelectWordAt(int nativeClass, int x, int y);
private native void nativeSelectAll(int nativeClass);
private static native void nativeCertTrustChanged();