Loading core/java/android/view/View.java +34 −23 Original line number Diff line number Diff line Loading @@ -850,28 +850,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ public static final int HAPTIC_FEEDBACK_ENABLED = 0x10000000; /** * View flag indicating whether this view was invalidated (fully or partially.) * * @hide */ static final int DIRTY = 0x20000000; /** * View flag indicating whether this view was invalidated by an opaque * invalidate request. * * @hide */ static final int DIRTY_OPAQUE = 0x40000000; /** * Mask for {@link #DIRTY} and {@link #DIRTY_OPAQUE}. * * @hide */ static final int DIRTY_MASK = 0x60000000; /** * Use with {@link #focusSearch}. Move focus to the previous selectable * item. Loading Loading @@ -1427,6 +1405,28 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ static final int SCROLL_CONTAINER_ADDED = 0x00100000; /** * View flag indicating whether this view was invalidated (fully or partially.) * * @hide */ static final int DIRTY = 0x00200000; /** * View flag indicating whether this view was invalidated by an opaque * invalidate request. * * @hide */ static final int DIRTY_OPAQUE = 0x00400000; /** * Mask for {@link #DIRTY} and {@link #DIRTY_OPAQUE}. * * @hide */ static final int DIRTY_MASK = 0x00600000; /** * The parent this view is attached to. * {@hide} Loading @@ -1443,7 +1443,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback { /** * {@hide} */ @ViewDebug.ExportedProperty @ViewDebug.ExportedProperty(flagMapping = { @ViewDebug.FlagToString(mask = FORCE_LAYOUT, equals = FORCE_LAYOUT, name = "FORCE_LAYOUT"), @ViewDebug.FlagToString(mask = LAYOUT_REQUIRED, equals = LAYOUT_REQUIRED, name = "LAYOUT_REQUIRED"), @ViewDebug.FlagToString(mask = DRAWING_CACHE_VALID, equals = DRAWING_CACHE_VALID, name = "DRAWING_CACHE_VALID", outputIf = false), @ViewDebug.FlagToString(mask = DRAWN, equals = DRAWN, name = "DRAWN", outputIf = true), @ViewDebug.FlagToString(mask = DRAWN, equals = DRAWN, name = "NOT_DRAWN", outputIf = false), @ViewDebug.FlagToString(mask = DIRTY_MASK, equals = DIRTY_OPAQUE, name = "DIRTY_OPAQUE"), @ViewDebug.FlagToString(mask = DIRTY_MASK, equals = DIRTY, name = "DIRTY") }) int mPrivateFlags; /** Loading core/java/android/view/ViewDebug.java +89 −2 Original line number Diff line number Diff line Loading @@ -187,7 +187,7 @@ public class ViewDebug { * of an array: * * <pre> * @ViewDebug.ExportedProperty(mapping = { * @ViewDebug.ExportedProperty(indexMapping = { * @ViewDebug.IntToString(from = 0, to = "INVALID"), * @ViewDebug.IntToString(from = 1, to = "FIRST"), * @ViewDebug.IntToString(from = 2, to = "SECOND") Loading @@ -202,6 +202,25 @@ public class ViewDebug { */ IntToString[] indexMapping() default { }; /** * A flags mapping can be defined to map flags encoded in an integer to * specific strings. A mapping can be used to see human readable values * for the flags of an integer: * * <pre> * @ViewDebug.ExportedProperty(flagMapping = { * @ViewDebug.FlagToString(mask = ENABLED_MASK, equals = ENABLED, name = "ENABLED"), * @ViewDebug.FlagToString(mask = ENABLED_MASK, equals = DISABLED, name = "DISABLED"), * }) * private int mFlags; * <pre> * * A specified String is output when the following is true: * * @return An array of int to String mappings */ FlagToString[] flagMapping() default { }; /** * When deep export is turned on, this property is not dumped. Instead, the * properties contained in this property are dumped. Each child property Loading Loading @@ -247,6 +266,44 @@ public class ViewDebug { String to(); } /** * Defines a mapping from an flag to a String. Such a mapping can be used * in a @ExportedProperty to provide more meaningful values to the end user. * * @see android.view.ViewDebug.ExportedProperty */ @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface FlagToString { /** * The mask to apply to the original value. * * @return An arbitrary int value. */ int mask(); /** * The value to compare to the result of: * <code>original value & {@link #mask()}</code>. * * @return An arbitrary value. */ int equals(); /** * The String to use in place of the original int value. * * @return An arbitrary non-null String. */ String name(); /** * Indicates whether to output the flag when the test is true, * or false. Defaults to true. */ boolean outputIf() default true; } /** * This annotation can be used to mark fields and methods to be dumped when * the view is captured. Methods with this annotation must have no arguments Loading Loading @@ -1039,6 +1096,13 @@ public class ViewDebug { final int id = (Integer) methodValue; methodValue = resolveId(context, id); } else { final FlagToString[] flagsMapping = property.flagMapping(); if (flagsMapping.length > 0) { final int intValue = (Integer) methodValue; final String valuePrefix = prefix + method.getName() + '_'; exportUnrolledFlags(out, flagsMapping, intValue, valuePrefix); } final IntToString[] mapping = property.mapping(); if (mapping.length > 0) { final int intValue = (Integer) methodValue; Loading Loading @@ -1100,6 +1164,13 @@ public class ViewDebug { final int id = field.getInt(view); fieldValue = resolveId(context, id); } else { final FlagToString[] flagsMapping = property.flagMapping(); if (flagsMapping.length > 0) { final int intValue = field.getInt(view); final String valuePrefix = prefix + field.getName() + '_'; exportUnrolledFlags(out, flagsMapping, intValue, valuePrefix); } final IntToString[] mapping = property.mapping(); if (mapping.length > 0) { final int intValue = field.getInt(view); Loading Loading @@ -1157,6 +1228,22 @@ public class ViewDebug { out.write(' '); } private static void exportUnrolledFlags(BufferedWriter out, FlagToString[] mapping, int intValue, String prefix) throws IOException { final int count = mapping.length; for (int j = 0; j < count; j++) { final FlagToString flagMapping = mapping[j]; final boolean ifTrue = flagMapping.outputIf(); final boolean test = (intValue & flagMapping.mask()) == flagMapping.equals(); if ((test && ifTrue) || (!test && !ifTrue)) { final String name = flagMapping.name(); final String value = ifTrue ? "true" : "false"; writeEntry(out, prefix, name, "", value); } } } private static void exportUnrolledArray(Context context, BufferedWriter out, ExportedProperty property, int[] array, String prefix, String suffix) throws IOException { Loading core/java/com/android/internal/view/menu/IconMenuView.java +15 −13 Original line number Diff line number Diff line Loading @@ -498,19 +498,23 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi @Override protected void onDraw(Canvas canvas) { if (mHorizontalDivider != null) { Drawable drawable = mHorizontalDivider; if (drawable != null) { // If we have a horizontal divider to draw, draw it at the remembered positions for (int i = mHorizontalDividerRects.size() - 1; i >= 0; i--) { mHorizontalDivider.setBounds(mHorizontalDividerRects.get(i)); mHorizontalDivider.draw(canvas); final ArrayList<Rect> rects = mHorizontalDividerRects; for (int i = rects.size() - 1; i >= 0; i--) { drawable.setBounds(rects.get(i)); drawable.draw(canvas); } } if (mVerticalDivider != null) { drawable = mVerticalDivider; if (drawable != null) { // If we have a vertical divider to draw, draw it at the remembered positions for (int i = mVerticalDividerRects.size() - 1; i >= 0; i--) { mVerticalDivider.setBounds(mVerticalDividerRects.get(i)); mVerticalDivider.draw(canvas); final ArrayList<Rect> rects = mVerticalDividerRects; for (int i = rects.size() - 1; i >= 0; i--) { drawable.setBounds(rects.get(i)); drawable.draw(canvas); } } } Loading @@ -520,14 +524,12 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi } @Override public LayoutParams generateLayoutParams(AttributeSet attrs) { public LayoutParams generateLayoutParams(AttributeSet attrs) { return new IconMenuView.LayoutParams(getContext(), attrs); } @Override protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { // Override to allow type-checking of LayoutParams. return p instanceof IconMenuView.LayoutParams; } Loading Loading
core/java/android/view/View.java +34 −23 Original line number Diff line number Diff line Loading @@ -850,28 +850,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ public static final int HAPTIC_FEEDBACK_ENABLED = 0x10000000; /** * View flag indicating whether this view was invalidated (fully or partially.) * * @hide */ static final int DIRTY = 0x20000000; /** * View flag indicating whether this view was invalidated by an opaque * invalidate request. * * @hide */ static final int DIRTY_OPAQUE = 0x40000000; /** * Mask for {@link #DIRTY} and {@link #DIRTY_OPAQUE}. * * @hide */ static final int DIRTY_MASK = 0x60000000; /** * Use with {@link #focusSearch}. Move focus to the previous selectable * item. Loading Loading @@ -1427,6 +1405,28 @@ public class View implements Drawable.Callback, KeyEvent.Callback { */ static final int SCROLL_CONTAINER_ADDED = 0x00100000; /** * View flag indicating whether this view was invalidated (fully or partially.) * * @hide */ static final int DIRTY = 0x00200000; /** * View flag indicating whether this view was invalidated by an opaque * invalidate request. * * @hide */ static final int DIRTY_OPAQUE = 0x00400000; /** * Mask for {@link #DIRTY} and {@link #DIRTY_OPAQUE}. * * @hide */ static final int DIRTY_MASK = 0x00600000; /** * The parent this view is attached to. * {@hide} Loading @@ -1443,7 +1443,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback { /** * {@hide} */ @ViewDebug.ExportedProperty @ViewDebug.ExportedProperty(flagMapping = { @ViewDebug.FlagToString(mask = FORCE_LAYOUT, equals = FORCE_LAYOUT, name = "FORCE_LAYOUT"), @ViewDebug.FlagToString(mask = LAYOUT_REQUIRED, equals = LAYOUT_REQUIRED, name = "LAYOUT_REQUIRED"), @ViewDebug.FlagToString(mask = DRAWING_CACHE_VALID, equals = DRAWING_CACHE_VALID, name = "DRAWING_CACHE_VALID", outputIf = false), @ViewDebug.FlagToString(mask = DRAWN, equals = DRAWN, name = "DRAWN", outputIf = true), @ViewDebug.FlagToString(mask = DRAWN, equals = DRAWN, name = "NOT_DRAWN", outputIf = false), @ViewDebug.FlagToString(mask = DIRTY_MASK, equals = DIRTY_OPAQUE, name = "DIRTY_OPAQUE"), @ViewDebug.FlagToString(mask = DIRTY_MASK, equals = DIRTY, name = "DIRTY") }) int mPrivateFlags; /** Loading
core/java/android/view/ViewDebug.java +89 −2 Original line number Diff line number Diff line Loading @@ -187,7 +187,7 @@ public class ViewDebug { * of an array: * * <pre> * @ViewDebug.ExportedProperty(mapping = { * @ViewDebug.ExportedProperty(indexMapping = { * @ViewDebug.IntToString(from = 0, to = "INVALID"), * @ViewDebug.IntToString(from = 1, to = "FIRST"), * @ViewDebug.IntToString(from = 2, to = "SECOND") Loading @@ -202,6 +202,25 @@ public class ViewDebug { */ IntToString[] indexMapping() default { }; /** * A flags mapping can be defined to map flags encoded in an integer to * specific strings. A mapping can be used to see human readable values * for the flags of an integer: * * <pre> * @ViewDebug.ExportedProperty(flagMapping = { * @ViewDebug.FlagToString(mask = ENABLED_MASK, equals = ENABLED, name = "ENABLED"), * @ViewDebug.FlagToString(mask = ENABLED_MASK, equals = DISABLED, name = "DISABLED"), * }) * private int mFlags; * <pre> * * A specified String is output when the following is true: * * @return An array of int to String mappings */ FlagToString[] flagMapping() default { }; /** * When deep export is turned on, this property is not dumped. Instead, the * properties contained in this property are dumped. Each child property Loading Loading @@ -247,6 +266,44 @@ public class ViewDebug { String to(); } /** * Defines a mapping from an flag to a String. Such a mapping can be used * in a @ExportedProperty to provide more meaningful values to the end user. * * @see android.view.ViewDebug.ExportedProperty */ @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface FlagToString { /** * The mask to apply to the original value. * * @return An arbitrary int value. */ int mask(); /** * The value to compare to the result of: * <code>original value & {@link #mask()}</code>. * * @return An arbitrary value. */ int equals(); /** * The String to use in place of the original int value. * * @return An arbitrary non-null String. */ String name(); /** * Indicates whether to output the flag when the test is true, * or false. Defaults to true. */ boolean outputIf() default true; } /** * This annotation can be used to mark fields and methods to be dumped when * the view is captured. Methods with this annotation must have no arguments Loading Loading @@ -1039,6 +1096,13 @@ public class ViewDebug { final int id = (Integer) methodValue; methodValue = resolveId(context, id); } else { final FlagToString[] flagsMapping = property.flagMapping(); if (flagsMapping.length > 0) { final int intValue = (Integer) methodValue; final String valuePrefix = prefix + method.getName() + '_'; exportUnrolledFlags(out, flagsMapping, intValue, valuePrefix); } final IntToString[] mapping = property.mapping(); if (mapping.length > 0) { final int intValue = (Integer) methodValue; Loading Loading @@ -1100,6 +1164,13 @@ public class ViewDebug { final int id = field.getInt(view); fieldValue = resolveId(context, id); } else { final FlagToString[] flagsMapping = property.flagMapping(); if (flagsMapping.length > 0) { final int intValue = field.getInt(view); final String valuePrefix = prefix + field.getName() + '_'; exportUnrolledFlags(out, flagsMapping, intValue, valuePrefix); } final IntToString[] mapping = property.mapping(); if (mapping.length > 0) { final int intValue = field.getInt(view); Loading Loading @@ -1157,6 +1228,22 @@ public class ViewDebug { out.write(' '); } private static void exportUnrolledFlags(BufferedWriter out, FlagToString[] mapping, int intValue, String prefix) throws IOException { final int count = mapping.length; for (int j = 0; j < count; j++) { final FlagToString flagMapping = mapping[j]; final boolean ifTrue = flagMapping.outputIf(); final boolean test = (intValue & flagMapping.mask()) == flagMapping.equals(); if ((test && ifTrue) || (!test && !ifTrue)) { final String name = flagMapping.name(); final String value = ifTrue ? "true" : "false"; writeEntry(out, prefix, name, "", value); } } } private static void exportUnrolledArray(Context context, BufferedWriter out, ExportedProperty property, int[] array, String prefix, String suffix) throws IOException { Loading
core/java/com/android/internal/view/menu/IconMenuView.java +15 −13 Original line number Diff line number Diff line Loading @@ -498,19 +498,23 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi @Override protected void onDraw(Canvas canvas) { if (mHorizontalDivider != null) { Drawable drawable = mHorizontalDivider; if (drawable != null) { // If we have a horizontal divider to draw, draw it at the remembered positions for (int i = mHorizontalDividerRects.size() - 1; i >= 0; i--) { mHorizontalDivider.setBounds(mHorizontalDividerRects.get(i)); mHorizontalDivider.draw(canvas); final ArrayList<Rect> rects = mHorizontalDividerRects; for (int i = rects.size() - 1; i >= 0; i--) { drawable.setBounds(rects.get(i)); drawable.draw(canvas); } } if (mVerticalDivider != null) { drawable = mVerticalDivider; if (drawable != null) { // If we have a vertical divider to draw, draw it at the remembered positions for (int i = mVerticalDividerRects.size() - 1; i >= 0; i--) { mVerticalDivider.setBounds(mVerticalDividerRects.get(i)); mVerticalDivider.draw(canvas); final ArrayList<Rect> rects = mVerticalDividerRects; for (int i = rects.size() - 1; i >= 0; i--) { drawable.setBounds(rects.get(i)); drawable.draw(canvas); } } } Loading @@ -520,14 +524,12 @@ public final class IconMenuView extends ViewGroup implements ItemInvoker, MenuVi } @Override public LayoutParams generateLayoutParams(AttributeSet attrs) { public LayoutParams generateLayoutParams(AttributeSet attrs) { return new IconMenuView.LayoutParams(getContext(), attrs); } @Override protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { // Override to allow type-checking of LayoutParams. return p instanceof IconMenuView.LayoutParams; } Loading