From edb39ce5b4770c6f53c9b30aeae4589969607e17 Mon Sep 17 00:00:00 2001 From: Michael Kolb Date: Thu, 17 Nov 2011 10:17:28 -0800 Subject: Draw input field focus ring in WebTextView Bug: 5628053 Change-Id: I1a3d5402e7925e71877be2c278e95f25e75746f3 --- core/java/android/webkit/WebTextView.java | 47 +++++++++++++++++++++++++++++++ core/java/android/webkit/WebView.java | 8 +++--- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java index 8aafc3d078fe..04a3f2cb768d 100644 --- a/core/java/android/webkit/WebTextView.java +++ b/core/java/android/webkit/WebTextView.java @@ -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; } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index ec2f55bc4819..8805f6c85418 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -5658,13 +5658,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 @@ -5739,7 +5739,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 @@ -5749,8 +5749,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. + mDrawCursorRing = false; if (!inEditingMode()) { - mDrawCursorRing = false; setFocusControllerActive(false); } mKeysPressed.clear(); -- cgit v1.2.3-59-g8ed1b