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();
}
}