diff --git a/core/java/android/view/WindowInfo.java b/core/java/android/view/WindowInfo.java index a5b8720c7dec5..11d63c84d142c 100644 --- a/core/java/android/view/WindowInfo.java +++ b/core/java/android/view/WindowInfo.java @@ -208,6 +208,8 @@ public class WindowInfo implements Parcelable { mTransformMatrix[i] = 0; } mMagnificationSpec.clear(); + title = null; + accessibilityIdOfAnchor = AccessibilityNodeInfo.UNDEFINED_NODE_ID; } public static final @android.annotation.NonNull Parcelable.Creator CREATOR = diff --git a/core/tests/coretests/src/android/view/WindowInfoTest.java b/core/tests/coretests/src/android/view/WindowInfoTest.java index afc2c002db08d..f9e3f43b562c0 100644 --- a/core/tests/coretests/src/android/view/WindowInfoTest.java +++ b/core/tests/coretests/src/android/view/WindowInfoTest.java @@ -30,6 +30,7 @@ import android.graphics.Matrix; import android.os.IBinder; import android.os.Parcel; import android.platform.test.annotations.Presubmit; +import android.text.TextUtils; import android.view.accessibility.AccessibilityNodeInfo; import androidx.test.filters.SmallTest; @@ -82,22 +83,7 @@ public class WindowInfoTest { public void testDefaultValues() { WindowInfo w = WindowInfo.obtain(); - assertEquals(0, w.type); - assertEquals(0, w.layer); - assertEquals(AccessibilityNodeInfo.UNDEFINED_NODE_ID, w.accessibilityIdOfAnchor); - assertEquals(Display.INVALID_DISPLAY, w.displayId); - assertEquals(ActivityTaskManager.INVALID_TASK_ID, w.taskId); - assertNull(w.title); - assertNull(w.token); - assertNull(w.childTokens); - assertNull(w.parentToken); - assertNull(w.activityToken); - assertFalse(w.focused); - assertFalse(w.inPictureInPicture); - assertFalse(w.hasFlagWatchOutsideTouch); - assertTrue(w.regionInScreen.isEmpty()); - assertEquals(w.mTransformMatrix.length, 9); - assertTrue(w.mMagnificationSpec.isNop()); + assertDefaultValue(w); } @SmallTest @@ -114,6 +100,37 @@ public class WindowInfoTest { } } + @SmallTest + @Test + public void testRecycle_fallbackToDefaultValues() { + WindowInfo w = WindowInfo.obtain(); + initTestWindowInfo(w); + w.recycle(); + + assertDefaultValue(w); + } + + private static void assertDefaultValue(WindowInfo windowinfo) { + assertEquals(0, windowinfo.type); + assertEquals(0, windowinfo.layer); + assertEquals(AccessibilityNodeInfo.UNDEFINED_NODE_ID, windowinfo.accessibilityIdOfAnchor); + assertEquals(Display.INVALID_DISPLAY, windowinfo.displayId); + assertEquals(ActivityTaskManager.INVALID_TASK_ID, windowinfo.taskId); + assertNull(windowinfo.title); + assertNull(windowinfo.token); + if (windowinfo.childTokens != null) { + assertTrue(windowinfo.childTokens.isEmpty()); + } + assertNull(windowinfo.parentToken); + assertNull(windowinfo.activityToken); + assertFalse(windowinfo.focused); + assertFalse(windowinfo.inPictureInPicture); + assertFalse(windowinfo.hasFlagWatchOutsideTouch); + assertTrue(windowinfo.regionInScreen.isEmpty()); + assertEquals(windowinfo.mTransformMatrix.length, 9); + assertTrue(windowinfo.mMagnificationSpec.isNop()); + } + private boolean areWindowsEqual(WindowInfo w1, WindowInfo w2) { boolean equality = w1.toString().contentEquals(w2.toString()); equality &= w1.token == w2.token; @@ -123,6 +140,7 @@ public class WindowInfoTest { equality &= w1.regionInScreen.equals(w2.regionInScreen); equality &= w1.mMagnificationSpec.equals(w2.mMagnificationSpec); equality &= Arrays.equals(w1.mTransformMatrix, w2.mTransformMatrix); + equality &= TextUtils.equals(w1.title, w2.title); return equality; }