diff --git a/packages/SystemUI/res/layout/clipboard_overlay.xml b/packages/SystemUI/res/layout/clipboard_overlay.xml index 1712b4876b31f..0a8917041d169 100644 --- a/packages/SystemUI/res/layout/clipboard_overlay.xml +++ b/packages/SystemUI/res/layout/clipboard_overlay.xml @@ -56,6 +56,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:animateLayoutChanges="true"> + { @@ -329,9 +333,11 @@ public class ClipboardOverlayController { } else { showEditableText(item.getText(), false); } + showShareChip(clipData); accessibilityAnnouncement = mContext.getString(R.string.clipboard_text_copied); } else if (clipData.getItemAt(0).getUri() != null) { if (tryShowEditableImage(clipData.getItemAt(0).getUri(), isSensitive)) { + showShareChip(clipData); accessibilityAnnouncement = mContext.getString(R.string.clipboard_image_copied); } else { accessibilityAnnouncement = mContext.getString(R.string.clipboard_content_copied); @@ -396,6 +402,12 @@ public class ClipboardOverlayController { }); } + private void showShareChip(ClipData clip) { + mShareChip.setVisibility(View.VISIBLE); + mShareChip.setAlpha(1f); + mShareChip.setOnClickListener((v) -> shareContent(clip)); + } + private OverlayActionChip constructActionChip(RemoteAction action) { OverlayActionChip chip = (OverlayActionChip) LayoutInflater.from(mContext).inflate( R.layout.overlay_action_chip, mActionContainer, false); @@ -471,6 +483,21 @@ public class ClipboardOverlayController { animateOut(); } + private void shareContent(ClipData clip) { + mUiEventLogger.log(CLIPBOARD_OVERLAY_SHARE_TAPPED); + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.putExtra(Intent.EXTRA_TEXT, clip.getItemAt(0).getText()); + shareIntent.setDataAndType( + clip.getItemAt(0).getUri(), clip.getDescription().getMimeType(0)); + shareIntent.putExtra(Intent.EXTRA_STREAM, clip.getItemAt(0).getUri()); + shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + Intent chooserIntent = Intent.createChooser(shareIntent, null) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK) + .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + mContext.startActivity(chooserIntent); + animateOut(); + } + private void showSinglePreview(View v) { mTextPreview.setVisibility(View.GONE); mImagePreview.setVisibility(View.GONE); @@ -738,6 +765,7 @@ public class ClipboardOverlayController { mView.setTranslationX(0); mView.setAlpha(0); mActionContainerBackground.setVisibility(View.GONE); + mShareChip.setVisibility(View.GONE); resetActionChips(); mTimeoutHandler.cancelTimeout(); } diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayEvent.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayEvent.java index 5604a9128261b..90739790b1c1a 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayEvent.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayEvent.java @@ -26,6 +26,8 @@ public enum ClipboardOverlayEvent implements UiEventLogger.UiEventEnum { CLIPBOARD_OVERLAY_UPDATED(950), @UiEvent(doc = "clipboard edit tapped") CLIPBOARD_OVERLAY_EDIT_TAPPED(951), + @UiEvent(doc = "clipboard share tapped") + CLIPBOARD_OVERLAY_SHARE_TAPPED(RESERVE_NEW_UI_EVENT_ID), @UiEvent(doc = "clipboard action tapped") CLIPBOARD_OVERLAY_ACTION_TAPPED(952), @UiEvent(doc = "clipboard remote copy tapped")