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

Commit 3be1ffab authored by Leon Scroggins's avatar Leon Scroggins
Browse files

Only scroll on screen when necessary.

Bug:3367446

bringPointIntoView was called by TextView in onPreDraw. This was
passing a message to the webcore thread to change the scroll
position.  This is unnecessary, because typically the scroll
position will be changed by webkit when keys are pressed. The
one situation where this helped was when the user taps on a
textfield, which brings up the IME, which may cover it. A better
solution is to tell webkit to scroll it on screen once the
screen size changes.  I have a CL in external/webkit to do that:
https://android-git.corp.google.com/g/#change,91095

Change-Id: I6e06ad59e1a1c99365bb5be635a43d1b88658c0d
parent 4061c9aa
Loading
Loading
Loading
Loading
+3 −12
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ import junit.framework.Assert;
    // Used to determine whether onFocusChanged was called as a result of
    // calling remove().
    private boolean mInsideRemove;
    private boolean mInPassword;

    // Types used with setType.  Keep in sync with CachedInput.h
    private static final int NORMAL_TEXT_FIELD = 0;
@@ -784,22 +785,11 @@ import junit.framework.Assert;
        mInsideRemove = false;
    }

    /**
     * Move the caret/selection into view.
     */
    /* package */ void bringIntoView() {
        bringPointIntoView(Selection.getSelectionEnd(getText()));
    }

    @Override
    public boolean bringPointIntoView(int offset) {
        if (mWebView == null) return false;
        if (mWebView.nativeFocusCandidateIsPassword()) {
        if (mInPassword) {
            return getLayout() != null && super.bringPointIntoView(offset);
        }
        // For non password text input, tell webkit to move the caret/selection
        // on screen, since webkit draws them.
        mWebView.revealSelection();
        return true;
    }

@@ -914,6 +904,7 @@ import junit.framework.Assert;
     * @param   inPassword  True if the textfield is a password field.
     */
    /* package */ void setInPassword(boolean inPassword) {
        mInPassword = inPassword;
        if (inPassword) {
            setInputType(EditorInfo.TYPE_CLASS_TEXT | EditorInfo.
                TYPE_TEXT_VARIATION_WEB_PASSWORD);
+1 −2
Original line number Diff line number Diff line
@@ -4268,7 +4268,7 @@ public class WebView extends AbsoluteLayout
        Rect vBox = contentToViewRect(bounds);
        mWebTextView.setRect(vBox.left, vBox.top, vBox.width(), vBox.height());
        if (!Rect.intersects(bounds, visibleRect)) {
            mWebTextView.bringIntoView();
            revealSelection();
        }
        String text = nativeFocusCandidateText();
        int nodePointer = nativeFocusCandidatePointer();
@@ -7274,7 +7274,6 @@ 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()) {
                        mWebTextView.bringIntoView();
                        rebuildWebTextView();
                    }
                    break;