diff options
| -rw-r--r-- | core/java/android/view/ImeFocusController.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/InsetsController.java | 3 | 
2 files changed, 14 insertions, 1 deletions
diff --git a/core/java/android/view/ImeFocusController.java b/core/java/android/view/ImeFocusController.java index 97148969e17f..2d2f79d76008 100644 --- a/core/java/android/view/ImeFocusController.java +++ b/core/java/android/view/ImeFocusController.java @@ -23,6 +23,7 @@ import android.annotation.NonNull;  import android.annotation.UiThread;  import android.util.Log;  import android.util.proto.ProtoOutputStream; +import android.view.inputmethod.Flags;  import android.view.inputmethod.InputMethodManager;  import com.android.internal.inputmethod.InputMethodDebug; @@ -150,6 +151,17 @@ public final class ImeFocusController {          if (!mHasImeFocus || isInLocalFocusMode(windowAttribute)) {              return InputMethodManager.DISPATCH_NOT_HANDLED;          } +        if (Flags.refactorInsetsController() && event instanceof KeyEvent keyEvent +                && keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK) { +            final var insetsController = mViewRootImpl.getInsetsController(); +            if (insetsController.getAnimationType(WindowInsets.Type.ime()) +                    == InsetsController.ANIMATION_TYPE_HIDE +                    || insetsController.isPredictiveBackImeHideAnimInProgress()) { +                // if there is an ongoing hide animation, the back event should not be dispatched +                // to the IME. +                return InputMethodManager.DISPATCH_NOT_HANDLED; +            } +        }          final InputMethodManager imm =                  mViewRootImpl.mContext.getSystemService(InputMethodManager.class);          if (imm == null) { diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index 26ca813a9caa..b0813f3a98f6 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -1910,7 +1910,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation          mImeSourceConsumer.onWindowFocusLost();      } -    @VisibleForTesting +    /** Returns the current {@link AnimationType} of an {@link InsetsType}. */ +    @VisibleForTesting(visibility = PACKAGE)      public @AnimationType int getAnimationType(@InsetsType int type) {          for (int i = mRunningAnimations.size() - 1; i >= 0; i--) {              InsetsAnimationControlRunner control = mRunningAnimations.get(i).runner;  |