Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c46e2a86 authored by ryanlwlin's avatar ryanlwlin
Browse files

Fix uncleared fields of windowinfo after recycling

Bug: 237979750
Test: atest WindowInfoTest
Change-Id: I0880cfdc04c777f9123f42c0e4d9fcf65cd11358
parent cc306907
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 =
+34 −16
Original line number Diff line number Diff line
@@ -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;
    }