summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-10-16 13:21:48 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-10-16 13:21:48 +0000
commit92f78dddcfc83dacafa3030d3552e8eec4d8edb9 (patch)
tree42c852f6dca35f56df5427fcd7e429d194e55c25
parenta2b2f2220aaa42eda476a802c468d76911742622 (diff)
parent28cf5283450e79103ef993f2dfca0e39abf8564f (diff)
Merge "Add InsetsPolicyTest#testExcludeImeInsets" into main
-rw-r--r--services/tests/wmtests/Android.bp1
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java55
2 files changed, 56 insertions, 0 deletions
diff --git a/services/tests/wmtests/Android.bp b/services/tests/wmtests/Android.bp
index ab00bfdf41ae..1f167761fc06 100644
--- a/services/tests/wmtests/Android.bp
+++ b/services/tests/wmtests/Android.bp
@@ -71,6 +71,7 @@ android_test {
"CtsSurfaceValidatorLib",
"service-sdksandbox.impl",
"com.android.window.flags.window-aconfig-java",
+ "android.view.inputmethod.flags-aconfig-java",
"flag-junit",
],
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
index d2cf03dd4b9a..ee56210e278d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
@@ -41,11 +41,13 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.verify;
import android.app.StatusBarManager;
+import android.graphics.Insets;
import android.graphics.Rect;
import android.os.Binder;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
+import android.platform.test.annotations.RequiresFlagsEnabled;
import android.view.InsetsFrameProvider;
import android.view.InsetsSource;
import android.view.InsetsSourceControl;
@@ -525,6 +527,59 @@ public class InsetsPolicyTest extends WindowTestsBase {
assertTrue(win1.getWindowFrames().hasInsetsChanged());
}
+ /**
+ * This test verifies that after setting {@link WindowContainer#mExcludeInsetsTypes}, the IME
+ * insets have a height of zero (applied in {@link InsetsPolicy#adjustVisibilityForIme}).
+ */
+ @RequiresFlagsEnabled(android.view.inputmethod.Flags.FLAG_REFACTOR_INSETS_CONTROLLER)
+ @SetupWindows(addWindows = W_INPUT_METHOD)
+ @Test
+ public void testExcludeImeInsets() {
+ final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
+ final InsetsSource imeSource = new InsetsSource(ID_IME, ime());
+ imeSource.setVisible(true);
+ mImeWindow.mHasSurface = true;
+
+ final WindowState win = addWindow(TYPE_APPLICATION, "win1");
+ win.setRequestedVisibleTypes(0, ime());
+
+ win.mAboveInsetsState.addSource(imeSource);
+ win.mHasSurface = true;
+
+ DisplayContentTests.performLayout(mDisplayContent);
+ // IME should cover half of the app's window
+ final var winFrame = win.getFrame();
+ imeSource.setFrame(winFrame.left, winFrame.bottom / 2, winFrame.right, winFrame.bottom);
+ imeSource.setVisibleFrame(imeSource.getFrame());
+ DisplayContentTests.performLayout(mDisplayContent);
+
+ assertTrue(mImeWindow.isVisible());
+ assertTrue(win.isVisible());
+
+ displayPolicy.beginPostLayoutPolicyLw();
+ displayPolicy.applyPostLayoutPolicyLw(win, win.mAttrs, null, null);
+ displayPolicy.finishPostLayoutPolicyLw();
+
+ final var imeInsetsShown = win.getInsetsState().calculateInsets(win.getFrame(), ime(),
+ true);
+ assertEquals(new Rect(0, 0, 0, winFrame.bottom / 2), imeInsetsShown.toRect());
+
+
+ // Now we're setting the excludedInsetsTypes for the IME. The IME is still showing, but
+ // in this case, InsetsPolicy#adjustVisibilityForIme will override and dispatch IME
+ // insets with zero height.
+ win.setExcludeInsetsTypes(ime());
+
+ displayPolicy.beginPostLayoutPolicyLw();
+ displayPolicy.applyPostLayoutPolicyLw(win, win.mAttrs, null, null);
+ displayPolicy.finishPostLayoutPolicyLw();
+
+ final var imeInsetsHidden = win.getInsetsState().calculateInsets(win.getFrame(), ime(),
+ true);
+ assertEquals(Insets.NONE, imeInsetsHidden);
+ }
+
+
private WindowState addNavigationBar() {
final Binder owner = new Binder();
final WindowState win = createWindow(null, TYPE_NAVIGATION_BAR, "navBar");