Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 055fdafb authored by Miranda Kephart's avatar Miranda Kephart Committed by Android (Google) Code Review
Browse files

Merge changes I9af6c8be,I12703bc3 into main

* changes:
  Use live region to announce clipboard status
  Remove rolled-out clipboard_image_timeout flag
parents df3fd3c7 0d41dcc6
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -730,6 +730,16 @@ flag {
    bug: "368308908"
}

flag {
    name: "clipboard_announce_live_region"
    namespace: "systemui"
    description: "Use live region for clipboard status announcement"
    bug: "378856296"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "screen_reactions"
    namespace: "systemui"
@@ -757,16 +767,6 @@ flag {
    }
}

flag {
    name: "clipboard_image_timeout"
    namespace: "systemui"
    description: "Wait for clipboard image to load before showing UI"
    bug: "359864629"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "clipboard_use_description_mimetype"
    namespace: "systemui"
+7 −0
Original line number Diff line number Diff line
@@ -24,6 +24,13 @@
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/clipboard_overlay_window_name">
    <View
        android:id="@+id/clipboard_announcement_live_region"
        android:layout_width="1dp"
        android:layout_height="1dp"
        android:accessibilityLiveRegion="polite"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>
    <!-- Min edge spacing guideline off of which the preview and actions can be anchored (without
         this we'd need to express margins as the sum of two different dimens). -->
    <androidx.constraintlayout.widget.Guideline
+38 −88
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.systemui.clipboardoverlay;
import static android.content.Intent.ACTION_CLOSE_SYSTEM_DIALOGS;

import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.CLIPBOARD_OVERLAY_SHOW_ACTIONS;
import static com.android.systemui.Flags.clipboardImageTimeout;
import static com.android.systemui.Flags.clipboardAnnounceLiveRegion;
import static com.android.systemui.Flags.clipboardSharedTransitions;
import static com.android.systemui.Flags.showClipboardIndication;
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_ACTION_SHOWN;
@@ -301,7 +301,6 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
        if (showClipboardIndication()) {
            mClipboardIndicationProvider.getIndicationText(mIndicationCallback);
        }
        if (clipboardImageTimeout()) {
        if (shouldAnimate) {
            reset();
            mClipboardLogger.setClipSource(mClipboardModel.getSource());
@@ -309,35 +308,28 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
                mClipboardLogger.logUnguarded(CLIPBOARD_OVERLAY_SHOWN_MINIMIZED);
                mIsMinimized = true;
                mView.setMinimized(true);
                if (clipboardAnnounceLiveRegion()) {
                    animateInWithAnnouncement(mClipboardModel.getType());
                } else {
                    animateIn();
                }
            } else {
                mClipboardLogger.logUnguarded(CLIPBOARD_OVERLAY_SHOWN_EXPANDED);
                    setExpandedView(this::animateIn);
                }
                mWindow.withWindowAttached(() -> mView.announceForAccessibility(
                        getAccessibilityAnnouncement(mClipboardModel.getType())));
            } else if (!mIsMinimized) {
                setExpandedView(() -> {
                });
            }
        } else {
            if (shouldAnimate) {
                reset();
                mClipboardLogger.setClipSource(mClipboardModel.getSource());
                if (shouldShowMinimized(mWindow.getWindowInsets())) {
                    mClipboardLogger.logUnguarded(CLIPBOARD_OVERLAY_SHOWN_MINIMIZED);
                    mIsMinimized = true;
                    mView.setMinimized(true);
                    if (clipboardAnnounceLiveRegion()) {
                        animateInWithAnnouncement(mClipboardModel.getType());
                    } else {
                    mClipboardLogger.logUnguarded(CLIPBOARD_OVERLAY_SHOWN_EXPANDED);
                    setExpandedView();
                }
                        animateIn();
                    }
                });
            }
            if (!clipboardAnnounceLiveRegion()) {
                mWindow.withWindowAttached(() -> mView.announceForAccessibility(
                        getAccessibilityAnnouncement(mClipboardModel.getType())));
            } else if (!mIsMinimized) {
                setExpandedView();
            }
        } else if (!mIsMinimized) {
            setExpandedView(() -> {
            });
        }
        if (mClipboardModel.isRemote()) {
            mTimeoutHandler.cancelTimeout();
@@ -400,54 +392,6 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
        }
    }

    private void setExpandedView() {
        final ClipboardModel model = mClipboardModel;
        mView.setMinimized(false);
        switch (model.getType()) {
            case TEXT:
                if (model.isRemote() || DeviceConfig.getBoolean(
                        DeviceConfig.NAMESPACE_SYSTEMUI, CLIPBOARD_OVERLAY_SHOW_ACTIONS, false)) {
                    if (model.getTextLinks() != null) {
                        classifyText(model);
                    }
                }
                if (model.isSensitive()) {
                    mView.showTextPreview(mContext.getString(R.string.clipboard_asterisks), true);
                } else {
                    mView.showTextPreview(model.getText().toString(), false);
                }
                mView.setEditAccessibilityAction(true);
                mOnPreviewTapped = this::editText;
                break;
            case IMAGE:
                mBgExecutor.execute(() -> {
                    if (model.isSensitive() || model.loadThumbnail(mContext) != null) {
                        mView.post(() -> {
                            mView.showImagePreview(
                                    model.isSensitive() ? null : model.loadThumbnail(mContext));
                            mView.setEditAccessibilityAction(true);
                        });
                        mOnPreviewTapped = () -> editImage(model.getUri());
                    } else {
                        // image loading failed
                        mView.post(mView::showDefaultTextPreview);
                    }
                });
                break;
            case URI:
            case OTHER:
                mView.showDefaultTextPreview();
                break;
        }
        if (!model.isRemote()) {
            maybeShowRemoteCopy(model.getClipData());
        }
        if (model.getType() != ClipboardModel.Type.OTHER) {
            mOnShareTapped = () -> shareContent(model.getClipData());
            mView.showShareChip();
        }
    }

    private boolean shouldShowMinimized(WindowInsets insets) {
        return insets.getInsets(WindowInsets.Type.ime()).bottom > 0;
    }
@@ -465,12 +409,7 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
                    mClipboardLogger.logUnguarded(CLIPBOARD_OVERLAY_EXPANDED_FROM_MINIMIZED);
                    mIsMinimized = false;
                }
                if (clipboardImageTimeout()) {
                setExpandedView(() -> animateIn());
                } else {
                    setExpandedView();
                    animateIn();
                }
            }
        });
        mEnterAnimator.start();
@@ -536,8 +475,7 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
                mInputMonitor.getInputChannel(), Looper.getMainLooper()) {
            @Override
            public void onInputEvent(InputEvent event) {
                if ((!clipboardImageTimeout() || mShowingUi)
                        && event instanceof MotionEvent) {
                if (mShowingUi && event instanceof MotionEvent) {
                    MotionEvent motionEvent = (MotionEvent) event;
                    if (motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN) {
                        if (!mView.isInTouchRegion(
@@ -576,9 +514,20 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
        animateOut();
    }

    private void animateIn() {
    private void animateInWithAnnouncement(ClipboardModel.Type type) {
        Animator entrance = animateIn();
        entrance.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                mView.announce(getAccessibilityAnnouncement(type));
            }
        });
    }

    private Animator animateIn() {
        if (mEnterAnimator != null && mEnterAnimator.isRunning()) {
            return;
            return mEnterAnimator;
        }
        mEnterAnimator = mView.getEnterAnimation();
        mEnterAnimator.addListener(new AnimatorListenerAdapter() {
@@ -601,6 +550,7 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
            }
        });
        mEnterAnimator.start();
        return mEnterAnimator;
    }

    private void finish(ClipboardOverlayEvent event) {
+7 −0
Original line number Diff line number Diff line
@@ -223,6 +223,13 @@ public class ClipboardOverlayView extends DraggableConstraintLayout {
        mIndicationContainer.setVisibility(visibility);
    }

    void announce(CharSequence text) {
        View announce = findViewById(R.id.clipboard_announcement_live_region);
        // clear the description to announce even if successive copies are the same type
        announce.setContentDescription("");
        announce.setContentDescription(text);
    }

    void setMinimized(boolean minimized) {
        if (minimized) {
            mMinimizedPreview.setVisibility(View.VISIBLE);
+0 −3
Original line number Diff line number Diff line
@@ -234,9 +234,6 @@ object Flags {

    // 1700 - clipboard
    @JvmField val CLIPBOARD_REMOTE_BEHAVIOR = releasedFlag("clipboard_remote_behavior")
    // TODO(b/278714186) Tracking Bug
    @JvmField
    val CLIPBOARD_IMAGE_TIMEOUT = unreleasedFlag("clipboard_image_timeout", teamfood = true)

    // 1900
    @JvmField val NOTE_TASKS = releasedFlag("keycode_flag")
Loading