Merge "Fix some jank issues with the clipboard" into tm-dev am: dc2426af92

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18627759

Change-Id: I51578f0ec284ea39797ef256edd2dbf951116eb3
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Matt Casey
2022-06-02 20:53:49 +00:00
committed by Automerger Merge Worker
2 changed files with 18 additions and 15 deletions

View File

@@ -51,7 +51,6 @@ import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
@@ -100,7 +99,6 @@ import android.widget.TextView;
import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.PhoneWindow; import com.android.internal.policy.PhoneWindow;
import com.android.settingslib.applications.InterestingConfigChanges;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.broadcast.BroadcastSender;
@@ -166,10 +164,9 @@ public class ClipboardOverlayController {
private boolean mBlockAttach = false; private boolean mBlockAttach = false;
private Animator mExitAnimator; 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, public ClipboardOverlayController(Context context,
BroadcastDispatcher broadcastDispatcher, BroadcastDispatcher broadcastDispatcher,
@@ -255,6 +252,7 @@ public class ClipboardOverlayController {
mRemoteCopyChip.setIcon( mRemoteCopyChip.setIcon(
Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true); Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true);
mShareChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_share), true); mShareChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_share), true);
mOrientation = mContext.getResources().getConfiguration().orientation;
attachWindow(); attachWindow();
withWindowAttached(() -> { withWindowAttached(() -> {
@@ -266,9 +264,10 @@ public class ClipboardOverlayController {
@Override @Override
public void onConfigurationChanged(Configuration overrideConfig, public void onConfigurationChanged(Configuration overrideConfig,
int newDisplayId) { int newDisplayId) {
if (mConfigChanges.applyNewConfig(mContext.getResources())) { if (mContext.getResources().getConfiguration().orientation
updateInsets( != mOrientation) {
mWindowManager.getCurrentWindowMetrics().getWindowInsets()); mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER);
hideImmediate();
} }
} }
@@ -366,7 +365,7 @@ public class ClipboardOverlayController {
Intent remoteCopyIntent = getRemoteCopyIntent(clipData); Intent remoteCopyIntent = getRemoteCopyIntent(clipData);
// Only show remote copy if it's available. // Only show remote copy if it's available.
PackageManager packageManager = mContext.getPackageManager(); PackageManager packageManager = mContext.getPackageManager();
if (remoteCopyIntent != null && packageManager.resolveActivity( if (packageManager.resolveActivity(
remoteCopyIntent, PackageManager.ResolveInfoFlags.of(0)) != null) { remoteCopyIntent, PackageManager.ResolveInfoFlags.of(0)) != null) {
mRemoteCopyChip.setVisibility(View.VISIBLE); mRemoteCopyChip.setVisibility(View.VISIBLE);
mRemoteCopyChip.setOnClickListener((v) -> { mRemoteCopyChip.setOnClickListener((v) -> {
@@ -381,7 +380,9 @@ public class ClipboardOverlayController {
withWindowAttached(() -> { withWindowAttached(() -> {
updateInsets( updateInsets(
mWindowManager.getCurrentWindowMetrics().getWindowInsets()); mWindowManager.getCurrentWindowMetrics().getWindowInsets());
mView.post(this::animateIn); if (mEnterAnimator == null || !mEnterAnimator.isRunning()) {
mView.post(this::animateIn);
}
mView.announceForAccessibility(accessibilityAnnouncement); mView.announceForAccessibility(accessibilityAnnouncement);
}); });
mTimeoutHandler.resetTimeout(); mTimeoutHandler.resetTimeout();
@@ -652,7 +653,8 @@ public class ClipboardOverlayController {
if (mAccessibilityManager.isEnabled()) { if (mAccessibilityManager.isEnabled()) {
mDismissButton.setVisibility(View.VISIBLE); mDismissButton.setVisibility(View.VISIBLE);
} }
getEnterAnimation().start(); mEnterAnimator = getEnterAnimation();
mEnterAnimator.start();
} }
private void animateOut() { private void animateOut() {

View File

@@ -90,10 +90,12 @@ public class EditTextActivity extends Activity
@Override // ClipboardManager.OnPrimaryClipChangedListener @Override // ClipboardManager.OnPrimaryClipChangedListener
public void onPrimaryClipChanged() { public void onPrimaryClipChanged() {
hideImeAndFinish(); hideIme();
finish();
} }
private void saveToClipboard() { private void saveToClipboard() {
hideIme();
Editable editedText = mEditText.getText(); Editable editedText = mEditText.getText();
editedText.clearSpans(); editedText.clearSpans();
ClipData clip = ClipData.newPlainText("text", editedText); ClipData clip = ClipData.newPlainText("text", editedText);
@@ -101,7 +103,7 @@ public class EditTextActivity extends Activity
extras.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, mSensitive); extras.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, mSensitive);
clip.getDescription().setExtras(extras); clip.getDescription().setExtras(extras);
mClipboardManager.setPrimaryClip(clip); mClipboardManager.setPrimaryClip(clip);
hideImeAndFinish(); finish();
} }
private void share() { private void share() {
@@ -114,9 +116,8 @@ public class EditTextActivity extends Activity
startActivity(shareIntent); startActivity(shareIntent);
} }
private void hideImeAndFinish() { private void hideIme() {
InputMethodManager imm = getSystemService(InputMethodManager.class); InputMethodManager imm = getSystemService(InputMethodManager.class);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
finish();
} }
} }