diff options
| author | 2011-11-17 15:12:49 -0800 | |
|---|---|---|
| committer | 2011-11-17 15:12:49 -0800 | |
| commit | 778f146cf422edabf140a18afa8746e542a49ebd (patch) | |
| tree | 0388a7868519887285718f647973f12f36709f43 | |
| parent | f0c22dc4a043264a2b15d225fd97909b403c02cf (diff) | |
| parent | 5397bb52fba04e8dc8496d731611210213847308 (diff) | |
am 5397bb52: am 852585c0: Merge "Draw input field focus ring in WebTextView" into ics-mr1
* commit '5397bb52fba04e8dc8496d731611210213847308':
Draw input field focus ring in WebTextView
| -rw-r--r-- | core/java/android/webkit/WebTextView.java | 47 | ||||
| -rw-r--r-- | 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 8c7a49c49447..f18a39679c9b 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) { @@ -211,6 +223,40 @@ import java.util.ArrayList; } @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 @@ 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 8a1327be134f..d2b7528b1170 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -5670,13 +5670,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 @@ -5751,7 +5751,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 @@ -5761,8 +5761,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(); |