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

Commit 852585c0 authored by Michael Kolb's avatar Michael Kolb Committed by Android (Google) Code Review
Browse files

Merge "Draw input field focus ring in WebTextView" into ics-mr1

parents 8ac35e30 edb39ce5
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -17,8 +17,10 @@
package android.webkit;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
@@ -49,6 +51,7 @@ import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsoluteLayout;
import android.widget.AbsoluteLayout.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
@@ -71,6 +74,9 @@ import java.util.ArrayList;

    static final String LOGTAG = "webtextview";

    private Paint mRingPaint;
    private int mRingInset;

    private WebView         mWebView;
    private boolean         mSingle;
    private int             mWidthSpec;
@@ -201,7 +207,13 @@ import java.util.ArrayList;
                }
            }
        };
        float ringWidth = 4f * context.getResources().getDisplayMetrics().density;
        mReceiver = new MyResultReceiver(mHandler);
        mRingPaint = new Paint();
        mRingPaint.setColor(0x6633b5e5);
        mRingPaint.setStrokeWidth(ringWidth);
        mRingPaint.setStyle(Style.FILL);
        mRingInset = (int) ringWidth;
    }

    public void setAutoFillable(int queryId) {
@@ -210,6 +222,40 @@ import java.util.ArrayList;
        mQueryId = queryId;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (isFocused()) {
            final int ib = getHeight() - mRingInset;
            canvas.drawRect(0, 0, getWidth(), mRingInset, mRingPaint);
            canvas.drawRect(0, ib, getWidth(), getHeight(), mRingPaint);
            canvas.drawRect(0, mRingInset, mRingInset, ib, mRingPaint);
            canvas.drawRect(getWidth() - mRingInset, mRingInset, getWidth(), ib, mRingPaint);
        }
    }

    private void growOrShrink(boolean grow) {
        AbsoluteLayout.LayoutParams lp = (AbsoluteLayout.LayoutParams) getLayoutParams();
        if (grow) {
            Log.i("webtextview", "grow");
            lp.x -= mRingInset;
            lp.y -= mRingInset;
            lp.width += 2 * mRingInset;
            lp.height += 2 * mRingInset;
            setPadding(getPaddingLeft() + mRingInset, getPaddingTop() + mRingInset,
                    getPaddingRight() + mRingInset, getPaddingBottom() + mRingInset);
        } else {
            Log.i("webtextview", "shrink");
            lp.x += mRingInset;
            lp.y += mRingInset;
            lp.width -= 2 * mRingInset;
            lp.height -= 2 * mRingInset;
            setPadding(getPaddingLeft() - mRingInset, getPaddingTop() - mRingInset,
                    getPaddingRight() - mRingInset, getPaddingBottom() - mRingInset);
        }
        setLayoutParams(lp);
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.isSystem()) {
@@ -511,6 +557,7 @@ import java.util.ArrayList;
        } else if (!mInsideRemove) {
            mWebView.setActive(false);
        }
        growOrShrink(focused);
        mFromFocusChange = false;
    }

+4 −4
Original line number Diff line number Diff line
@@ -5679,13 +5679,13 @@ public class WebView extends AbsoluteLayout
            if (hasFocus()) {
                // If our window regained focus, and we have focus, then begin
                // drawing the cursor ring
                mDrawCursorRing = true;
                mDrawCursorRing = !inEditingMode();
                setFocusControllerActive(true);
            } else {
                mDrawCursorRing = false;
                if (!inEditingMode()) {
                    // If our window gained focus, but we do not have it, do not
                    // draw the cursor ring.
                    mDrawCursorRing = false;
                    setFocusControllerActive(false);
                }
                // We do not call recordButtons here because we assume
@@ -5760,7 +5760,7 @@ public class WebView extends AbsoluteLayout
            // When we regain focus, if we have window focus, resume drawing
            // the cursor ring
            if (hasWindowFocus()) {
                mDrawCursorRing = true;
                mDrawCursorRing = !inEditingMode();
                setFocusControllerActive(true);
            //} else {
                // The WebView has gained focus while we do not have
@@ -5770,8 +5770,8 @@ public class WebView extends AbsoluteLayout
        } else {
            // When we lost focus, unless focus went to the TextView (which is
            // true if we are in editing mode), stop drawing the cursor ring.
            if (!inEditingMode()) {
            mDrawCursorRing = false;
            if (!inEditingMode()) {
                setFocusControllerActive(false);
            }
            mKeysPressed.clear();