Fix some jank issues with the clipboard

- close the IME before copying to the clipboard when pressing the
	edit activity done button
- don't animate in if animation is already running
- close on orientation change

Bug: 231612112
Bug: 232429606
Bug: 232493077
Fix: 232429606
Fix: 232493077
Test: manual
Change-Id: I858af39aa100dd84cea521afc76d3c4e772e2ee2
diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
index 3714c15..eab3745 100644
--- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
@@ -51,7 +51,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -100,7 +99,6 @@
 
 import com.android.internal.logging.UiEventLogger;
 import com.android.internal.policy.PhoneWindow;
-import com.android.settingslib.applications.InterestingConfigChanges;
 import com.android.systemui.R;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.broadcast.BroadcastSender;
@@ -166,10 +164,9 @@
 
     private boolean mBlockAttach = false;
     private Animator mExitAnimator;
+    private Animator mEnterAnimator;
+    private final int mOrientation;
 
-    /** Tracks config changes that require updating insets */
-    private final InterestingConfigChanges mConfigChanges = new InterestingConfigChanges(
-            ActivityInfo.CONFIG_KEYBOARD_HIDDEN);
 
     public ClipboardOverlayController(Context context,
             BroadcastDispatcher broadcastDispatcher,
@@ -255,6 +252,7 @@
         mRemoteCopyChip.setIcon(
                 Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true);
         mShareChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_share), true);
+        mOrientation = mContext.getResources().getConfiguration().orientation;
 
         attachWindow();
         withWindowAttached(() -> {
@@ -266,9 +264,10 @@
                         @Override
                         public void onConfigurationChanged(Configuration overrideConfig,
                                 int newDisplayId) {
-                            if (mConfigChanges.applyNewConfig(mContext.getResources())) {
-                                updateInsets(
-                                        mWindowManager.getCurrentWindowMetrics().getWindowInsets());
+                            if (mContext.getResources().getConfiguration().orientation
+                                    != mOrientation) {
+                                mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER);
+                                hideImmediate();
                             }
                         }
 
@@ -366,7 +365,7 @@
         Intent remoteCopyIntent = getRemoteCopyIntent(clipData);
         // Only show remote copy if it's available.
         PackageManager packageManager = mContext.getPackageManager();
-        if (remoteCopyIntent != null && packageManager.resolveActivity(
+        if (packageManager.resolveActivity(
                 remoteCopyIntent, PackageManager.ResolveInfoFlags.of(0)) != null) {
             mRemoteCopyChip.setVisibility(View.VISIBLE);
             mRemoteCopyChip.setOnClickListener((v) -> {
@@ -381,7 +380,9 @@
         withWindowAttached(() -> {
             updateInsets(
                     mWindowManager.getCurrentWindowMetrics().getWindowInsets());
-            mView.post(this::animateIn);
+            if (mEnterAnimator == null || !mEnterAnimator.isRunning()) {
+                mView.post(this::animateIn);
+            }
             mView.announceForAccessibility(accessibilityAnnouncement);
         });
         mTimeoutHandler.resetTimeout();
@@ -652,7 +653,8 @@
         if (mAccessibilityManager.isEnabled()) {
             mDismissButton.setVisibility(View.VISIBLE);
         }
-        getEnterAnimation().start();
+        mEnterAnimator = getEnterAnimation();
+        mEnterAnimator.start();
     }
 
     private void animateOut() {
diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java
index 570d11b..c68a867 100644
--- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java
@@ -90,10 +90,12 @@
 
     @Override // ClipboardManager.OnPrimaryClipChangedListener
     public void onPrimaryClipChanged() {
-        hideImeAndFinish();
+        hideIme();
+        finish();
     }
 
     private void saveToClipboard() {
+        hideIme();
         Editable editedText = mEditText.getText();
         editedText.clearSpans();
         ClipData clip = ClipData.newPlainText("text", editedText);
@@ -101,7 +103,7 @@
         extras.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, mSensitive);
         clip.getDescription().setExtras(extras);
         mClipboardManager.setPrimaryClip(clip);
-        hideImeAndFinish();
+        finish();
     }
 
     private void share() {
@@ -114,9 +116,8 @@
         startActivity(shareIntent);
     }
 
-    private void hideImeAndFinish() {
+    private void hideIme() {
         InputMethodManager imm = getSystemService(InputMethodManager.class);
         imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
-        finish();
     }
 }