am 5397bb52: am 852585c0: Merge "Draw input field focus ring in WebTextView" into ics-mr1

* commit '5397bb52fba04e8dc8496d731611210213847308':
  Draw input field focus ring in WebTextView
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 8c7a49c..f18a396 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.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 @@
 
     static final String LOGTAG = "webtextview";
 
+    private Paint mRingPaint;
+    private int mRingInset;
+
     private WebView         mWebView;
     private boolean         mSingle;
     private int             mWidthSpec;
@@ -201,7 +207,13 @@
                 }
             }
         };
+        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) {
@@ -211,6 +223,40 @@
     }
 
     @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()) {
             return super.dispatchKeyEvent(event);
@@ -511,6 +557,7 @@
         } 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 8a1327b..d2b7528 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -5670,13 +5670,13 @@
             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
@@ -5751,7 +5751,7 @@
             // 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
@@ -5761,8 +5761,8 @@
         } 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();