diff options
| -rw-r--r-- | core/java/android/view/ImeBackAnimationController.java | 4 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/view/ImeBackAnimationControllerTest.java | 17 |
2 files changed, 20 insertions, 1 deletions
diff --git a/core/java/android/view/ImeBackAnimationController.java b/core/java/android/view/ImeBackAnimationController.java index 1afedc185c85..4530157d2fe1 100644 --- a/core/java/android/view/ImeBackAnimationController.java +++ b/core/java/android/view/ImeBackAnimationController.java @@ -134,7 +134,9 @@ public class ImeBackAnimationController implements OnBackAnimationCallback { @Override public void onBackInvoked() { - if (!isBackAnimationAllowed()) { + if (!isBackAnimationAllowed() || !mIsPreCommitAnimationInProgress) { + // play regular hide animation if back-animation is not allowed or if insets control has + // been cancelled by the system (this can happen in split screen for example) mInsetsController.hide(ime()); return; } diff --git a/core/tests/coretests/src/android/view/ImeBackAnimationControllerTest.java b/core/tests/coretests/src/android/view/ImeBackAnimationControllerTest.java index c00ebe487620..57bbb1cc9b57 100644 --- a/core/tests/coretests/src/android/view/ImeBackAnimationControllerTest.java +++ b/core/tests/coretests/src/android/view/ImeBackAnimationControllerTest.java @@ -241,6 +241,23 @@ public class ImeBackAnimationControllerTest { }); } + @Test + public void testOnBackInvokedHidesImeEvenIfInsetsControlCancelled() { + InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { + // start back gesture + WindowInsetsAnimationControlListener animationControlListener = startBackGesture(); + + // simulate ImeBackAnimationController not receiving control (e.g. due to split screen) + animationControlListener.onCancelled(mWindowInsetsAnimationController); + + // commit back gesture + mBackAnimationController.onBackInvoked(); + + // verify that InsetsController#hide is called + verify(mInsetsController, times(1)).hide(ime()); + }); + } + private WindowInsetsAnimationControlListener startBackGesture() { // start back gesture mBackAnimationController.onBackStarted(new BackEvent(0f, 0f, 0f, EDGE_LEFT)); |