summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2020-05-05 08:23:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-05-05 08:23:16 +0000
commit8ebf215f50086ccaa93af7ffd29e970e36493b55 (patch)
treec5f817ac71e27c521e6e2708d1604bc17453ed18
parentc5fe7255cba55bd8ca87e5e4a402795b298a3ae6 (diff)
parentd1cb4404fe7e6751f29c9a40e0c50a815a7e6a78 (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.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java10
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