From 7dc863784642026abab5374081c89608129afb3f Mon Sep 17 00:00:00 2001 From: Miranda Kephart Date: Fri, 13 May 2022 13:41:57 -0400 Subject: [PATCH] Add share button to clipboard overlay Available for text and images. Bug: 232521405 Fix: 232521405 Test: manual Change-Id: I4f8d41dc36641057b006deed330d14fdb3e3380c --- .../SystemUI/res/layout/clipboard_overlay.xml | 2 ++ .../ClipboardOverlayController.java | 30 ++++++++++++++++++- .../ClipboardOverlayEvent.java | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) 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"> + { @@ -323,9 +327,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); @@ -386,6 +392,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); @@ -461,6 +473,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); @@ -721,6 +748,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")