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

Commit bb7f4caf authored by Tiger Huang's avatar Tiger Huang Committed by Automerger Merge Worker
Browse files

Merge "Remove more dead tests of legacy insets mode" into rvc-dev am: 47936d5e

Change-Id: I9e2ddcad004188600ff3c3062dc18f668dd3c9f6
parents 9c254151 47936d5e
Loading
Loading
Loading
Loading
+13 −133
Original line number Diff line number Diff line
@@ -28,29 +28,23 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;

import static org.hamcrest.Matchers.equalTo;
import static androidx.test.InstrumentationRegistry.getInstrumentation;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assume.assumeTrue;
import static org.junit.Assert.assertTrue;

import android.content.Context;
import android.graphics.Insets;
import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
import android.view.WindowInsets.Side;
import android.view.WindowInsets.Type;

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * Tests for {@link ViewRootImpl}
 *
@@ -62,59 +56,18 @@ import java.lang.reflect.Method;
@RunWith(AndroidJUnit4.class)
public class ViewRootImplTest {

    private Context mContext;
    private ViewRootImplAccessor mViewRootImpl;
    private ViewRootImpl mViewRootImpl;

    @Before
    public void setUp() throws Exception {
        mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();

        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
            mViewRootImpl = new ViewRootImplAccessor(
                    new ViewRootImpl(mContext, mContext.getDisplayNoVerify()));
        });
    }

    @Test
    public void negativeInsets_areSetToZero() throws Exception {
        assumeTrue(ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL);

        mViewRootImpl.getAttachInfo().getContentInsets().set(-10, -20, -30 , -40);
        mViewRootImpl.getAttachInfo().getStableInsets().set(-10, -20, -30 , -40);
        final WindowInsets insets = mViewRootImpl.getWindowInsets(true /* forceConstruct */);
        final Context context = getInstrumentation().getTargetContext();

        assertThat(insets.getSystemWindowInsets(), equalTo(Insets.NONE));
        assertThat(insets.getStableInsets(), equalTo(Insets.NONE));
    }

    @Test
    public void negativeInsets_areSetToZero_positiveAreLeftAsIs() throws Exception {
        assumeTrue(ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL);

        mViewRootImpl.getAttachInfo().getContentInsets().set(-10, 20, -30 , 40);
        mViewRootImpl.getAttachInfo().getStableInsets().set(10, -20, 30 , -40);
        final WindowInsets insets = mViewRootImpl.getWindowInsets(true /* forceConstruct */);

        assertThat(insets.getSystemWindowInsets(), equalTo(Insets.of(0, 20, 0, 40)));
        assertThat(insets.getStableInsets(), equalTo(Insets.of(10, 0, 30, 0)));
    }

    @Test
    public void positiveInsets_areLeftAsIs() throws Exception {
        assumeTrue(ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL);

        mViewRootImpl.getAttachInfo().getContentInsets().set(10, 20, 30 , 40);
        mViewRootImpl.getAttachInfo().getStableInsets().set(10, 20, 30 , 40);
        final WindowInsets insets = mViewRootImpl.getWindowInsets(true /* forceConstruct */);

        assertThat(insets.getSystemWindowInsets(), equalTo(Insets.of(10, 20, 30, 40)));
        assertThat(insets.getStableInsets(), equalTo(Insets.of(10, 20, 30, 40)));
        getInstrumentation().runOnMainSync(() ->
                mViewRootImpl = new ViewRootImpl(context, context.getDisplayNoVerify()));
    }

    @Test
    public void adjustLayoutParamsForCompatibility_layoutFullscreen() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_APPLICATION);
        attrs.systemUiVisibility = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
        ViewRootImpl.adjustLayoutParamsForCompatibility(attrs);
@@ -125,8 +78,6 @@ public class ViewRootImplTest {

    @Test
    public void adjustLayoutParamsForCompatibility_layoutInScreen() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_APPLICATION);
        attrs.flags = FLAG_LAYOUT_IN_SCREEN;
        ViewRootImpl.adjustLayoutParamsForCompatibility(attrs);
@@ -137,8 +88,6 @@ public class ViewRootImplTest {

    @Test
    public void adjustLayoutParamsForCompatibility_layoutHideNavigation() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_APPLICATION);
        attrs.systemUiVisibility = SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        ViewRootImpl.adjustLayoutParamsForCompatibility(attrs);
@@ -149,28 +98,22 @@ public class ViewRootImplTest {

    @Test
    public void adjustLayoutParamsForCompatibility_toast() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_TOAST);
        ViewRootImpl.adjustLayoutParamsForCompatibility(attrs);

        assertEquals(true, attrs.isFitInsetsIgnoringVisibility());
        assertTrue(attrs.isFitInsetsIgnoringVisibility());
    }

    @Test
    public void adjustLayoutParamsForCompatibility_systemAlert() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_SYSTEM_ALERT);
        ViewRootImpl.adjustLayoutParamsForCompatibility(attrs);

        assertEquals(true, attrs.isFitInsetsIgnoringVisibility());
        assertTrue(attrs.isFitInsetsIgnoringVisibility());
    }

    @Test
    public void adjustLayoutParamsForCompatibility_fitSystemBars() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_APPLICATION);
        ViewRootImpl.adjustLayoutParamsForCompatibility(attrs);

@@ -180,8 +123,6 @@ public class ViewRootImplTest {

    @Test
    public void adjustLayoutParamsForCompatibility_noAdjustLayout() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams(TYPE_APPLICATION);
        final int types = Type.all();
        final int sides = Side.TOP | Side.LEFT;
@@ -201,11 +142,8 @@ public class ViewRootImplTest {

    @Test
    public void adjustLayoutParamsForCompatibility_noAdjustAppearance() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final ViewRootImpl viewRoot = mViewRootImpl.get();
        final WindowInsetsController controller = viewRoot.getInsetsController();
        final WindowManager.LayoutParams attrs = viewRoot.mWindowAttributes;
        final WindowInsetsController controller = mViewRootImpl.getInsetsController();
        final WindowManager.LayoutParams attrs = mViewRootImpl.mWindowAttributes;
        final int appearance = 0;
        controller.setSystemBarsAppearance(appearance, 0xffffffff);
        attrs.systemUiVisibility = SYSTEM_UI_FLAG_LOW_PROFILE
@@ -220,11 +158,8 @@ public class ViewRootImplTest {

    @Test
    public void adjustLayoutParamsForCompatibility_noAdjustBehavior() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final ViewRootImpl viewRoot = mViewRootImpl.get();
        final WindowInsetsController controller = viewRoot.getInsetsController();
        final WindowManager.LayoutParams attrs = viewRoot.mWindowAttributes;
        final WindowInsetsController controller = mViewRootImpl.getInsetsController();
        final WindowManager.LayoutParams attrs = mViewRootImpl.mWindowAttributes;
        final int behavior = BEHAVIOR_SHOW_BARS_BY_TOUCH;
        controller.setSystemBarsBehavior(behavior);
        attrs.systemUiVisibility = SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
@@ -234,59 +169,4 @@ public class ViewRootImplTest {
        // setSystemBarsBehavior.
        assertEquals(behavior, controller.getSystemBarsBehavior());
    }

    private static class ViewRootImplAccessor {

        private final ViewRootImpl mViewRootImpl;

        ViewRootImplAccessor(ViewRootImpl viewRootImpl) {
            mViewRootImpl = viewRootImpl;
        }

        public ViewRootImpl get() {
            return mViewRootImpl;
        }

        AttachInfoAccessor getAttachInfo() throws Exception {
            return new AttachInfoAccessor(
                    getField(mViewRootImpl, ViewRootImpl.class.getDeclaredField("mAttachInfo")));
        }

        WindowInsets getWindowInsets(boolean forceConstruct) throws Exception {
            return (WindowInsets) invokeMethod(mViewRootImpl,
                    ViewRootImpl.class.getDeclaredMethod("getWindowInsets", boolean.class),
                    forceConstruct);
        }

        class AttachInfoAccessor {

            private final Class<?> mClass;
            private final Object mAttachInfo;

            AttachInfoAccessor(Object attachInfo) throws Exception {
                mAttachInfo = attachInfo;
                mClass = ViewRootImpl.class.getClassLoader().loadClass(
                        "android.view.View$AttachInfo");
            }

            Rect getContentInsets() throws Exception {
                return (Rect) getField(mAttachInfo, mClass.getDeclaredField("mContentInsets"));
            }

            Rect getStableInsets() throws Exception {
                return (Rect) getField(mAttachInfo, mClass.getDeclaredField("mStableInsets"));
            }
        }

        private static Object getField(Object o, Field field) throws Exception {
            field.setAccessible(true);
            return field.get(o);
        }

        private static Object invokeMethod(Object o, Method method, Object... args)
                throws Exception {
            method.setAccessible(true);
            return method.invoke(o, args);
        }
    }
}
+0 −162
Original line number Diff line number Diff line
@@ -27,9 +27,7 @@ import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_270;
import static android.view.Surface.ROTATION_90;
import static android.view.View.SYSTEM_UI_FLAG_FULLSCREEN;
import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
@@ -40,7 +38,6 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
@@ -50,7 +47,6 @@ import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assume.assumeTrue;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.spy;
import static org.testng.Assert.expectThrows;
@@ -64,18 +60,15 @@ import android.util.Pair;
import android.view.DisplayCutout;
import android.view.DisplayInfo;
import android.view.InsetsState;
import android.view.ViewRootImpl;
import android.view.WindowInsets.Side;
import android.view.WindowInsets.Type;
import android.view.WindowManager;

import androidx.test.filters.FlakyTest;
import androidx.test.filters.SmallTest;

import com.android.server.policy.WindowManagerPolicy;
import com.android.server.wm.utils.WmDisplayCutout;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -116,12 +109,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {
        updateDisplayFrames();
    }

    @After
    public void tearDown() {
        PolicyControl.setFilters("");
        mWindow.getDisplayContent().mInputMethodTarget = null;
    }

    public void setRotation(int rotation) {
        mRotation = rotation;
        updateDisplayFrames();
@@ -210,8 +197,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {

    @Test
    public void layoutWindowLw_fitStatusBars() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        mWindow.mAttrs.setFitInsetsTypes(Type.statusBars());
        addWindow(mWindow);

@@ -228,8 +213,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {

    @Test
    public void layoutWindowLw_fitNavigationBars() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        mWindow.mAttrs.setFitInsetsTypes(Type.navigationBars());
        addWindow(mWindow);

@@ -246,8 +229,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {

    @Test
    public void layoutWindowLw_fitAllSides() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        mWindow.mAttrs.setFitInsetsSides(Side.all());
        addWindow(mWindow);

@@ -264,8 +245,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {

    @Test
    public void layoutWindowLw_fitTopOnly() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        mWindow.mAttrs.setFitInsetsSides(Side.TOP);
        addWindow(mWindow);

@@ -282,8 +261,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {

    @Test
    public void layoutWindowLw_fitInsetsIgnoringVisibility() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final InsetsState state =
                mDisplayContent.getInsetsPolicy().getInsetsForDispatch(mWindow);
        state.getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false);
@@ -304,8 +281,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {

    @Test
    public void layoutWindowLw_fitInsetsNotIgnoringVisibility() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);

        final InsetsState state =
                mDisplayContent.getInsetsPolicy().getInsetsForDispatch(mWindow);
        state.getSource(InsetsState.ITYPE_STATUS_BAR).setVisible(false);
@@ -326,7 +301,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {

    @Test
    public void layoutWindowLw_fitDisplayCutout() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_FULL);
        addDisplayCutout();

        mWindow.mAttrs.setFitInsetsTypes(Type.displayCutout());
@@ -682,31 +656,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {
        assertInsetBy(mWindow.getDisplayFrameLw(), 0, 0, 0, 0);
    }

    @Test
    public void layoutWindowLw_withForwardInset_SoftInputAdjustResize() {
        assumeTrue(ViewRootImpl.sNewInsetsMode == ViewRootImpl.NEW_INSETS_MODE_NONE);

        mWindow.mAttrs.flags =
                FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
        mWindow.mAttrs.setFitInsetsTypes(0 /* types */);
        mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_RESIZE;
        addWindow(mWindow);

        final int forwardedInsetBottom = 50;
        mDisplayPolicy.setForwardedInsets(Insets.of(0, 0, 0, forwardedInsetBottom));
        mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
        mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);

        assertInsetBy(mWindow.getParentFrame(), 0, 0, 0, 0);
        assertInsetByTopBottom(mWindow.getStableFrameLw(), STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT);
        assertInsetByTopBottom(mWindow.getContentFrameLw(),
                STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT + forwardedInsetBottom);
        assertInsetByTopBottom(mWindow.getVisibleFrameLw(),
                STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT + forwardedInsetBottom);
        assertInsetBy(mWindow.getDecorFrame(), 0, 0, 0, 0);
        assertInsetBy(mWindow.getDisplayFrameLw(), 0, 0, 0, 0);
    }

    @Test
    public void layoutWindowLw_withForwardInset_SoftInputAdjustNothing() {
        mWindow.mAttrs.flags =
@@ -728,117 +677,6 @@ public class DisplayPolicyLayoutTests extends DisplayPolicyTestsBase {
        assertInsetBy(mWindow.getDisplayFrameLw(), 0, 0, 0, 0);
    }

    // TODO(b/118118435): remove after removing PolicyControl
    @FlakyTest(bugId = 129711077)
    @Test
    public void layoutWindowLw_withImmersive_SoftInputAdjustResize() {
        assumeTrue(ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL);

        synchronized (mWm.mGlobalLock) {
            mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_RESIZE;
            mWindow.mAttrs.flags = 0;
            mWindow.mAttrs.systemUiVisibility =
                    SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION;

            addWindow(mWindow);

            mWindow.getDisplayContent().mInputMethodTarget = mWindow;
            mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
            mFrames.mContent.bottom = mFrames.mVoiceContent.bottom = INPUT_METHOD_WINDOW_TOP;
            mFrames.mCurrent.bottom = INPUT_METHOD_WINDOW_TOP;
            mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);

            int bottomInset = mFrames.mDisplayHeight - INPUT_METHOD_WINDOW_TOP;
            assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0);
            assertInsetByTopBottom(mWindow.getContentFrameLw(), 0, 0);
            assertInsetByTopBottom(mWindow.getVisibleFrameLw(), STATUS_BAR_HEIGHT, bottomInset);
        }
    }

    // TODO(b/118118435): remove after removing PolicyControl
    @FlakyTest(bugId = 129711077)
    @Test
    public void layoutWindowLw_withImmersive_SoftInputAdjustNothing() {
        assumeTrue(ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL);

        synchronized (mWm.mGlobalLock) {
            mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_NOTHING;
            mWindow.mAttrs.flags = 0;
            mWindow.mAttrs.systemUiVisibility =
                    SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION;

            addWindow(mWindow);

            mWindow.getDisplayContent().mInputMethodTarget = mWindow;
            mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
            mFrames.mContent.bottom = mFrames.mVoiceContent.bottom = INPUT_METHOD_WINDOW_TOP;
            mFrames.mCurrent.bottom = INPUT_METHOD_WINDOW_TOP;
            mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);

            assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0);
            assertInsetByTopBottom(mWindow.getContentFrameLw(), 0, 0);
            assertInsetByTopBottom(mWindow.getVisibleFrameLw(), 0, 0);
        }
    }

    // TODO(b/118118435): remove after removing PolicyControl
    @FlakyTest(bugId = 129711077)
    @Test
    public void layoutWindowLw_withForceImmersive_fullscreen() {
        assumeTrue(ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL);

        synchronized (mWm.mGlobalLock) {
            mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_RESIZE;
            mWindow.mAttrs.flags = 0;
            mWindow.mAttrs.systemUiVisibility = 0;
            PolicyControl.setFilters(PolicyControl.NAME_IMMERSIVE_FULL + "=*");

            addWindow(mWindow);

            mWindow.getDisplayContent().mInputMethodTarget = mWindow;
            mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
            mFrames.mContent.bottom = mFrames.mVoiceContent.bottom = INPUT_METHOD_WINDOW_TOP;
            mFrames.mCurrent.bottom = INPUT_METHOD_WINDOW_TOP;
            mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);

            int bottomInset = mFrames.mDisplayHeight - INPUT_METHOD_WINDOW_TOP;
            assertInsetByTopBottom(mWindow.getParentFrame(), 0, 0);
            assertInsetByTopBottom(mWindow.getContentFrameLw(), 0, 0);
            assertInsetByTopBottom(mWindow.getVisibleFrameLw(), STATUS_BAR_HEIGHT, bottomInset);
        }
    }

    // TODO(b/118118435): remove after removing PolicyControl
    @FlakyTest(bugId = 129711077)
    @Test
    public void layoutWindowLw_withForceImmersive_nonFullscreen() {
        assumeTrue(ViewRootImpl.sNewInsetsMode != ViewRootImpl.NEW_INSETS_MODE_FULL);

        synchronized (mWm.mGlobalLock) {
            mWindow.mAttrs.softInputMode = SOFT_INPUT_ADJUST_RESIZE;
            mWindow.mAttrs.flags = 0;
            mWindow.mAttrs.systemUiVisibility = 0;
            mWindow.mAttrs.width = DISPLAY_WIDTH / 2;
            mWindow.mAttrs.height = DISPLAY_HEIGHT / 2;
            PolicyControl.setFilters(PolicyControl.NAME_IMMERSIVE_FULL + "=*");

            addWindow(mWindow);

            mWindow.getDisplayContent().mInputMethodTarget = mWindow;
            mDisplayPolicy.beginLayoutLw(mFrames, 0 /* UI mode */);
            mFrames.mContent.bottom = mFrames.mVoiceContent.bottom = INPUT_METHOD_WINDOW_TOP;
            mFrames.mCurrent.bottom = INPUT_METHOD_WINDOW_TOP;
            mDisplayPolicy.layoutWindowLw(mWindow, null, mFrames);

            int bottomInset = mFrames.mDisplayHeight - INPUT_METHOD_WINDOW_TOP;
            assertInsetByTopBottom(mWindow.getParentFrame(), STATUS_BAR_HEIGHT, bottomInset);
            assertInsetByTopBottom(mWindow.getContentFrameLw(), STATUS_BAR_HEIGHT, bottomInset);
            assertInsetByTopBottom(mWindow.getVisibleFrameLw(), STATUS_BAR_HEIGHT, bottomInset);
        }
    }

    @Test
    public void layoutHint_appWindow() {
        mWindow.mAttrs.flags =
+0 −20
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMAR
import static android.hardware.camera2.params.OutputConfiguration.ROTATION_90;
import static android.view.InsetsState.ITYPE_STATUS_BAR;
import static android.view.Surface.ROTATION_0;
import static android.view.ViewRootImpl.NEW_INSETS_MODE_FULL;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
@@ -75,17 +74,13 @@ import android.util.Size;
import android.view.DisplayCutout;
import android.view.InsetsSource;
import android.view.SurfaceControl;
import android.view.ViewRootImpl;
import android.view.WindowManager;

import androidx.test.filters.FlakyTest;
import androidx.test.filters.SmallTest;

import com.android.server.wm.utils.WmDisplayCutout;

import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;

@@ -103,21 +98,6 @@ import java.util.List;
@Presubmit
@RunWith(WindowTestRunner.class)
public class WindowStateTests extends WindowTestsBase {
    private static int sPreviousNewInsetsMode;

    @BeforeClass
    public static void setUpOnce() {
        // TODO: Make use of SettingsSession when it becomes feasible for this.
        sPreviousNewInsetsMode = ViewRootImpl.sNewInsetsMode;
        // To let the insets provider control the insets visibility, the insets mode has to be
        // NEW_INSETS_MODE_FULL.
        ViewRootImpl.sNewInsetsMode = NEW_INSETS_MODE_FULL;
    }

    @AfterClass
    public static void tearDownOnce() {
        ViewRootImpl.sNewInsetsMode = sPreviousNewInsetsMode;
    }

    @Before
    public void setUp() {