summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vadim Tryshev <vadimt@google.com> 2016-10-11 18:33:10 -0700
committer Vadim Tryshev <vadimt@google.com> 2016-10-11 18:36:49 -0700
commitcdf38ba2c8586bce09b4462b45598a465b337bd0 (patch)
treebcd5a956c615c49b3afffe2970ee6ed7ae70f3ea
parent170219c5d84ab2ab7773e5e85e0ed7d0f76cb262 (diff)
Visualize view focus in debug mode.
See the bug for motivation. Bug: 32099818 Test: Manual check with enabling the dev setting. Change-Id: I77262f77ac709639e5b1314a0be45612bde70ad6
-rw-r--r--core/java/android/view/View.java56
-rw-r--r--core/java/android/view/ViewGroup.java24
2 files changed, 58 insertions, 22 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index deb3f90570e3..18530594c693 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -40,6 +40,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.Insets;
import android.graphics.Interpolator;
import android.graphics.LinearGradient;
@@ -757,6 +758,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
AccessibilityEventSource {
private static final boolean DBG = false;
+ /** @hide */
+ public static boolean DEBUG_DRAW = false;
+
/**
* The logging tag used by this class with android.util.Log.
*/
@@ -1184,6 +1188,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*/
static final int PARENT_SAVE_DISABLED_MASK = 0x20000000;
+ private static Paint sDebugPaint;
+
/** @hide */
@IntDef(flag = true,
value = {
@@ -1655,6 +1661,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
| AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED
| AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY;
+ static final int DEBUG_CORNERS_COLOR = Color.rgb(63, 127, 255);
+
+ static final int DEBUG_CORNERS_SIZE_DIP = 8;
+
/**
* Temporary Rect currently for use in setBackground(). This will probably
* be extended in the future to hold our own class with more than just
@@ -4743,6 +4753,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
mRenderNode = RenderNode.create(getClass().getName(), this);
}
+ final boolean debugDraw() {
+ return DEBUG_DRAW || mAttachInfo != null && mAttachInfo.mDebugLayout;
+ }
+
private static SparseArray<String> getAttributeMap() {
if (mAttributeMap == null) {
mAttributeMap = new SparseArray<>();
@@ -16137,6 +16151,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
if (mOverlay != null && !mOverlay.isEmpty()) {
mOverlay.getOverlayView().draw(canvas);
}
+ if (debugDraw()) {
+ debugDrawFocus(canvas);
+ }
} else {
draw(canvas);
}
@@ -17115,6 +17132,41 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
return more;
}
+ static Paint getDebugPaint() {
+ if (sDebugPaint == null) {
+ sDebugPaint = new Paint();
+ sDebugPaint.setAntiAlias(false);
+ }
+ return sDebugPaint;
+ }
+
+ final int dipsToPixels(int dips) {
+ float scale = getContext().getResources().getDisplayMetrics().density;
+ return (int) (dips * scale + 0.5f);
+ }
+
+ final private void debugDrawFocus(Canvas canvas) {
+ if (isFocused()) {
+ final int cornerSquareSize = dipsToPixels(DEBUG_CORNERS_SIZE_DIP);
+ final int w = getWidth();
+ final int h = getHeight();
+ final Paint paint = getDebugPaint();
+ paint.setColor(DEBUG_CORNERS_COLOR);
+
+ // Draw squares in corners.
+ paint.setStyle(Paint.Style.FILL);
+ canvas.drawRect(0, 0, cornerSquareSize, cornerSquareSize, paint);
+ canvas.drawRect(w - cornerSquareSize, 0, w, cornerSquareSize, paint);
+ canvas.drawRect(0, h - cornerSquareSize, cornerSquareSize, h, paint);
+ canvas.drawRect(w - cornerSquareSize, h - cornerSquareSize, w, h, paint);
+
+ // Draw big X across the view.
+ paint.setStyle(Paint.Style.STROKE);
+ canvas.drawLine(0, 0, getWidth(), getHeight(), paint);
+ canvas.drawLine(0, getHeight(), getWidth(), 0, paint);
+ }
+ }
+
/**
* Manually render this view (and all of its children) to the given Canvas.
* The view must have already done a full layout before this function is
@@ -17169,6 +17221,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
// Step 6, draw decorations (foreground, scrollbars)
onDrawForeground(canvas);
+ if (debugDraw()) {
+ debugDrawFocus(canvas);
+ }
+
// we're done...
return;
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 2e428a734331..a7af5e5b5c72 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -116,8 +116,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
private static final String TAG = "ViewGroup";
private static final boolean DBG = false;
- /** @hide */
- public static boolean DEBUG_DRAW = false;
/**
* Views which have been hidden or removed which need to be animated on
@@ -476,7 +474,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
private static final int ARRAY_INITIAL_CAPACITY = 12;
private static final int ARRAY_CAPACITY_INCREMENT = 12;
- private static Paint sDebugPaint;
private static float[] sDebugLines;
// Used to draw cached views
@@ -586,10 +583,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
initFromAttributes(context, attrs, defStyleAttr, defStyleRes);
}
- private boolean debugDraw() {
- return DEBUG_DRAW || mAttachInfo != null && mAttachInfo.mDebugLayout;
- }
-
private void initViewGroup() {
// ViewGroup doesn't draw by default
if (!debugDraw()) {
@@ -3375,11 +3368,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
fillRect(c, paint, x1, y1, x1 + lw * sign(dx), y1 + dy);
}
- private int dipsToPixels(int dips) {
- float scale = getContext().getResources().getDisplayMetrics().density;
- return (int) (dips * scale + 0.5f);
- }
-
private static void drawRectCorners(Canvas canvas, int x1, int y1, int x2, int y2, Paint paint,
int lineLength, int lineWidth) {
drawCorner(canvas, paint, x1, y1, lineLength, lineLength, lineWidth);
@@ -3448,10 +3436,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
// Draw clip bounds
{
- paint.setColor(Color.rgb(63, 127, 255));
+ paint.setColor(DEBUG_CORNERS_COLOR);
paint.setStyle(Paint.Style.FILL);
- int lineLength = dipsToPixels(8);
+ int lineLength = dipsToPixels(DEBUG_CORNERS_SIZE_DIP);
int lineWidth = dipsToPixels(1);
for (int i = 0; i < getChildCount(); i++) {
View c = getChildAt(i);
@@ -7926,14 +7914,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
}
- private static Paint getDebugPaint() {
- if (sDebugPaint == null) {
- sDebugPaint = new Paint();
- sDebugPaint.setAntiAlias(false);
- }
- return sDebugPaint;
- }
-
private static void drawRect(Canvas canvas, Paint paint, int x1, int y1, int x2, int y2) {
if (sDebugLines== null) {
// TODO: This won't work with multiple UI threads in a single process