Merge "Fix uncleared fields of windowinfo after recycling"
This commit is contained in:
@@ -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 =
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user