Merge "Fix uncleared fields of windowinfo after recycling"

This commit is contained in:
Ryan Lin
2022-07-05 15:06:14 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 16 deletions

View File

@@ -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<WindowInfo> CREATOR =

View File

@@ -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;
}