Merge "Handle non-image URIs and quick copies" into tm-dev

This commit is contained in:
Miranda Kephart
2022-04-20 19:26:04 +00:00
committed by Android (Google) Code Review

View File

@@ -137,7 +137,6 @@ public class ClipboardOverlayController {
private Runnable mOnSessionCompleteListener; private Runnable mOnSessionCompleteListener;
private InputMonitor mInputMonitor; private InputMonitor mInputMonitor;
private InputEventReceiver mInputEventReceiver; private InputEventReceiver mInputEventReceiver;
@@ -145,6 +144,7 @@ public class ClipboardOverlayController {
private BroadcastReceiver mScreenshotReceiver; private BroadcastReceiver mScreenshotReceiver;
private boolean mBlockAttach = false; private boolean mBlockAttach = false;
private Animator mExitAnimator;
public ClipboardOverlayController(Context context, public ClipboardOverlayController(Context context,
BroadcastDispatcher broadcastDispatcher, BroadcastDispatcher broadcastDispatcher,
@@ -200,6 +200,7 @@ public class ClipboardOverlayController {
@Override @Override
public void onSwipeDismissInitiated(Animator animator) { public void onSwipeDismissInitiated(Animator animator) {
mUiEventLogger.log(CLIPBOARD_OVERLAY_SWIPE_DISMISSED); mUiEventLogger.log(CLIPBOARD_OVERLAY_SWIPE_DISMISSED);
mExitAnimator = animator;
animator.addListener(new AnimatorListenerAdapter() { animator.addListener(new AnimatorListenerAdapter() {
@Override @Override
public void onAnimationStart(Animator animation) { public void onAnimationStart(Animator animation) {
@@ -233,7 +234,6 @@ public class ClipboardOverlayController {
mWindow.setContentView(mContainer); mWindow.setContentView(mContainer);
updateInsets(mWindowManager.getCurrentWindowMetrics().getWindowInsets()); updateInsets(mWindowManager.getCurrentWindowMetrics().getWindowInsets());
mView.requestLayout(); mView.requestLayout();
mView.post(this::animateIn);
}); });
mTimeoutHandler.setOnTimeoutRunnable(() -> { mTimeoutHandler.setOnTimeoutRunnable(() -> {
@@ -273,6 +273,9 @@ public class ClipboardOverlayController {
} }
void setClipData(ClipData clipData, String clipSource) { void setClipData(ClipData clipData, String clipSource) {
if (mExitAnimator != null && mExitAnimator.isRunning()) {
mExitAnimator.cancel();
}
reset(); reset();
if (clipData == null || clipData.getItemCount() == 0) { if (clipData == null || clipData.getItemCount() == 0) {
showTextPreview(mContext.getResources().getString( showTextPreview(mContext.getResources().getString(
@@ -305,6 +308,7 @@ public class ClipboardOverlayController {
} else { } else {
mRemoteCopyChip.setVisibility(View.GONE); mRemoteCopyChip.setVisibility(View.GONE);
} }
withWindowAttached(() -> mContainer.post(this::animateIn));
mTimeoutHandler.resetTimeout(); mTimeoutHandler.resetTimeout();
} }
@@ -411,7 +415,7 @@ public class ClipboardOverlayController {
private void showTextPreview(CharSequence text) { private void showTextPreview(CharSequence text) {
mTextPreview.setVisibility(View.VISIBLE); mTextPreview.setVisibility(View.VISIBLE);
mImagePreview.setVisibility(View.GONE); mImagePreview.setVisibility(View.GONE);
mTextPreview.setText(text); mTextPreview.setText(text.subSequence(0, Math.min(500, text.length())));
mEditChip.setVisibility(View.GONE); mEditChip.setVisibility(View.GONE);
} }
@@ -428,10 +432,6 @@ public class ClipboardOverlayController {
} }
private void showEditableImage(Uri uri) { private void showEditableImage(Uri uri) {
mTextPreview.setVisibility(View.GONE);
mImagePreview.setVisibility(View.VISIBLE);
mEditChip.setAlpha(1f);
mActionContainerBackground.setVisibility(View.VISIBLE);
ContentResolver resolver = mContext.getContentResolver(); ContentResolver resolver = mContext.getContentResolver();
try { try {
int size = mContext.getResources().getDimensionPixelSize(R.dimen.overlay_x_scale); int size = mContext.getResources().getDimensionPixelSize(R.dimen.overlay_x_scale);
@@ -441,7 +441,14 @@ public class ClipboardOverlayController {
mImagePreview.setImageBitmap(thumbnail); mImagePreview.setImageBitmap(thumbnail);
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Thumbnail loading failed", e); Log.e(TAG, "Thumbnail loading failed", e);
showTextPreview(
mContext.getResources().getString(R.string.clipboard_overlay_text_copied));
return;
} }
mTextPreview.setVisibility(View.GONE);
mImagePreview.setVisibility(View.VISIBLE);
mEditChip.setAlpha(1f);
mActionContainerBackground.setVisibility(View.VISIBLE);
View.OnClickListener listener = v -> editImage(uri); View.OnClickListener listener = v -> editImage(uri);
mEditChip.setOnClickListener(listener); mEditChip.setOnClickListener(listener);
mEditChip.setContentDescription( mEditChip.setContentDescription(
@@ -472,12 +479,23 @@ public class ClipboardOverlayController {
private void animateOut() { private void animateOut() {
Animator anim = getExitAnimation(); Animator anim = getExitAnimation();
anim.addListener(new AnimatorListenerAdapter() { anim.addListener(new AnimatorListenerAdapter() {
private boolean mCancelled;
@Override
public void onAnimationCancel(Animator animation) {
super.onAnimationCancel(animation);
mCancelled = true;
}
@Override @Override
public void onAnimationEnd(Animator animation) { public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation); super.onAnimationEnd(animation);
if (!mCancelled) {
hideImmediate(); hideImmediate();
} }
}
}); });
mExitAnimator = anim;
anim.start(); anim.start();
} }
@@ -630,6 +648,7 @@ public class ClipboardOverlayController {
private void reset() { private void reset() {
mView.setTranslationX(0); mView.setTranslationX(0);
mContainer.setAlpha(0); mContainer.setAlpha(0);
mActionContainerBackground.setVisibility(View.GONE);
resetActionChips(); resetActionChips();
mTimeoutHandler.cancelTimeout(); mTimeoutHandler.cancelTimeout();
} }