diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index f35f5dd0c3aed..2e6a58f7f5daa 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -301,6 +301,7 @@ + diff --git a/packages/SystemUI/res/layout/clipboard_overlay.xml b/packages/SystemUI/res/layout/clipboard_overlay.xml index 2a3761e4ca056..7e31909613ee8 100644 --- a/packages/SystemUI/res/layout/clipboard_overlay.xml +++ b/packages/SystemUI/res/layout/clipboard_overlay.xml @@ -17,6 +17,7 @@ @@ -50,7 +51,8 @@ + android:layout_height="wrap_content" + android:animateLayoutChanges="true"> { // Session is complete, free memory until it's needed again. mClipboardOverlayController = null; diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java index b6bcb871ff183..12759f489a267 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java @@ -182,6 +182,7 @@ public class ClipboardOverlayController { withWindowAttached(() -> { mWindow.setContentView(mView); updateInsets(mWindowManager.getCurrentWindowMetrics().getWindowInsets()); + mView.requestLayout(); mView.post(this::animateIn); }); @@ -213,7 +214,7 @@ public class ClipboardOverlayController { mContext.sendBroadcast(new Intent(COPY_OVERLAY_ACTION), SELF_PERMISSION); } - void setClipData(ClipData clipData) { + void setClipData(ClipData clipData, String clipSource) { reset(); if (clipData == null || clipData.getItemCount() == 0) { showTextPreview(mContext.getResources().getString( @@ -221,7 +222,7 @@ public class ClipboardOverlayController { } else if (!TextUtils.isEmpty(clipData.getItemAt(0).getText())) { ClipData.Item item = clipData.getItemAt(0); if (item.getTextLinks() != null) { - AsyncTask.execute(() -> classifyText(clipData.getItemAt(0))); + AsyncTask.execute(() -> classifyText(clipData.getItemAt(0), clipSource)); } showEditableText(item.getText()); } else if (clipData.getItemAt(0).getUri() != null) { @@ -238,7 +239,7 @@ public class ClipboardOverlayController { mOnSessionCompleteListener = runnable; } - private void classifyText(ClipData.Item item) { + private void classifyText(ClipData.Item item, String source) { ArrayList actions = new ArrayList<>(); for (TextLinks.TextLink link : item.getTextLinks().getLinks()) { TextClassification classification = mTextClassifier.classifyText( @@ -246,14 +247,14 @@ public class ClipboardOverlayController { actions.addAll(classification.getActions()); } mView.post(() -> { - for (ScreenshotActionChip chip : mActionChips) { - mActionContainer.removeView(chip); - } - mActionChips.clear(); + resetActionChips(); for (RemoteAction action : actions) { - ScreenshotActionChip chip = constructActionChip(action); - mActionContainer.addView(chip); - mActionChips.add(chip); + Intent targetIntent = action.getActionIntent().getIntent(); + if (!TextUtils.equals(source, targetIntent.getComponent().getPackageName())) { + ScreenshotActionChip chip = constructActionChip(action); + mActionContainer.addView(chip); + mActionChips.add(chip); + } } }); } @@ -451,13 +452,17 @@ public class ClipboardOverlayController { } } - private void reset() { - mView.setTranslationX(0); - mView.setAlpha(0); + private void resetActionChips() { for (ScreenshotActionChip chip : mActionChips) { mActionContainer.removeView(chip); } mActionChips.clear(); + } + + private void reset() { + mView.setTranslationX(0); + mView.setAlpha(0); + resetActionChips(); mTimeoutHandler.cancelTimeout(); }