summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/WebView.java144
-rw-r--r--core/java/android/webkit/WebViewCore.java37
2 files changed, 86 insertions, 95 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 2940983..ef2d4e8 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1407,7 +1407,7 @@ public class WebView extends AbsoluteLayout
if (mNativeClass == 0) {
return false;
}
- nativeClearFocus(-1, -1);
+ nativeClearCursor(-1, -1);
if (top) {
// go to the top of the document
return pinScrollTo(mScrollX, 0, true, 0);
@@ -1434,7 +1434,7 @@ public class WebView extends AbsoluteLayout
if (mNativeClass == 0) {
return false;
}
- nativeClearFocus(-1, -1);
+ nativeClearCursor(-1, -1);
if (bottom) {
return pinScrollTo(mScrollX, mContentHeight, true, 0);
}
@@ -1530,7 +1530,7 @@ public class WebView extends AbsoluteLayout
}
/**
- * Return a HitTestResult based on the current focus node. If a HTML::a tag
+ * Return a HitTestResult based on the current cursor node. If a HTML::a tag
* is found and the anchor has a non-javascript url, the HitTestResult type
* is set to SRC_ANCHOR_TYPE and the url is set in the "extra" field. If the
* anchor does not have a url or if it is a javascript url, the type will
@@ -1602,15 +1602,15 @@ public class WebView extends AbsoluteLayout
* request as the data member with "url" as key. The result can
* be null.
*/
+ // FIXME: API change required to change the name of this function. We now
+ // look at the cursor node, and not the focus node. Also, what is
+ // getFocusNodePath?
public void requestFocusNodeHref(Message hrefMsg) {
if (hrefMsg == null || mNativeClass == 0) {
return;
}
if (nativeCursorIsAnchor()) {
- // NOTE: We may already have the url of the anchor stored in
- // node.mText but it may be out of date or the caller may want
- // to know about javascript urls.
- mWebViewCore.sendMessage(EventHub.REQUEST_FOCUS_HREF,
+ mWebViewCore.sendMessage(EventHub.REQUEST_CURSOR_HREF,
nativeCursorFramePointer(), nativeCursorNodePointer(),
hrefMsg);
}
@@ -2405,7 +2405,7 @@ public class WebView extends AbsoluteLayout
// to the screen, they are in the correct state.
// Tell the native side if user is a) touching the screen,
// b) pressing the trackball down, or c) pressing the enter key
- // If the focus is a button, we need to draw it in the pressed
+ // If the cursor is on a button, we need to draw it in the pressed
// state.
// If mNativeClass is 0, we should not reach here, so we do not
// need to check it again.
@@ -2439,7 +2439,7 @@ public class WebView extends AbsoluteLayout
}
private void drawCoreAndCursorRing(Canvas canvas, int color,
- boolean drawFocus) {
+ boolean drawCursorRing) {
if (mDrawHistory) {
canvas.scale(mActualScale, mActualScale);
canvas.drawPicture(mHistoryPicture);
@@ -2497,7 +2497,7 @@ public class WebView extends AbsoluteLayout
nativeDrawSelection(canvas, mSelectX, mSelectY,
mExtendSelection);
}
- } else if (drawFocus) {
+ } else if (drawCursorRing) {
if (mTouchMode == TOUCH_SHORTPRESS_START_MODE) {
mTouchMode = TOUCH_SHORTPRESS_MODE;
HitTestResult hitTest = getHitTestResult();
@@ -2955,12 +2955,12 @@ public class WebView extends AbsoluteLayout
}
/*
- * This method checks the current focus and potentially rebuilds
+ * This method checks the current focus and cursor and potentially rebuilds
* mWebTextView to have the appropriate properties, such as password,
* multiline, and what text it contains. It also removes it if necessary.
*/
private void rebuildWebTextView() {
- // If we do not have focus, do nothing until we gain focus.
+ // If the WebView does not have focus, do nothing until it gains focus.
if (!hasFocus() && (null == mWebTextView || !mWebTextView.hasFocus())
|| (mTouchMode >= FIRST_SCROLL_ZOOM
&& mTouchMode <= LAST_SCROLL_ZOOM)) {
@@ -2970,8 +2970,7 @@ public class WebView extends AbsoluteLayout
boolean alreadyThere = inEditingMode();
// inEditingMode can only return true if mWebTextView is non-null,
// so we can safely call remove() if (alreadyThere)
- if (0 == mNativeClass || (!nativeFocusIsTextInput()
- && !nativeCursorIsTextInput())) {
+ if (0 == mNativeClass || !nativeFocusCandidateIsTextInput()) {
if (alreadyThere) {
mWebTextView.remove();
}
@@ -2984,17 +2983,17 @@ public class WebView extends AbsoluteLayout
// Initialize our generation number.
mTextGeneration = 0;
}
- mWebTextView.setTextSize(contentToView(nativeFocusTextSize()));
+ mWebTextView.setTextSize(contentToView(nativeFocusCandidateTextSize()));
Rect visibleRect = sendOurVisibleRect();
// Note that sendOurVisibleRect calls viewToContent, so the coordinates
// should be in content coordinates.
- Rect bounds = nativeFocusNodeBounds();
+ Rect bounds = nativeFocusCandidateNodeBounds();
if (!Rect.intersects(bounds, visibleRect)) {
// Node is not on screen, so do not bother.
return;
}
- String text = nativeFocusText();
- int nodePointer = nativeFocusNodePointer();
+ String text = nativeFocusCandidateText();
+ int nodePointer = nativeFocusCandidatePointer();
if (alreadyThere && mWebTextView.isSameTextField(nodePointer)) {
// It is possible that we have the same textfield, but it has moved,
// i.e. In the case of opening/closing the screen.
@@ -3018,16 +3017,16 @@ public class WebView extends AbsoluteLayout
Rect vBox = contentToView(bounds);
mWebTextView.setRect(vBox.left, vBox.top, vBox.width(),
vBox.height());
- mWebTextView.setGravity(nativeFocusIsRtlText() ? Gravity.RIGHT :
- Gravity.NO_GRAVITY);
+ mWebTextView.setGravity(nativeFocusCandidateIsRtlText() ?
+ Gravity.RIGHT : Gravity.NO_GRAVITY);
// this needs to be called before update adapter thread starts to
// ensure the mWebTextView has the same node pointer
mWebTextView.setNodePointer(nodePointer);
int maxLength = -1;
- boolean isTextField = nativeFocusIsTextField();
+ boolean isTextField = nativeFocusCandidateIsTextField();
if (isTextField) {
- maxLength = nativeFocusMaxLength();
- String name = nativeFocusName();
+ maxLength = nativeFocusCandidateMaxLength();
+ String name = nativeFocusCandidateName();
if (mWebViewCore.getSettings().getSaveFormData()
&& name != null) {
HashMap data = new HashMap();
@@ -3044,7 +3043,7 @@ public class WebView extends AbsoluteLayout
AutoCompleteAdapter adapter = null;
mWebTextView.setAdapterCustom(adapter);
mWebTextView.setSingleLine(isTextField);
- mWebTextView.setInPassword(nativeFocusIsPassword());
+ mWebTextView.setInPassword(nativeFocusCandidateIsPassword());
if (null == text) {
mWebTextView.setText("", 0, 0);
} else {
@@ -3145,7 +3144,7 @@ public class WebView extends AbsoluteLayout
}
int contentX = viewToContent((int) mLastTouchX + mScrollX);
int contentY = viewToContent((int) mLastTouchY + mScrollY);
- nativeClearFocus(contentX, contentY);
+ nativeClearCursor(contentX, contentY);
}
if (keyCode >= KeyEvent.KEYCODE_DPAD_UP
@@ -3235,7 +3234,7 @@ public class WebView extends AbsoluteLayout
return false;
}
- // special CALL handling when focus node's href is "tel:XXX"
+ // special CALL handling when cursor node's href is "tel:XXX"
if (keyCode == KeyEvent.KEYCODE_CALL && nativeHasCursorNode()) {
String text = nativeCursorText();
if (!nativeCursorIsTextInput() && text != null
@@ -3321,7 +3320,7 @@ public class WebView extends AbsoluteLayout
mShiftIsPressed = true;
int contentX = viewToContent((int) mLastTouchX + mScrollX);
int contentY = viewToContent((int) mLastTouchY + mScrollY);
- nativeClearFocus(contentX, contentY);
+ nativeClearCursor(contentX, contentY);
}
private boolean commitCopy() {
@@ -3696,7 +3695,7 @@ public class WebView extends AbsoluteLayout
WebViewCore.pauseUpdate(mWebViewCore);
int contentX = viewToContent((int) x + mScrollX);
int contentY = viewToContent((int) y + mScrollY);
- nativeClearFocus(contentX, contentY);
+ nativeClearCursor(contentX, contentY);
// remove the zoom anchor if there is any
if (mZoomScale != 0) {
mWebViewCore
@@ -3873,7 +3872,7 @@ public class WebView extends AbsoluteLayout
mTouchMode = TOUCH_DONE_MODE;
int contentX = viewToContent((int) mLastTouchX + mScrollX);
int contentY = viewToContent((int) mLastTouchY + mScrollY);
- nativeClearFocus(contentX, contentY);
+ nativeClearCursor(contentX, contentY);
break;
}
}
@@ -3901,8 +3900,8 @@ public class WebView extends AbsoluteLayout
private boolean mShiftIsPressed = false;
private boolean mTrackballDown = false;
private long mTrackballUpTime = 0;
- private long mLastFocusTime = 0;
- private Rect mLastFocusBounds;
+ private long mLastCursorTime = 0;
+ private Rect mLastCursorBounds;
// Set by default; BrowserActivity clears to interpret trackball data
// directly for movement. Currently, the framework only passes
@@ -3931,14 +3930,14 @@ public class WebView extends AbsoluteLayout
if (mNativeClass != 0) {
nativeRecordButtons(hasFocus() && hasWindowFocus(), true, true);
}
- if (time - mLastFocusTime <= TRACKBALL_TIMEOUT
- && !mLastFocusBounds.equals(nativeGetCursorRingBounds())) {
- nativeSelectBestAt(mLastFocusBounds);
+ if (time - mLastCursorTime <= TRACKBALL_TIMEOUT
+ && !mLastCursorBounds.equals(nativeGetCursorRingBounds())) {
+ nativeSelectBestAt(mLastCursorBounds);
}
if (DebugFlags.WEB_VIEW) {
Log.v(LOGTAG, "onTrackballEvent down ev=" + ev
+ " time=" + time
- + " mLastFocusTime=" + mLastFocusTime);
+ + " mLastCursorTime=" + mLastCursorTime);
}
if (isInTouchMode()) requestFocusFromTouch();
return false; // let common code in onKeyDown at it
@@ -4170,7 +4169,6 @@ public class WebView extends AbsoluteLayout
}
mUserScroll = true;
}
- mWebViewCore.sendMessage(EventHub.UNBLOCK_FOCUS);
}
public void flingScroll(int vx, int vy) {
@@ -4714,12 +4712,6 @@ public class WebView extends AbsoluteLayout
if (mNativeClass == 0) {
break;
}
-// Do not reset the focus or clear the text; the user may have already
-// navigated or entered text at this point. The focus should have gotten
-// reset, if need be, when the focus cache was built. Similarly, the text
-// view should already be torn down and rebuilt if needed.
-// nativeResetFocus();
-// clearTextEntry();
HashMap scaleLimit = (HashMap) msg.obj;
int minScale = (Integer) scaleLimit.get("minScale");
if (minScale == 0) {
@@ -5165,45 +5157,51 @@ public class WebView extends AbsoluteLayout
if (mNativeClass == 0) {
return false;
}
- mLastFocusTime = time;
- mLastFocusBounds = nativeGetCursorRingBounds();
- boolean keyHandled = nativeMoveFocus(keyCode, count, noScroll) == false;
+ mLastCursorTime = time;
+ mLastCursorBounds = nativeGetCursorRingBounds();
+ boolean keyHandled
+ = nativeMoveCursor(keyCode, count, noScroll) == false;
if (DebugFlags.WEB_VIEW) {
- Log.v(LOGTAG, "navHandledKey mLastFocusBounds=" + mLastFocusBounds
- + " mLastFocusTime=" + mLastFocusTime
+ Log.v(LOGTAG, "navHandledKey mLastCursorBounds=" + mLastCursorBounds
+ + " mLastCursorTime=" + mLastCursorTime
+ " handled=" + keyHandled);
}
if (keyHandled == false || mHeightCanMeasure == false) {
return keyHandled;
}
- Rect contentFocus = nativeGetCursorRingBounds();
- if (contentFocus.isEmpty()) return keyHandled;
- Rect viewFocus = contentToView(contentFocus);
+ Rect contentCursorRingBounds = nativeGetCursorRingBounds();
+ if (contentCursorRingBounds.isEmpty()) return keyHandled;
+ Rect viewCursorRingBounds = contentToView(contentCursorRingBounds);
Rect visRect = new Rect();
calcOurVisibleRect(visRect);
Rect outset = new Rect(visRect);
int maxXScroll = visRect.width() / 2;
int maxYScroll = visRect.height() / 2;
outset.inset(-maxXScroll, -maxYScroll);
- if (Rect.intersects(outset, viewFocus) == false) {
+ if (Rect.intersects(outset, viewCursorRingBounds) == false) {
return keyHandled;
}
// FIXME: Necessary because ScrollView/ListView do not scroll left/right
- int maxH = Math.min(viewFocus.right - visRect.right, maxXScroll);
+ int maxH = Math.min(viewCursorRingBounds.right - visRect.right,
+ maxXScroll);
if (maxH > 0) {
pinScrollBy(maxH, 0, true, 0);
} else {
- maxH = Math.max(viewFocus.left - visRect.left, -maxXScroll);
+ maxH = Math.max(viewCursorRingBounds.left - visRect.left,
+ -maxXScroll);
if (maxH < 0) {
pinScrollBy(maxH, 0, true, 0);
}
}
- if (mLastFocusBounds.isEmpty()) return keyHandled;
- if (mLastFocusBounds.equals(contentFocus)) return keyHandled;
+ if (mLastCursorBounds.isEmpty()) return keyHandled;
+ if (mLastCursorBounds.equals(contentCursorRingBounds)) {
+ return keyHandled;
+ }
if (DebugFlags.WEB_VIEW) {
- Log.v(LOGTAG, "navHandledKey contentFocus=" + contentFocus);
+ Log.v(LOGTAG, "navHandledKey contentCursorRingBounds="
+ + contentCursorRingBounds);
}
- requestRectangleOnScreen(viewFocus);
+ requestRectangleOnScreen(viewCursorRingBounds);
mUserScroll = true;
return keyHandled;
}
@@ -5233,7 +5231,7 @@ public class WebView extends AbsoluteLayout
nativeUpdateCachedTextfield(updatedText, mTextGeneration);
}
- private native void nativeClearFocus(int x, int y);
+ private native void nativeClearCursor(int x, int y);
private native void nativeCreate(int ptr);
private native int nativeCursorFramePointer();
private native Rect nativeCursorNodeBounds();
@@ -5243,6 +5241,10 @@ public class WebView extends AbsoluteLayout
private native boolean nativeCursorIsAnchor();
private native boolean nativeCursorIsTextInput();
private native String nativeCursorText();
+ /**
+ * Returns true if the native cursor node says it wants to handle key events
+ * (ala plugins). This can only be called if mNativeClass is non-zero!
+ */
private native boolean nativeCursorWantsKeyEvents();
private native void nativeDebugDump();
private native void nativeDestroy();
@@ -5254,20 +5256,16 @@ public class WebView extends AbsoluteLayout
private native void nativeDumpDisplayTree(String urlOrNull);
private native int nativeFindAll(String findLower, String findUpper);
private native void nativeFindNext(boolean forward);
- private native boolean nativeFocusIsPassword();
- private native boolean nativeFocusIsRtlText();
- private native boolean nativeFocusIsTextField();
- private native boolean nativeFocusIsTextInput();
- private native int nativeFocusMaxLength();
- private native String nativeFocusName();
- private native Rect nativeFocusNodeBounds();
- /* package */ native int nativeFocusNodePointer();
- private native String nativeFocusText();
- private native int nativeFocusTextSize();
- /**
- * Returns true if the native focus nodes says it wants to handle key events
- * (ala plugins). This can only be called if mNativeClass is non-zero!
- */
+ private native boolean nativeFocusCandidateIsPassword();
+ private native boolean nativeFocusCandidateIsRtlText();
+ private native boolean nativeFocusCandidateIsTextField();
+ private native boolean nativeFocusCandidateIsTextInput();
+ private native int nativeFocusCandidateMaxLength();
+ private native String nativeFocusCandidateName();
+ private native Rect nativeFocusCandidateNodeBounds();
+ /* package */ native int nativeFocusCandidatePointer();
+ private native String nativeFocusCandidateText();
+ private native int nativeFocusCandidateTextSize();
private native Rect nativeGetCursorRingBounds();
private native Region nativeGetSelection();
private native boolean nativeHasCursorNode();
@@ -5278,7 +5276,7 @@ public class WebView extends AbsoluteLayout
// return true if the page has been scrolled
private native boolean nativeMotionUp(int x, int y, int slop);
// returns false if it handled the key
- private native boolean nativeMoveFocus(int keyCode, int count,
+ private native boolean nativeMoveCursor(int keyCode, int count,
boolean noScroll);
private native int nativeMoveGeneration();
private native void nativeMoveSelection(int x, int y,
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index f4b99b9..b0c626f 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -395,8 +395,6 @@ final class WebViewCore {
private native boolean nativeHandleTouchEvent(int action, int x, int y);
- private native void nativeUnblockFocus();
-
private native void nativeUpdateFrameCache();
private native void nativeSetSnapAnchor(int x, int y);
@@ -574,7 +572,7 @@ final class WebViewCore {
"SINGLE_LISTBOX_CHOICE", // = 124;
"MESSAGE_RELAY", // = 125;
"SET_BACKGROUND_COLOR", // = 126;
- "UNBLOCK_FOCUS", // = 127;
+ "127", // = 127;
"SAVE_DOCUMENT_STATE", // = 128;
"GET_SELECTION", // = 129;
"WEBKIT_DRAW", // = 130;
@@ -584,7 +582,7 @@ final class WebViewCore {
"CLEAR_CONTENT", // = 134;
"SET_MOVE_MOUSE", // = 135;
"SET_MOVE_MOUSE_IF_LATEST", // = 136;
- "REQUEST_FOCUS_HREF", // = 137;
+ "REQUEST_CURSOR_HREF", // = 137;
"ADD_JS_INTERFACE", // = 138;
"LOAD_DATA", // = 139;
"TOUCH_UP", // = 140;
@@ -623,7 +621,6 @@ final class WebViewCore {
static final int SINGLE_LISTBOX_CHOICE = 124;
static final int MESSAGE_RELAY = 125;
static final int SET_BACKGROUND_COLOR = 126;
- static final int UNBLOCK_FOCUS = 127;
static final int SAVE_DOCUMENT_STATE = 128;
static final int GET_SELECTION = 129;
static final int WEBKIT_DRAW = 130;
@@ -635,7 +632,7 @@ final class WebViewCore {
// UI nav messages
static final int SET_MOVE_MOUSE = 135;
static final int SET_MOVE_MOUSE_IF_LATEST = 136;
- static final int REQUEST_FOCUS_HREF = 137;
+ static final int REQUEST_CURSOR_HREF = 137;
static final int ADD_JS_INTERFACE = 138;
static final int LOAD_DATA = 139;
@@ -900,8 +897,8 @@ final class WebViewCore {
}
case SAVE_DOCUMENT_STATE: {
- CursorData fDat = (CursorData) msg.obj;
- nativeSaveDocumentState(fDat.mFrame);
+ CursorData cDat = (CursorData) msg.obj;
+ nativeSaveDocumentState(cDat.mFrame);
break;
}
@@ -951,25 +948,21 @@ final class WebViewCore {
break;
case SET_MOVE_MOUSE:
- CursorData finalData = (CursorData) msg.obj;
- nativeMoveMouse(finalData.mFrame,
- finalData.mNode, finalData.mX,
- finalData.mY);
- break;
-
- case UNBLOCK_FOCUS:
- nativeUnblockFocus();
+ CursorData cursorData = (CursorData) msg.obj;
+ nativeMoveMouse(cursorData.mFrame,
+ cursorData.mNode, cursorData.mX,
+ cursorData.mY);
break;
case SET_MOVE_MOUSE_IF_LATEST:
- CursorData focusData = (CursorData) msg.obj;
- nativeMoveMouseIfLatest(focusData.mMoveGeneration,
- focusData.mFrame, focusData.mNode,
- focusData.mX, focusData.mY,
- focusData.mIgnoreNullFocus);
+ CursorData cData = (CursorData) msg.obj;
+ nativeMoveMouseIfLatest(cData.mMoveGeneration,
+ cData.mFrame, cData.mNode,
+ cData.mX, cData.mY,
+ cData.mIgnoreNullFocus);
break;
- case REQUEST_FOCUS_HREF: {
+ case REQUEST_CURSOR_HREF: {
Message hrefMsg = (Message) msg.obj;
String res = nativeRetrieveHref(msg.arg1, msg.arg2);
hrefMsg.getData().putString("url", res);