Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2dd2e5b4 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge changes I2df047b6,I791eeb3c into ics-mr0

* changes:
  Fix rebuildWebTextView issues
  DO NOT MERGE Fixed spell check failing to change word.
parents 943da7b8 e20bfd9b
Loading
Loading
Loading
Loading
+35 −19
Original line number Diff line number Diff line
@@ -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.
        // 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);
        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 = 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) {
+17 −12
Original line number Diff line number Diff line
@@ -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: