Merge "Add share button to clipboard overlay" into tm-dev

This commit is contained in:
Miranda Kephart
2022-05-18 15:04:42 +00:00
committed by Android (Google) Code Review
3 changed files with 33 additions and 1 deletions

View File

@@ -56,6 +56,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:animateLayoutChanges="true"> android:animateLayoutChanges="true">
<include layout="@layout/overlay_action_chip"
android:id="@+id/share_chip"/>
<include layout="@layout/overlay_action_chip" <include layout="@layout/overlay_action_chip"
android:id="@+id/remote_copy_chip"/> android:id="@+id/remote_copy_chip"/>
<include layout="@layout/overlay_action_chip" <include layout="@layout/overlay_action_chip"

View File

@@ -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_ACTION_TAPPED;
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_EDIT_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_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_SWIPE_DISMISSED;
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TIMED_OUT; import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TIMED_OUT;
@@ -141,6 +142,7 @@ public class ClipboardOverlayController {
private final TextView mHiddenImagePreview; private final TextView mHiddenImagePreview;
private final View mPreviewBorder; private final View mPreviewBorder;
private final OverlayActionChip mEditChip; private final OverlayActionChip mEditChip;
private final OverlayActionChip mShareChip;
private final OverlayActionChip mRemoteCopyChip; private final OverlayActionChip mRemoteCopyChip;
private final View mActionContainerBackground; private final View mActionContainerBackground;
private final View mDismissButton; private final View mDismissButton;
@@ -205,6 +207,7 @@ public class ClipboardOverlayController {
mHiddenImagePreview = requireNonNull(mView.findViewById(R.id.hidden_image_preview)); mHiddenImagePreview = requireNonNull(mView.findViewById(R.id.hidden_image_preview));
mPreviewBorder = requireNonNull(mView.findViewById(R.id.preview_border)); mPreviewBorder = requireNonNull(mView.findViewById(R.id.preview_border));
mEditChip = requireNonNull(mView.findViewById(R.id.edit_chip)); 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)); mRemoteCopyChip = requireNonNull(mView.findViewById(R.id.remote_copy_chip));
mDismissButton = requireNonNull(mView.findViewById(R.id.dismiss_button)); mDismissButton = requireNonNull(mView.findViewById(R.id.dismiss_button));
@@ -238,6 +241,7 @@ public class ClipboardOverlayController {
mEditChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_edit), true); mEditChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_edit), true);
mRemoteCopyChip.setIcon( mRemoteCopyChip.setIcon(
Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true); Icon.createWithResource(mContext, R.drawable.ic_baseline_devices_24), true);
mShareChip.setIcon(Icon.createWithResource(mContext, R.drawable.ic_screenshot_share), true);
attachWindow(); attachWindow();
withWindowAttached(() -> { withWindowAttached(() -> {
@@ -329,9 +333,11 @@ public class ClipboardOverlayController {
} else { } else {
showEditableText(item.getText(), false); showEditableText(item.getText(), false);
} }
showShareChip(clipData);
accessibilityAnnouncement = mContext.getString(R.string.clipboard_text_copied); accessibilityAnnouncement = mContext.getString(R.string.clipboard_text_copied);
} else if (clipData.getItemAt(0).getUri() != null) { } else if (clipData.getItemAt(0).getUri() != null) {
if (tryShowEditableImage(clipData.getItemAt(0).getUri(), isSensitive)) { if (tryShowEditableImage(clipData.getItemAt(0).getUri(), isSensitive)) {
showShareChip(clipData);
accessibilityAnnouncement = mContext.getString(R.string.clipboard_image_copied); accessibilityAnnouncement = mContext.getString(R.string.clipboard_image_copied);
} else { } else {
accessibilityAnnouncement = mContext.getString(R.string.clipboard_content_copied); 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) { private OverlayActionChip constructActionChip(RemoteAction action) {
OverlayActionChip chip = (OverlayActionChip) LayoutInflater.from(mContext).inflate( OverlayActionChip chip = (OverlayActionChip) LayoutInflater.from(mContext).inflate(
R.layout.overlay_action_chip, mActionContainer, false); R.layout.overlay_action_chip, mActionContainer, false);
@@ -471,6 +483,21 @@ public class ClipboardOverlayController {
animateOut(); 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) { private void showSinglePreview(View v) {
mTextPreview.setVisibility(View.GONE); mTextPreview.setVisibility(View.GONE);
mImagePreview.setVisibility(View.GONE); mImagePreview.setVisibility(View.GONE);
@@ -738,6 +765,7 @@ public class ClipboardOverlayController {
mView.setTranslationX(0); mView.setTranslationX(0);
mView.setAlpha(0); mView.setAlpha(0);
mActionContainerBackground.setVisibility(View.GONE); mActionContainerBackground.setVisibility(View.GONE);
mShareChip.setVisibility(View.GONE);
resetActionChips(); resetActionChips();
mTimeoutHandler.cancelTimeout(); mTimeoutHandler.cancelTimeout();
} }

View File

@@ -26,6 +26,8 @@ public enum ClipboardOverlayEvent implements UiEventLogger.UiEventEnum {
CLIPBOARD_OVERLAY_UPDATED(950), CLIPBOARD_OVERLAY_UPDATED(950),
@UiEvent(doc = "clipboard edit tapped") @UiEvent(doc = "clipboard edit tapped")
CLIPBOARD_OVERLAY_EDIT_TAPPED(951), CLIPBOARD_OVERLAY_EDIT_TAPPED(951),
@UiEvent(doc = "clipboard share tapped")
CLIPBOARD_OVERLAY_SHARE_TAPPED(RESERVE_NEW_UI_EVENT_ID),
@UiEvent(doc = "clipboard action tapped") @UiEvent(doc = "clipboard action tapped")
CLIPBOARD_OVERLAY_ACTION_TAPPED(952), CLIPBOARD_OVERLAY_ACTION_TAPPED(952),
@UiEvent(doc = "clipboard remote copy tapped") @UiEvent(doc = "clipboard remote copy tapped")