Merge changes I2df047b6,I791eeb3c into ics-mr0
* changes: Fix rebuildWebTextView issues DO NOT MERGE Fixed spell check failing to change word.
This commit is contained in:
@@ -607,23 +607,31 @@ import junit.framework.Assert;
|
||||
// character or the existing selection, so it will not get cleared
|
||||
// above.
|
||||
mGotDelete = false;
|
||||
// Prefer sending javascript events, so when adding one character,
|
||||
// don't replace the unchanged text.
|
||||
if (count > 1 && before == count - 1) {
|
||||
String replaceButOne = s.subSequence(start,
|
||||
start + before).toString();
|
||||
String replacedString = getText().subSequence(start,
|
||||
start + before).toString();
|
||||
if (replaceButOne.equals(replacedString)) {
|
||||
// we're just adding one character
|
||||
start += before;
|
||||
before = 0;
|
||||
count = 1;
|
||||
}
|
||||
}
|
||||
// Find the last character being replaced. If it can be represented by
|
||||
// events, we will pass them to native (after replacing the beginning
|
||||
// of the changed text), so we can see javascript events.
|
||||
// Otherwise, replace the text being changed (including the last
|
||||
// character) in the textfield.
|
||||
TextUtils.getChars(s, start + count - 1, start + count, mCharacter, 0);
|
||||
KeyCharacterMap kmap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
|
||||
KeyEvent[] events = kmap.getEvents(mCharacter);
|
||||
boolean cannotUseKeyEvents = null == events;
|
||||
int charactersFromKeyEvents = cannotUseKeyEvents ? 0 : 1;
|
||||
if (count > 1 || cannotUseKeyEvents) {
|
||||
String replace = s.subSequence(start,
|
||||
start + count - charactersFromKeyEvents).toString();
|
||||
mWebView.replaceTextfieldText(start, start + before, replace,
|
||||
start + count - charactersFromKeyEvents,
|
||||
start + count - charactersFromKeyEvents);
|
||||
} else {
|
||||
// events, we will pass them to native so we can see javascript events.
|
||||
// Otherwise, replace the text being changed in the textfield.
|
||||
KeyEvent[] events = null;
|
||||
if (count == 1) {
|
||||
TextUtils.getChars(s, start + count - 1, start + count, mCharacter, 0);
|
||||
KeyCharacterMap kmap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
|
||||
events = kmap.getEvents(mCharacter);
|
||||
}
|
||||
boolean useKeyEvents = (events != null);
|
||||
if (useKeyEvents) {
|
||||
// This corrects the selection which may have been affected by the
|
||||
// trackball or auto-correct.
|
||||
if (DebugFlags.WEB_TEXT_VIEW) {
|
||||
@@ -633,8 +641,6 @@ import junit.framework.Assert;
|
||||
if (!mInSetTextAndKeepSelection) {
|
||||
mWebView.setSelection(start, start + before);
|
||||
}
|
||||
}
|
||||
if (!cannotUseKeyEvents) {
|
||||
int length = events.length;
|
||||
for (int i = 0; i < length; i++) {
|
||||
// We never send modifier keys to native code so don't send them
|
||||
@@ -643,6 +649,12 @@ import junit.framework.Assert;
|
||||
sendDomEvent(events[i]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
String replace = s.subSequence(start,
|
||||
start + count).toString();
|
||||
mWebView.replaceTextfieldText(start, start + before, replace,
|
||||
start + count,
|
||||
start + count);
|
||||
}
|
||||
updateCachedTextfield();
|
||||
}
|
||||
@@ -966,8 +978,11 @@ import junit.framework.Assert;
|
||||
* @param text The new text to place in the textfield.
|
||||
*/
|
||||
/* package */ void setTextAndKeepSelection(String text) {
|
||||
mPreChange = text.toString();
|
||||
Editable edit = getText();
|
||||
mPreChange = text;
|
||||
if (edit.toString().equals(text)) {
|
||||
return;
|
||||
}
|
||||
int selStart = Selection.getSelectionStart(edit);
|
||||
int selEnd = Selection.getSelectionEnd(edit);
|
||||
mInSetTextAndKeepSelection = true;
|
||||
@@ -1075,6 +1090,7 @@ import junit.framework.Assert;
|
||||
setMaxLength(maxLength);
|
||||
setHorizontallyScrolling(single);
|
||||
setInputType(inputType);
|
||||
clearComposingText();
|
||||
setImeOptions(imeOptions);
|
||||
setVisibility(VISIBLE);
|
||||
if (!autoComplete) {
|
||||
|
||||
@@ -4798,16 +4798,7 @@ public class WebView extends AbsoluteLayout
|
||||
mTextGeneration = 0;
|
||||
}
|
||||
mWebTextView.updateTextSize();
|
||||
Rect visibleRect = new Rect();
|
||||
calcOurContentVisibleRect(visibleRect);
|
||||
// Note that sendOurVisibleRect calls viewToContent, so the coordinates
|
||||
// should be in content coordinates.
|
||||
Rect bounds = nativeFocusCandidateNodeBounds();
|
||||
Rect vBox = contentToViewRect(bounds);
|
||||
mWebTextView.setRect(vBox.left, vBox.top, vBox.width(), vBox.height());
|
||||
if (!Rect.intersects(bounds, visibleRect)) {
|
||||
revealSelection();
|
||||
}
|
||||
updateWebTextViewPosition();
|
||||
String text = nativeFocusCandidateText();
|
||||
int nodePointer = nativeFocusCandidatePointer();
|
||||
// This needs to be called before setType, which may call
|
||||
@@ -4816,7 +4807,6 @@ public class WebView extends AbsoluteLayout
|
||||
mWebTextView.setType(nativeFocusCandidateType());
|
||||
// Gravity needs to be set after setType
|
||||
mWebTextView.setGravityForRtl(nativeFocusCandidateIsRtlText());
|
||||
updateWebTextViewPadding();
|
||||
if (null == text) {
|
||||
if (DebugFlags.WEB_VIEW) {
|
||||
Log.v(LOGTAG, "rebuildWebTextView null == text");
|
||||
@@ -4827,12 +4817,27 @@ public class WebView extends AbsoluteLayout
|
||||
InputMethodManager imm = InputMethodManager.peekInstance();
|
||||
if (imm != null && imm.isActive(mWebTextView)) {
|
||||
imm.restartInput(mWebTextView);
|
||||
mWebTextView.clearComposingText();
|
||||
}
|
||||
if (isFocused()) {
|
||||
mWebTextView.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateWebTextViewPosition() {
|
||||
Rect visibleRect = new Rect();
|
||||
calcOurContentVisibleRect(visibleRect);
|
||||
// Note that sendOurVisibleRect calls viewToContent, so the coordinates
|
||||
// should be in content coordinates.
|
||||
Rect bounds = nativeFocusCandidateNodeBounds();
|
||||
Rect vBox = contentToViewRect(bounds);
|
||||
mWebTextView.setRect(vBox.left, vBox.top, vBox.width(), vBox.height());
|
||||
if (!Rect.intersects(bounds, visibleRect)) {
|
||||
revealSelection();
|
||||
}
|
||||
updateWebTextViewPadding();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the padding of mWebTextView based on the native textfield/textarea
|
||||
*/
|
||||
@@ -8433,7 +8438,7 @@ public class WebView extends AbsoluteLayout
|
||||
// this is sent after finishing resize in WebViewCore. Make
|
||||
// sure the text edit box is still on the screen.
|
||||
if (inEditingMode() && nativeCursorIsTextInput()) {
|
||||
rebuildWebTextView();
|
||||
updateWebTextViewPosition();
|
||||
}
|
||||
break;
|
||||
case CLEAR_TEXT_ENTRY:
|
||||
|
||||
Reference in New Issue
Block a user