in android/view/accessibility/AccessibilityNodeInfo.java [3189:3423]
public void writeToParcelNoRecycle(Parcel parcel, int flags) {
// Write bit set of indices of fields with values differing from default
long nonDefaultFields = 0;
int fieldIndex = 0; // index of the current field
if (isSealed() != DEFAULT.isSealed()) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mSourceNodeId != DEFAULT.mSourceNodeId) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mWindowId != DEFAULT.mWindowId) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mParentNodeId != DEFAULT.mParentNodeId) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mLabelForId != DEFAULT.mLabelForId) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mLabeledById != DEFAULT.mLabeledById) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mTraversalBefore != DEFAULT.mTraversalBefore) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mTraversalAfter != DEFAULT.mTraversalAfter) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mConnectionId != DEFAULT.mConnectionId) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (!LongArray.elementsEqual(mChildNodeIds, DEFAULT.mChildNodeIds)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mBoundsInParent, DEFAULT.mBoundsInParent)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mBoundsInScreen, DEFAULT.mBoundsInScreen)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mActions, DEFAULT.mActions)) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mMaxTextLength != DEFAULT.mMaxTextLength) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mMovementGranularities != DEFAULT.mMovementGranularities) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (mBooleanProperties != DEFAULT.mBooleanProperties) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (!Objects.equals(mPackageName, DEFAULT.mPackageName)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mClassName, DEFAULT.mClassName)) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (!Objects.equals(mText, DEFAULT.mText)) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (!Objects.equals(mHintText, DEFAULT.mHintText)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mError, DEFAULT.mError)) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (!Objects.equals(mContentDescription, DEFAULT.mContentDescription)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mPaneTitle, DEFAULT.mPaneTitle)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mTooltipText, DEFAULT.mTooltipText)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mViewIdResourceName, DEFAULT.mViewIdResourceName)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (mTextSelectionStart != DEFAULT.mTextSelectionStart) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (mTextSelectionEnd != DEFAULT.mTextSelectionEnd) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (mInputType != DEFAULT.mInputType) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mLiveRegion != DEFAULT.mLiveRegion) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (mDrawingOrderInParent != DEFAULT.mDrawingOrderInParent) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mExtraDataKeys, DEFAULT.mExtraDataKeys)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mExtras, DEFAULT.mExtras)) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (!Objects.equals(mRangeInfo, DEFAULT.mRangeInfo)) nonDefaultFields |= bitAt(fieldIndex);
fieldIndex++;
if (!Objects.equals(mCollectionInfo, DEFAULT.mCollectionInfo)) {
nonDefaultFields |= bitAt(fieldIndex);
}
fieldIndex++;
if (!Objects.equals(mCollectionItemInfo, DEFAULT.mCollectionItemInfo)) {
nonDefaultFields |= bitAt(fieldIndex);
}
int totalFields = fieldIndex;
parcel.writeLong(nonDefaultFields);
fieldIndex = 0;
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(isSealed() ? 1 : 0);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeLong(mSourceNodeId);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mWindowId);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeLong(mParentNodeId);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeLong(mLabelForId);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeLong(mLabeledById);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeLong(mTraversalBefore);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeLong(mTraversalAfter);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mConnectionId);
if (isBitSet(nonDefaultFields, fieldIndex++)) {
final LongArray childIds = mChildNodeIds;
if (childIds == null) {
parcel.writeInt(0);
} else {
final int childIdsSize = childIds.size();
parcel.writeInt(childIdsSize);
for (int i = 0; i < childIdsSize; i++) {
parcel.writeLong(childIds.get(i));
}
}
}
if (isBitSet(nonDefaultFields, fieldIndex++)) {
parcel.writeInt(mBoundsInParent.top);
parcel.writeInt(mBoundsInParent.bottom);
parcel.writeInt(mBoundsInParent.left);
parcel.writeInt(mBoundsInParent.right);
}
if (isBitSet(nonDefaultFields, fieldIndex++)) {
parcel.writeInt(mBoundsInScreen.top);
parcel.writeInt(mBoundsInScreen.bottom);
parcel.writeInt(mBoundsInScreen.left);
parcel.writeInt(mBoundsInScreen.right);
}
if (isBitSet(nonDefaultFields, fieldIndex++)) {
if (mActions != null && !mActions.isEmpty()) {
final int actionCount = mActions.size();
int nonStandardActionCount = 0;
long defaultStandardActions = 0;
for (int i = 0; i < actionCount; i++) {
AccessibilityAction action = mActions.get(i);
if (isDefaultStandardAction(action)) {
defaultStandardActions |= action.mSerializationFlag;
} else {
nonStandardActionCount++;
}
}
parcel.writeLong(defaultStandardActions);
parcel.writeInt(nonStandardActionCount);
for (int i = 0; i < actionCount; i++) {
AccessibilityAction action = mActions.get(i);
if (!isDefaultStandardAction(action)) {
parcel.writeInt(action.getId());
parcel.writeCharSequence(action.getLabel());
}
}
} else {
parcel.writeLong(0);
parcel.writeInt(0);
}
}
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mMaxTextLength);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mMovementGranularities);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mBooleanProperties);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeCharSequence(mPackageName);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeCharSequence(mClassName);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeCharSequence(mText);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeCharSequence(mHintText);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeCharSequence(mError);
if (isBitSet(nonDefaultFields, fieldIndex++)) {
parcel.writeCharSequence(mContentDescription);
}
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeCharSequence(mPaneTitle);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeCharSequence(mTooltipText);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeString(mViewIdResourceName);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mTextSelectionStart);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mTextSelectionEnd);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mInputType);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mLiveRegion);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeInt(mDrawingOrderInParent);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeStringList(mExtraDataKeys);
if (isBitSet(nonDefaultFields, fieldIndex++)) parcel.writeBundle(mExtras);
if (isBitSet(nonDefaultFields, fieldIndex++)) {
parcel.writeInt(mRangeInfo.getType());
parcel.writeFloat(mRangeInfo.getMin());
parcel.writeFloat(mRangeInfo.getMax());
parcel.writeFloat(mRangeInfo.getCurrent());
}
if (isBitSet(nonDefaultFields, fieldIndex++)) {
parcel.writeInt(mCollectionInfo.getRowCount());
parcel.writeInt(mCollectionInfo.getColumnCount());
parcel.writeInt(mCollectionInfo.isHierarchical() ? 1 : 0);
parcel.writeInt(mCollectionInfo.getSelectionMode());
}
if (isBitSet(nonDefaultFields, fieldIndex++)) {
parcel.writeInt(mCollectionItemInfo.getRowIndex());
parcel.writeInt(mCollectionItemInfo.getRowSpan());
parcel.writeInt(mCollectionItemInfo.getColumnIndex());
parcel.writeInt(mCollectionItemInfo.getColumnSpan());
parcel.writeInt(mCollectionItemInfo.isHeading() ? 1 : 0);
parcel.writeInt(mCollectionItemInfo.isSelected() ? 1 : 0);
}
if (DEBUG) {
fieldIndex--;
if (totalFields != fieldIndex) {
throw new IllegalStateException("Number of fields mismatch: " + totalFields
+ " vs " + fieldIndex);
}
}
}