From c4e2ae2171cf6a3b0e9f89037a2c479b0e40a7db Mon Sep 17 00:00:00 2001 From: Miranda Kephart Date: Tue, 12 Jul 2022 11:33:50 -0400 Subject: [PATCH] Make clipboard UI listen to keyboard visibility changes Bug: 236885397 Fix: 236885397 Test: manual Change-Id: I980095d3e785cd6d28f47185d8e38d7653a7dbc3 --- .../ClipboardOverlayController.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java index aa67ecd30627c..173e59c87d7e4 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java @@ -169,6 +169,7 @@ public class ClipboardOverlayController { private Animator mExitAnimator; private Animator mEnterAnimator; private final int mOrientation; + private boolean mKeyboardVisible; public ClipboardOverlayController(Context context, @@ -261,8 +262,22 @@ public class ClipboardOverlayController { attachWindow(); withWindowAttached(() -> { mWindow.setContentView(mView); - updateInsets(mWindowManager.getCurrentWindowMetrics().getWindowInsets()); - mView.requestLayout(); + WindowInsets insets = mWindowManager.getCurrentWindowMetrics().getWindowInsets(); + mKeyboardVisible = insets.isVisible(WindowInsets.Type.ime()); + updateInsets(insets); + mWindow.peekDecorView().getViewTreeObserver().addOnGlobalLayoutListener( + new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + WindowInsets insets = + mWindowManager.getCurrentWindowMetrics().getWindowInsets(); + boolean keyboardVisible = insets.isVisible(WindowInsets.Type.ime()); + if (keyboardVisible != mKeyboardVisible) { + mKeyboardVisible = keyboardVisible; + updateInsets(insets); + } + } + }); mWindow.peekDecorView().getViewRootImpl().setActivityConfigCallback( new ViewRootImpl.ActivityConfigCallback() { @Override @@ -384,8 +399,6 @@ public class ClipboardOverlayController { mRemoteCopyChip.setVisibility(View.GONE); } withWindowAttached(() -> { - updateInsets( - mWindowManager.getCurrentWindowMetrics().getWindowInsets()); if (mEnterAnimator == null || !mEnterAnimator.isRunning()) { mView.post(this::animateIn); }