diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 5dd1b09b06a2a..490a3f53fd6a7 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -788,6 +788,7 @@ android:theme="@style/EditTextActivity" android:exported="false" android:excludeFromRecents="true" + android:label="@string/clipboard_editor" /> + android:layout_height="match_parent" + android:contentDescription="@string/clipboard_overlay_window_name"> Image copied Content copied + + Clipboard Editor + + Clipboard + + Image preview + + edit Add diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java index eab374508913a..aa67ecd30627c 100644 --- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java @@ -97,6 +97,9 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.core.view.ViewCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; + import com.android.internal.logging.UiEventLogger; import com.android.internal.policy.PhoneWindow; import com.android.systemui.R; @@ -218,6 +221,7 @@ public class ClipboardOverlayController { mRemoteCopyChip.setAlpha(1); mDismissButton = requireNonNull(mView.findViewById(R.id.dismiss_button)); + mShareChip.setContentDescription(mContext.getString(com.android.internal.R.string.share)); mView.setCallbacks(new DraggableConstraintLayout.SwipeDismissCallbacks() { @Override public void onInteraction() { @@ -367,6 +371,8 @@ public class ClipboardOverlayController { PackageManager packageManager = mContext.getPackageManager(); if (packageManager.resolveActivity( remoteCopyIntent, PackageManager.ResolveInfoFlags.of(0)) != null) { + mRemoteCopyChip.setContentDescription( + mContext.getString(R.string.clipboard_send_nearby_description)); mRemoteCopyChip.setVisibility(View.VISIBLE); mRemoteCopyChip.setOnClickListener((v) -> { mUiEventLogger.log(CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED); @@ -581,6 +587,7 @@ public class ClipboardOverlayController { TextView textView = hidden ? mHiddenPreview : mTextPreview; showTextPreview(text, textView); View.OnClickListener listener = v -> editText(); + setAccessibilityActionToEdit(textView); if (DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI, CLIPBOARD_OVERLAY_SHOW_EDIT_BUTTON, false)) { mEditChip.setVisibility(View.VISIBLE); @@ -602,6 +609,7 @@ public class ClipboardOverlayController { showSinglePreview(mHiddenPreview); if (isEditableImage) { mHiddenPreview.setOnClickListener(listener); + setAccessibilityActionToEdit(mHiddenPreview); } } else if (isEditableImage) { // if the MIMEtype is image, try to load try { @@ -612,6 +620,7 @@ public class ClipboardOverlayController { showSinglePreview(mImagePreview); mImagePreview.setImageBitmap(thumbnail); mImagePreview.setOnClickListener(listener); + setAccessibilityActionToEdit(mImagePreview); } catch (IOException e) { Log.e(TAG, "Thumbnail loading failed", e); showTextPreview( @@ -635,6 +644,12 @@ public class ClipboardOverlayController { return isEditableImage; } + private void setAccessibilityActionToEdit(View view) { + ViewCompat.replaceAccessibilityAction(view, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, + mContext.getString(R.string.clipboard_edit), null); + } + private Intent getRemoteCopyIntent(ClipData clipData) { Intent nearbyIntent = new Intent(REMOTE_COPY_ACTION); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java b/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java index f3c87d08e381c..950806d89422c 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/DraggableConstraintLayout.java @@ -117,6 +117,14 @@ public class DraggableConstraintLayout extends ConstraintLayout mCallbacks = callbacks; } + @Override + public boolean onInterceptHoverEvent(MotionEvent event) { + if (mCallbacks != null) { + mCallbacks.onInteraction(); + } + return super.onInterceptHoverEvent(event); + } + @Override // View protected void onFinishInflate() { mActionsContainer = findViewById(R.id.actions_container);