From 8321a2a48dd63124dd1e418c9d730ef9bab0d62a Mon Sep 17 00:00:00 2001 From: Taran Singh Date: Tue, 21 Apr 2020 17:26:50 -0700 Subject: [PATCH] Add test for ImeInsetsSourceConsumer Add test to verify that requestedVisibleAwaitingControl starts animation. This is followup test for comment in commit I958fc5747382109aa2f21bc1067a28746e7242d8 Bug: 154440912 Fix: 153577930 Test: atest ImeInsetsSourceConsumerTest Change-Id: I08db27151605ac53b0575b08343b5a75dc2e5fc2 --- core/java/android/view/InsetsController.java | 3 +- .../view/ImeInsetsSourceConsumerTest.java | 35 ++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index 43c7bede38c22..f135328c44fee 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -1002,7 +1002,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } } - private void applyAnimation(@InsetsType final int types, boolean show, boolean fromIme) { + @VisibleForTesting + public void applyAnimation(@InsetsType final int types, boolean show, boolean fromIme) { if (types == 0) { // nothing to animate. return; diff --git a/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java b/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java index 03aba25bf9f78..0f544c53a6584 100644 --- a/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java +++ b/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java @@ -23,13 +23,16 @@ import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + import android.content.Context; import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; import android.platform.test.annotations.Presubmit; -import android.view.SurfaceControl.Transaction; import android.view.WindowManager.BadTokenException; import android.view.WindowManager.LayoutParams; import android.view.inputmethod.EditorInfo; @@ -42,6 +45,8 @@ import androidx.test.runner.AndroidJUnit4; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.Spy; import java.util.ArrayList; @@ -52,7 +57,7 @@ public class ImeInsetsSourceConsumerTest { Context mContext = InstrumentationRegistry.getTargetContext(); ImeInsetsSourceConsumer mImeConsumer; - InsetsController mController; + @Spy InsetsController mController; SurfaceControl mLeash; @Before @@ -67,7 +72,7 @@ public class ImeInsetsSourceConsumerTest { } catch (BadTokenException e) { // activity isn't running, we will ignore BadTokenException. } - mController = new InsetsController(viewRootImpl); + mController = Mockito.spy(new InsetsController(viewRootImpl)); final Rect rect = new Rect(5, 5, 5, 5); mController.calculateInsets( false, @@ -75,8 +80,7 @@ public class ImeInsetsSourceConsumerTest { new DisplayCutout( Insets.of(10, 10, 10, 10), rect, rect, rect, rect), SOFT_INPUT_ADJUST_RESIZE, 0); - mImeConsumer = new ImeInsetsSourceConsumer( - new InsetsState(), Transaction::new, mController); + mImeConsumer = (ImeInsetsSourceConsumer) mController.getSourceConsumer(ITYPE_IME); }); } @@ -99,6 +103,27 @@ public class ImeInsetsSourceConsumerTest { }); } + @Test + public void testImeRequestedVisibleAwaitingControl() { + // Set null control and then request show. + mController.onControlsChanged(new InsetsSourceControl[] { null }); + + InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { + // Request IME visible before control is available. + mImeConsumer.onWindowFocusGained(); + mImeConsumer.applyImeVisibility(true /* setVisible */); + + // set control and verify visibility is applied. + InsetsSourceControl control = new InsetsSourceControl(ITYPE_IME, mLeash, new Point()); + mController.onControlsChanged(new InsetsSourceControl[] { control }); + // IME show animation should be triggered when control becomes available. + verify(mController).applyAnimation( + eq(WindowInsets.Type.ime()), eq(true) /* show */, eq(true) /* fromIme */); + verify(mController, never()).applyAnimation( + eq(WindowInsets.Type.ime()), eq(false) /* show */, eq(true) /* fromIme */); + }); + } + @Test public void testAreEditorsSimilar() { EditorInfo info1 = new EditorInfo();