diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/InsetsController.java | 14 | ||||
| -rw-r--r-- | core/java/android/view/InsetsSource.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/InsetsState.java | 9 |
3 files changed, 23 insertions, 9 deletions
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index ef9edc6c0741..34e29a469867 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -575,21 +575,23 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation @VisibleForTesting public boolean onStateChanged(InsetsState state) { - boolean localStateChanged = !mState.equals(state, true /* excludingCaptionInsets */) + boolean stateChanged = !mState.equals(state, true /* excludingCaptionInsets */, + false /* excludeInvisibleIme */) || !captionInsetsUnchanged(); - if (!localStateChanged && mLastDispatchedState.equals(state)) { + if (!stateChanged && mLastDispatchedState.equals(state)) { return false; } if (DEBUG) Log.d(TAG, "onStateChanged: " + state); updateState(state); + + boolean localStateChanged = !mState.equals(mLastDispatchedState, + true /* excludingCaptionInsets */, true /* excludeInvisibleIme */); mLastDispatchedState.set(state, true /* copySources */); + applyLocalVisibilityOverride(); if (localStateChanged) { - if (DEBUG) Log.d(TAG, "onStateChanged, notifyInsetsChanged"); + if (DEBUG) Log.d(TAG, "onStateChanged, notifyInsetsChanged, send state to WM: " + mState); mHost.notifyInsetsChanged(); - } - if (!mState.equals(mLastDispatchedState, true /* excludingCaptionInsets */)) { - if (DEBUG) Log.d(TAG, "onStateChanged, send state to WM: " + mState); updateRequestedState(); } return true; diff --git a/core/java/android/view/InsetsSource.java b/core/java/android/view/InsetsSource.java index b0158467a17b..15b9a9330392 100644 --- a/core/java/android/view/InsetsSource.java +++ b/core/java/android/view/InsetsSource.java @@ -191,6 +191,14 @@ public class InsetsSource implements Parcelable { @Override public boolean equals(Object o) { + return equals(o, false); + } + + /** + * @param excludeInvisibleImeFrames If {@link InsetsState#ITYPE_IME} frames should be ignored + * when IME is not visible. + */ + public boolean equals(Object o, boolean excludeInvisibleImeFrames) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; @@ -198,6 +206,7 @@ public class InsetsSource implements Parcelable { if (mType != that.mType) return false; if (mVisible != that.mVisible) return false; + if (excludeInvisibleImeFrames && !mVisible && mType == ITYPE_IME) return true; if (!Objects.equals(mVisibleFrame, that.mVisibleFrame)) return false; return mFrame.equals(that.mFrame); } diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java index 3822ee59b4aa..919a55bcebf8 100644 --- a/core/java/android/view/InsetsState.java +++ b/core/java/android/view/InsetsState.java @@ -517,7 +517,7 @@ public class InsetsState implements Parcelable { @Override public boolean equals(Object o) { - return equals(o, false); + return equals(o, false, false); } /** @@ -526,10 +526,13 @@ public class InsetsState implements Parcelable { * excluded. * @param excludingCaptionInsets {@code true} if we want to compare two InsetsState objects but * ignore the caption insets source value. + * @param excludeInvisibleImeFrames If {@link #ITYPE_IME} frames should be ignored when IME is + * not visible. * @return {@code true} if the two InsetsState objects are equal, {@code false} otherwise. */ @VisibleForTesting - public boolean equals(Object o, boolean excludingCaptionInsets) { + public boolean equals(Object o, boolean excludingCaptionInsets, + boolean excludeInvisibleImeFrames) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } @@ -560,7 +563,7 @@ public class InsetsState implements Parcelable { if (otherSource == null) { return false; } - if (!otherSource.equals(source)) { + if (!otherSource.equals(source, excludeInvisibleImeFrames)) { return false; } } |
