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;
import android.text.TextUtils;
import android.util.Pools.SynchronizedPool;
+import com.android.internal.util.BitUtils;
+
import java.util.ArrayList;
import java.util.List;
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.
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());
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
public static long bitAt(int bitIndex) {
return 1L << bitIndex;
}
+
+ public static String flagsToString(int flags, IntFunction<String> 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();
+ }
}