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

* commit '852585c034d383ea6afe1b484afa57cbf4d04f95':
  Draw input field focus ring in WebTextView
This commit is contained in:
Michael Kolb
2011-11-17 12:25:06 -08:00
committed by Android Git Automerger
2 changed files with 51 additions and 4 deletions

View File

@@ -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;
}

View File

@@ -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.
mDrawCursorRing = false;
if (!inEditingMode()) {
mDrawCursorRing = false;
setFocusControllerActive(false);
}
mKeysPressed.clear();