Loading packages/SystemUI/res/layout/clipboard_overlay.xml +2 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:animateLayoutChanges="true"> <include layout="@layout/overlay_action_chip" android:id="@+id/share_chip"/> <include layout="@layout/overlay_action_chip" android:id="@+id/remote_copy_chip"/> <include layout="@layout/overlay_action_chip" Loading packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +29 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.CLIPBO import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_ACTION_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_EDIT_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SHARE_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SWIPE_DISMISSED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TIMED_OUT; Loading Loading @@ -141,6 +142,7 @@ public class ClipboardOverlayController { private final TextView mHiddenImagePreview; private final View mPreviewBorder; private final OverlayActionChip mEditChip; private final OverlayActionChip mShareChip; private final OverlayActionChip mRemoteCopyChip; private final View mActionContainerBackground; private final View mDismissButton; Loading Loading @@ -205,6 +207,7 @@ public class ClipboardOverlayController { mHiddenImagePreview = requireNonNull(mView.findViewById(R.id.hidden_image_preview)); mPreviewBorder = requireNonNull(mView.findViewById(R.id.preview_border)); mEditChip = requireNonNull(mView.findViewById(R.id.edit_chip)); mShareChip = requireNonNull(mView.findViewById(R.id.share_chip)); mRemoteCopyChip = requireNonNull(mView.findViewById(R.id.remote_copy_chip)); mDismissButton = requireNonNull(mView.findViewById(R.id.dismiss_button)); Loading Loading @@ -238,6 +241,7 @@ public class ClipboardOverlayController { mEditChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_edit), true); mRemoteCopyChip.setIcon( Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true); mShareChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_share), true); attachWindow(); withWindowAttached(() -> { Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -738,6 +765,7 @@ public class ClipboardOverlayController { mView.setTranslationX(0); mView.setAlpha(0); mActionContainerBackground.setVisibility(View.GONE); mShareChip.setVisibility(View.GONE); resetActionChips(); mTimeoutHandler.cancelTimeout(); } Loading packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayEvent.java +2 −0 Original line number Diff line number Diff line Loading @@ -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") Loading Loading
packages/SystemUI/res/layout/clipboard_overlay.xml +2 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:animateLayoutChanges="true"> <include layout="@layout/overlay_action_chip" android:id="@+id/share_chip"/> <include layout="@layout/overlay_action_chip" android:id="@+id/remote_copy_chip"/> <include layout="@layout/overlay_action_chip" Loading
packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +29 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.CLIPBO import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_ACTION_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_EDIT_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SHARE_TAPPED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SWIPE_DISMISSED; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TIMED_OUT; Loading Loading @@ -141,6 +142,7 @@ public class ClipboardOverlayController { private final TextView mHiddenImagePreview; private final View mPreviewBorder; private final OverlayActionChip mEditChip; private final OverlayActionChip mShareChip; private final OverlayActionChip mRemoteCopyChip; private final View mActionContainerBackground; private final View mDismissButton; Loading Loading @@ -205,6 +207,7 @@ public class ClipboardOverlayController { mHiddenImagePreview = requireNonNull(mView.findViewById(R.id.hidden_image_preview)); mPreviewBorder = requireNonNull(mView.findViewById(R.id.preview_border)); mEditChip = requireNonNull(mView.findViewById(R.id.edit_chip)); mShareChip = requireNonNull(mView.findViewById(R.id.share_chip)); mRemoteCopyChip = requireNonNull(mView.findViewById(R.id.remote_copy_chip)); mDismissButton = requireNonNull(mView.findViewById(R.id.dismiss_button)); Loading Loading @@ -238,6 +241,7 @@ public class ClipboardOverlayController { mEditChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_edit), true); mRemoteCopyChip.setIcon( Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true); mShareChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_share), true); attachWindow(); withWindowAttached(() -> { Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -738,6 +765,7 @@ public class ClipboardOverlayController { mView.setTranslationX(0); mView.setAlpha(0); mActionContainerBackground.setVisibility(View.GONE); mShareChip.setVisibility(View.GONE); resetActionChips(); mTimeoutHandler.cancelTimeout(); } Loading
packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayEvent.java +2 −0 Original line number Diff line number Diff line Loading @@ -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") Loading