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();