From: Eugene Susla Date: Tue, 16 May 2017 21:16:38 +0000 (-0700) Subject: Print A11yEv. Content Change Types in DEBUG toString X-Git-Tag: android-x86-9.0-r1~3765^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4a34f9c2f6d966587a80f6721f73dbd84c0dae06;p=android-x86%2Fframeworks-base.git Print A11yEv. Content Change Types in DEBUG toString Test: Enable debug, and ensure changeTypes are properly displayed Change-Id: I1bf6a9f56a72e867a0bc967a5e3527eb4dc83952 --- diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 585f8821986b..3baadd4c64c5 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -1943,6 +1943,16 @@ public class TextUtils { return charSequence; } + /** + * Prepends {@code start} and appends {@code end} to a given {@link StringBuilder} + * + * @hide + */ + public static void wrap(StringBuilder builder, String start, String end) { + builder.insert(0, start); + builder.append(end); + } + private static Object sLock = new Object(); private static char[] sTemp = null; diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java index c6563fd25947..341386c93b94 100644 --- a/core/java/android/view/accessibility/AccessibilityEvent.java +++ b/core/java/android/view/accessibility/AccessibilityEvent.java @@ -21,6 +21,8 @@ import android.os.Parcelable; import android.text.TextUtils; import android.util.Pools.SynchronizedPool; +import com.android.internal.util.BitUtils; + import java.util.ArrayList; import java.util.List; @@ -852,6 +854,22 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par return mContentChangeTypes; } + private static String contentChangeTypesToString(int types) { + return BitUtils.flagsToString(types, AccessibilityEvent::singleContentChangeTypeToString); + } + + private static String singleContentChangeTypeToString(int type) { + switch (type) { + case CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION: { + return "CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION"; + } + case CONTENT_CHANGE_TYPE_SUBTREE: return "CONTENT_CHANGE_TYPE_SUBTREE"; + case CONTENT_CHANGE_TYPE_TEXT: return "CONTENT_CHANGE_TYPE_TEXT"; + case CONTENT_CHANGE_TYPE_UNDEFINED: return "CONTENT_CHANGE_TYPE_UNDEFINED"; + default: return Integer.toHexString(type); + } + } + /** * Sets the bit mask of node tree changes signaled by an * {@link #TYPE_WINDOW_CONTENT_CHANGED} event. @@ -1187,7 +1205,8 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par builder.append(super.toString()); if (DEBUG) { builder.append("\n"); - builder.append("; ContentChangeTypes: ").append(mContentChangeTypes); + builder.append("; ContentChangeTypes: ").append( + contentChangeTypesToString(mContentChangeTypes)); builder.append("; sourceWindowId: ").append(mSourceWindowId); if (mSourceNode != null) { builder.append("; mSourceNodeId: ").append(mSourceNode.getSourceNodeId()); diff --git a/core/java/com/android/internal/util/BitUtils.java b/core/java/com/android/internal/util/BitUtils.java index 7d4998764a98..28f12ebf1154 100644 --- a/core/java/com/android/internal/util/BitUtils.java +++ b/core/java/com/android/internal/util/BitUtils.java @@ -18,12 +18,14 @@ package com.android.internal.util; import android.annotation.Nullable; +import android.text.TextUtils; import libcore.util.Objects; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.UUID; +import java.util.function.IntFunction; /** * A utility class for handling unsigned integers and unsigned arithmetics, as well as syntactic @@ -132,4 +134,18 @@ public final class BitUtils { public static long bitAt(int bitIndex) { return 1L << bitIndex; } + + public static String flagsToString(int flags, IntFunction getFlagName) { + StringBuilder builder = new StringBuilder(); + int count = 0; + while (flags != 0) { + final int flag = 1 << Integer.numberOfTrailingZeros(flags); + flags &= ~flag; + if (count > 0) builder.append(", "); + builder.append(getFlagName.apply(flag)); + count++; + } + TextUtils.wrap(builder, "[", "]"); + return builder.toString(); + } }