diff options
| author | 2020-05-05 08:23:16 +0000 | |
|---|---|---|
| committer | 2020-05-05 08:23:16 +0000 | |
| commit | 8ebf215f50086ccaa93af7ffd29e970e36493b55 (patch) | |
| tree | c5f817ac71e27c521e6e2708d1604bc17453ed18 | |
| parent | c5fe7255cba55bd8ca87e5e4a402795b298a3ae6 (diff) | |
| parent | d1cb4404fe7e6751f29c9a40e0c50a815a7e6a78 (diff) | |
Merge "Start IME animation if its insets update after show" into rvc-dev
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java | 16 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java | 10 |
2 files changed, 19 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java index 84de45f23b62..e67b3d715c84 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java @@ -211,14 +211,16 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, mTargetShown = imeShouldShow; if (mLastAdjustTop < 0) { mLastAdjustTop = imeShouldShow ? hiddenTop : shownTop; - } else { - // Check for an "interruption" of an existing animation. In this case, we need to - // fake-flip the last-known state direction so that the animation completes in the - // other direction. + } else if (mLastAdjustTop != (imeShouldShow ? mShownTop : mHiddenTop)) { if (mTargetAdjusted != targetAdjusted && targetAdjusted == mAdjusted) { - if (mLastAdjustTop != (imeShouldShow ? mShownTop : mHiddenTop)) { - mAdjusted = mTargetAdjusted; - } + // Check for an "interruption" of an existing animation. In this case, we + // need to fake-flip the last-known state direction so that the animation + // completes in the other direction. + mAdjusted = mTargetAdjusted; + } else if (targetAdjusted && mTargetAdjusted && mAdjusted) { + // Already fully adjusted for IME, but IME height has changed; so, force-start + // an async animation to the new IME height. + mAdjusted = false; } } if (mPaused) { diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java index c22b718fa50f..c7e9accce093 100644 --- a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java +++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java @@ -21,6 +21,7 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.res.Configuration; import android.graphics.Point; +import android.graphics.Rect; import android.os.Handler; import android.os.RemoteException; import android.util.Slog; @@ -188,7 +189,16 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged if (mInsetsState.equals(insetsState)) { return; } + + final InsetsSource newSource = insetsState.getSource(InsetsState.ITYPE_IME); + final Rect newFrame = newSource.getFrame(); + final Rect oldFrame = mInsetsState.getSource(InsetsState.ITYPE_IME).getFrame(); + mInsetsState.set(insetsState, true /* copySources */); + if (mImeShowing && !newFrame.equals(oldFrame) && newSource.isVisible()) { + if (DEBUG) Slog.d(TAG, "insetsChanged when IME showing, restart animation"); + startAnimation(mImeShowing, true /* forceRestart */); + } } @Override |