diff options
| -rw-r--r-- | core/java/android/app/assist/AssistStructure.java | 11 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/app/assist/AssistStructureTest.java | 14 |
2 files changed, 23 insertions, 2 deletions
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index 508077ed43cc..1af2437a5d6a 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -1,5 +1,6 @@ package android.app.assist; +import static android.app.assist.flags.Flags.addPlaceholderViewForNullChild; import static android.credentials.Constants.FAILURE_CREDMAN_SELECTOR; import static android.credentials.Constants.SUCCESS_CREDMAN_SELECTOR; import static android.service.autofill.Flags.FLAG_AUTOFILL_CREDMAN_DEV_INTEGRATION; @@ -284,12 +285,18 @@ public class AssistStructure implements Parcelable { mCurViewStackEntry = entry; } - void writeView(ViewNode child, Parcel out, PooledStringWriter pwriter, int levelAdj) { + void writeView(@Nullable ViewNode child, Parcel out, PooledStringWriter pwriter, + int levelAdj) { if (DEBUG_PARCEL) Log.d(TAG, "write view: at " + out.dataPosition() + ", windows=" + mNumWrittenWindows + ", views=" + mNumWrittenViews + ", level=" + (mCurViewStackPos+levelAdj)); out.writeInt(VALIDATE_VIEW_TOKEN); + if (addPlaceholderViewForNullChild() && child == null) { + if (DEBUG_PARCEL_TREE) Log.d(TAG, "Detected an empty child" + + "; writing a placeholder for the child."); + child = new ViewNode(); + } int flags = child.writeSelfToParcel(out, pwriter, mSanitizeOnWrite, mTmpMatrix, /*willWriteChildren=*/true); mNumWrittenViews++; @@ -2545,7 +2552,7 @@ public class AssistStructure implements Parcelable { ensureData(); } Log.i(TAG, "Task id: " + mTaskId); - Log.i(TAG, "Activity: " + (mActivityComponent != null + Log.i(TAG, "Activity: " + (mActivityComponent != null ? mActivityComponent.flattenToShortString() : null)); Log.i(TAG, "Sanitize on write: " + mSanitizeOnWrite); diff --git a/core/tests/coretests/src/android/app/assist/AssistStructureTest.java b/core/tests/coretests/src/android/app/assist/AssistStructureTest.java index a28b2f66aaa8..51e79e7ac4e1 100644 --- a/core/tests/coretests/src/android/app/assist/AssistStructureTest.java +++ b/core/tests/coretests/src/android/app/assist/AssistStructureTest.java @@ -24,6 +24,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import android.app.assist.AssistStructure.ViewNode; import android.app.assist.AssistStructure.ViewNodeBuilder; @@ -37,6 +38,7 @@ import android.os.Bundle; import android.os.LocaleList; import android.os.OutcomeReceiver; import android.os.Parcel; +import android.os.PooledStringWriter; import android.os.SystemClock; import android.text.InputFilter; import android.util.Log; @@ -355,6 +357,18 @@ public class AssistStructureTest { } + @Test + public void testParcelTransferWriter_writeNull() { + AssistStructure structure = new AssistStructure(mActivity, FOR_AUTOFILL, NO_FLAGS); + Parcel parcel = Parcel.obtain(); + AssistStructure.ParcelTransferWriter writer = + new AssistStructure.ParcelTransferWriter(structure, parcel); + writer.writeView(null, parcel, new PooledStringWriter(parcel), 0); + + // No throw any exception. + assertTrue(true); + } + private EditText newSmallView() { EditText view = new EditText(mContext); view.setText("I AM GROOT"); |