diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/ImeInsetsSourceConsumer.java | 4 | ||||
| -rw-r--r-- | core/java/android/view/InsetsController.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/InsetsSourceConsumer.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 6 |
4 files changed, 21 insertions, 10 deletions
diff --git a/core/java/android/view/ImeInsetsSourceConsumer.java b/core/java/android/view/ImeInsetsSourceConsumer.java index 98b7dbfa670f..f401ad9346c6 100644 --- a/core/java/android/view/ImeInsetsSourceConsumer.java +++ b/core/java/android/view/ImeInsetsSourceConsumer.java @@ -51,8 +51,8 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer { } @Override - public void onWindowFocusGained() { - super.onWindowFocusGained(); + public void onWindowFocusGained(boolean hasViewFocus) { + super.onWindowFocusGained(hasViewFocus); getImm().registerImeConsumer(this); } diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index a68f528837c0..c001ec9da3a4 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -1302,8 +1302,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation /** * Called when current window gains focus. */ - public void onWindowFocusGained() { - getSourceConsumer(ITYPE_IME).onWindowFocusGained(); + public void onWindowFocusGained(boolean hasViewFocused) { + getSourceConsumer(ITYPE_IME).onWindowFocusGained(hasViewFocused); } /** @@ -1366,8 +1366,9 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation final InsetsSourceControl imeControl = consumer != null ? consumer.getControl() : null; // Skip showing animation once that made by system for some reason. // (e.g. starting window with IME snapshot) - if (imeControl != null && show) { - skipAnim = imeControl.getAndClearSkipAnimationOnce(); + if (imeControl != null) { + skipAnim = imeControl.getAndClearSkipAnimationOnce() && show + && consumer.hasViewFocusWhenWindowFocusGain(); } } applyAnimation(types, show, fromIme, skipAnim); diff --git a/core/java/android/view/InsetsSourceConsumer.java b/core/java/android/view/InsetsSourceConsumer.java index fd1c3b82ca2c..bc50dbe311b9 100644 --- a/core/java/android/view/InsetsSourceConsumer.java +++ b/core/java/android/view/InsetsSourceConsumer.java @@ -81,6 +81,11 @@ public class InsetsSourceConsumer { private final Supplier<Transaction> mTransactionSupplier; private @Nullable InsetsSourceControl mSourceControl; private boolean mHasWindowFocus; + + /** + * Whether the view has focus returned by {@link #onWindowFocusGained(boolean)}. + */ + private boolean mHasViewFocusWhenWindowFocusGain; private Rect mPendingFrame; private Rect mPendingVisibleFrame; @@ -223,8 +228,9 @@ public class InsetsSourceConsumer { /** * Called when current window gains focus */ - public void onWindowFocusGained() { + public void onWindowFocusGained(boolean hasViewFocus) { mHasWindowFocus = true; + mHasViewFocusWhenWindowFocusGain = hasViewFocus; } /** @@ -238,6 +244,10 @@ public class InsetsSourceConsumer { return mHasWindowFocus; } + boolean hasViewFocusWhenWindowFocusGain() { + return mHasViewFocusWhenWindowFocusGain; + } + boolean applyLocalVisibilityOverride() { final InsetsSource source = mState.peekSource(mType); final boolean isVisible = source != null ? source.isVisible() : getDefaultVisibility(mType); diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index e4fb61107c4a..a56f6b7e0f59 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -3354,8 +3354,9 @@ public final class ViewRootImpl implements ViewParent, } // TODO (b/131181940): Make sure this doesn't leak Activity with mActivityConfigCallback // config changes. + final View focusedView = mView != null ? mView.findFocus() : null; if (hasWindowFocus) { - mInsetsController.onWindowFocusGained(); + mInsetsController.onWindowFocusGained(focusedView != null /* hasViewFocused */); } else { mInsetsController.onWindowFocusLost(); } @@ -3404,8 +3405,7 @@ public final class ViewRootImpl implements ViewParent, // Note: must be done after the focus change callbacks, // so all of the view state is set up correctly. - mImeFocusController.onPostWindowFocus(mView != null ? mView.findFocus() : null, - hasWindowFocus, mWindowAttributes); + mImeFocusController.onPostWindowFocus(focusedView, hasWindowFocus, mWindowAttributes); if (hasWindowFocus) { // Clear the forward bit. We can just do this directly, since |
