diff --git a/src/com/android/launcher3/anim/KeyboardInsetAnimationCallback.java b/src/com/android/launcher3/anim/KeyboardInsetAnimationCallback.java index 3863dc1962..b911928e36 100644 --- a/src/com/android/launcher3/anim/KeyboardInsetAnimationCallback.java +++ b/src/com/android/launcher3/anim/KeyboardInsetAnimationCallback.java @@ -27,7 +27,16 @@ import com.android.launcher3.Utilities; import java.util.List; /** - * Callback that animates views above the IME + * Callback that animates views above the IME. + *

+ * The expected stages of a keyboard transition are: + *

+ *

*/ @RequiresApi(api = Build.VERSION_CODES.R) public class KeyboardInsetAnimationCallback extends WindowInsetsAnimation.Callback { @@ -46,6 +55,18 @@ public class KeyboardInsetAnimationCallback extends WindowInsetsAnimation.Callba mInitialTranslation = mView.getTranslationY(); } + @Override + public WindowInsetsAnimation.Bounds onStart(WindowInsetsAnimation animation, + WindowInsetsAnimation.Bounds bounds) { + // Final insets have temporarily been applied, so store the current translation as final. + mTerminalTranslation = mView.getTranslationY(); + // Reset the translation in case the view is drawn before onProgress gets called. + mView.setTranslationY(mInitialTranslation); + if (mView instanceof KeyboardInsetListener) { + ((KeyboardInsetListener) mView).onTranslationStart(); + } + return super.onStart(animation, bounds); + } @Override public WindowInsets onProgress(WindowInsets windowInsets, List list) { @@ -72,19 +93,8 @@ public class KeyboardInsetAnimationCallback extends WindowInsetsAnimation.Callba return windowInsets; } - @Override - public WindowInsetsAnimation.Bounds onStart(WindowInsetsAnimation animation, - WindowInsetsAnimation.Bounds bounds) { - mTerminalTranslation = mView.getTranslationY(); - if (mView instanceof KeyboardInsetListener) { - ((KeyboardInsetListener) mView).onTranslationStart(); - } - return super.onStart(animation, bounds); - } - @Override public void onEnd(WindowInsetsAnimation animation) { - mView.setTranslationY(mTerminalTranslation); if (mView instanceof KeyboardInsetListener) { ((KeyboardInsetListener) mView).onTranslationEnd(); }