diff options
Diffstat (limited to 'core/java')
3 files changed, 100 insertions, 60 deletions
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java index 6c2d34988896..56efcdf862c2 100644 --- a/core/java/android/view/accessibility/AccessibilityEvent.java +++ b/core/java/android/view/accessibility/AccessibilityEvent.java @@ -1244,43 +1244,33 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par builder.append("EventType: ").append(eventTypeToString(mEventType)); builder.append("; EventTime: ").append(mEventTime); builder.append("; PackageName: ").append(mPackageName); - builder.append("; MovementGranularity: ").append(mMovementGranularity); - builder.append("; Action: ").append(mAction); - builder.append("; ContentChangeTypes: ").append( - contentChangeTypesToString(mContentChangeTypes)); - builder.append("; WindowChangeTypes: ").append( - windowChangeTypesToString(mWindowChangeTypes)); - builder.append(super.toString()); - if (DEBUG) { - builder.append("\n"); - builder.append("; sourceWindowId: ").append(mSourceWindowId); - builder.append("; mSourceNodeId: ").append(mSourceNodeId); - for (int i = 0; i < getRecordCount(); i++) { - final AccessibilityRecord record = getRecord(i); - builder.append(" Record "); - builder.append(i); - builder.append(":"); - builder.append(" [ ClassName: " + record.mClassName); - builder.append("; Text: " + record.mText); - builder.append("; ContentDescription: " + record.mContentDescription); - builder.append("; ItemCount: " + record.mItemCount); - builder.append("; CurrentItemIndex: " + record.mCurrentItemIndex); - builder.append("; IsEnabled: " + record.isEnabled()); - builder.append("; IsPassword: " + record.isPassword()); - builder.append("; IsChecked: " + record.isChecked()); - builder.append("; IsFullScreen: " + record.isFullScreen()); - builder.append("; Scrollable: " + record.isScrollable()); - builder.append("; BeforeText: " + record.mBeforeText); - builder.append("; FromIndex: " + record.mFromIndex); - builder.append("; ToIndex: " + record.mToIndex); - builder.append("; ScrollX: " + record.mScrollX); - builder.append("; ScrollY: " + record.mScrollY); - builder.append("; AddedCount: " + record.mAddedCount); - builder.append("; RemovedCount: " + record.mRemovedCount); - builder.append("; ParcelableData: " + record.mParcelableData); - builder.append(" ]"); + if (!DEBUG_CONCISE_TOSTRING || mMovementGranularity != 0) { + builder.append("; MovementGranularity: ").append(mMovementGranularity); + } + if (!DEBUG_CONCISE_TOSTRING || mAction != 0) { + builder.append("; Action: ").append(mAction); + } + if (!DEBUG_CONCISE_TOSTRING || mContentChangeTypes != 0) { + builder.append("; ContentChangeTypes: ").append( + contentChangeTypesToString(mContentChangeTypes)); + } + if (!DEBUG_CONCISE_TOSTRING || mWindowChangeTypes != 0) { + builder.append("; WindowChangeTypes: ").append( + contentChangeTypesToString(mWindowChangeTypes)); + } + super.appendTo(builder); + if (DEBUG || DEBUG_CONCISE_TOSTRING) { + if (!DEBUG_CONCISE_TOSTRING) { builder.append("\n"); } + if (DEBUG) { + builder.append("; SourceWindowId: ").append(mSourceWindowId); + builder.append("; SourceNodeId: ").append(mSourceNodeId); + } + for (int i = 0; i < getRecordCount(); i++) { + builder.append(" Record ").append(i).append(":"); + getRecord(i).appendTo(builder).append("\n"); + } } else { builder.append("; recordCount: ").append(getRecordCount()); } diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java index fa505c97ba48..0a709f8f52d5 100644 --- a/core/java/android/view/accessibility/AccessibilityRecord.java +++ b/core/java/android/view/accessibility/AccessibilityRecord.java @@ -16,6 +16,8 @@ package android.view.accessibility; +import static com.android.internal.util.CollectionUtils.isEmpty; + import android.annotation.Nullable; import android.os.Parcelable; import android.view.View; @@ -55,6 +57,8 @@ import java.util.List; * @see AccessibilityNodeInfo */ public class AccessibilityRecord { + /** @hide */ + protected static final boolean DEBUG_CONCISE_TOSTRING = false; private static final int UNDEFINED = -1; @@ -888,28 +892,69 @@ public class AccessibilityRecord { @Override public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append(" [ ClassName: " + mClassName); - builder.append("; Text: " + mText); - builder.append("; ContentDescription: " + mContentDescription); - builder.append("; ItemCount: " + mItemCount); - builder.append("; CurrentItemIndex: " + mCurrentItemIndex); - builder.append("; IsEnabled: " + getBooleanProperty(PROPERTY_ENABLED)); - builder.append("; IsPassword: " + getBooleanProperty(PROPERTY_PASSWORD)); - builder.append("; IsChecked: " + getBooleanProperty(PROPERTY_CHECKED)); - builder.append("; IsFullScreen: " + getBooleanProperty(PROPERTY_FULL_SCREEN)); - builder.append("; Scrollable: " + getBooleanProperty(PROPERTY_SCROLLABLE)); - builder.append("; BeforeText: " + mBeforeText); - builder.append("; FromIndex: " + mFromIndex); - builder.append("; ToIndex: " + mToIndex); - builder.append("; ScrollX: " + mScrollX); - builder.append("; ScrollY: " + mScrollY); - builder.append("; MaxScrollX: " + mMaxScrollX); - builder.append("; MaxScrollY: " + mMaxScrollY); - builder.append("; AddedCount: " + mAddedCount); - builder.append("; RemovedCount: " + mRemovedCount); - builder.append("; ParcelableData: " + mParcelableData); + return appendTo(new StringBuilder()).toString(); + } + + StringBuilder appendTo(StringBuilder builder) { + builder.append(" [ ClassName: ").append(mClassName); + if (!DEBUG_CONCISE_TOSTRING || !isEmpty(mText)) { + appendPropName(builder, "Text").append(mText); + } + append(builder, "ContentDescription", mContentDescription); + append(builder, "ItemCount", mItemCount); + append(builder, "CurrentItemIndex", mCurrentItemIndex); + + appendUnless(true, PROPERTY_ENABLED, builder); + appendUnless(false, PROPERTY_PASSWORD, builder); + appendUnless(false, PROPERTY_CHECKED, builder); + appendUnless(false, PROPERTY_FULL_SCREEN, builder); + appendUnless(false, PROPERTY_SCROLLABLE, builder); + + append(builder, "BeforeText", mBeforeText); + append(builder, "FromIndex", mFromIndex); + append(builder, "ToIndex", mToIndex); + append(builder, "ScrollX", mScrollX); + append(builder, "ScrollY", mScrollY); + append(builder, "MaxScrollX", mMaxScrollX); + append(builder, "MaxScrollY", mMaxScrollY); + append(builder, "AddedCount", mAddedCount); + append(builder, "RemovedCount", mRemovedCount); + append(builder, "ParcelableData", mParcelableData); builder.append(" ]"); - return builder.toString(); + return builder; + } + + private void appendUnless(boolean defValue, int prop, StringBuilder builder) { + boolean value = getBooleanProperty(prop); + if (DEBUG_CONCISE_TOSTRING && value == defValue) return; + appendPropName(builder, singleBooleanPropertyToString(prop)) + .append(value); + } + + private static String singleBooleanPropertyToString(int prop) { + switch (prop) { + case PROPERTY_CHECKED: return "Checked"; + case PROPERTY_ENABLED: return "Enabled"; + case PROPERTY_PASSWORD: return "Password"; + case PROPERTY_FULL_SCREEN: return "FullScreen"; + case PROPERTY_SCROLLABLE: return "Scrollable"; + case PROPERTY_IMPORTANT_FOR_ACCESSIBILITY: + return "ImportantForAccessibility"; + default: return Integer.toHexString(prop); + } + } + + private void append(StringBuilder builder, String propName, int propValue) { + if (DEBUG_CONCISE_TOSTRING && propValue == UNDEFINED) return; + appendPropName(builder, propName).append(propValue); + } + + private void append(StringBuilder builder, String propName, Object propValue) { + if (DEBUG_CONCISE_TOSTRING && propValue == null) return; + appendPropName(builder, propName).append(propValue); + } + + private StringBuilder appendPropName(StringBuilder builder, String propName) { + return builder.append("; ").append(propName).append(": "); } } diff --git a/core/java/com/android/internal/util/CollectionUtils.java b/core/java/com/android/internal/util/CollectionUtils.java index 7985e5743023..2f2c747d6509 100644 --- a/core/java/com/android/internal/util/CollectionUtils.java +++ b/core/java/com/android/internal/util/CollectionUtils.java @@ -16,8 +16,6 @@ package com.android.internal.util; -import static com.android.internal.util.ArrayUtils.isEmpty; - import android.annotation.NonNull; import android.annotation.Nullable; import android.util.ArraySet; @@ -173,13 +171,20 @@ public class CollectionUtils { } /** - * Returns the size of the given list, or 0 if the list is null + * Returns the size of the given collection, or 0 if null */ public static int size(@Nullable Collection<?> cur) { return cur != null ? cur.size() : 0; } /** + * Returns whether the given collection {@link Collection#isEmpty is empty} or {@code null} + */ + public static boolean isEmpty(@Nullable Collection<?> cur) { + return size(cur) == 0; + } + + /** * Returns the elements of the given list that are of type {@code c} */ public static @NonNull <T> List<T> filter(@Nullable List<?> list, Class<T> c) { |
