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

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

Merge "Separate callbacks for dismiss start and end" into tm-dev

parents 2348e76c f0cd5dd1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -166,7 +166,7 @@ public class ClipboardOverlayController {
        mRemoteCopyChip = requireNonNull(mView.findViewById(R.id.remote_copy_chip));
        mDismissButton = requireNonNull(mView.findViewById(R.id.dismiss_button));

        mView.setOnDismissCallback(this::hideImmediate);
        mView.setOnDismissEndCallback(this::hideImmediate);
        mView.setOnInteractionCallback(mTimeoutHandler::resetTimeout);

        mDismissButton.setOnClickListener(view -> animateOut());
+25 −6
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.clipboardoverlay;

import android.animation.Animator;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
@@ -28,13 +29,16 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import com.android.systemui.R;
import com.android.systemui.screenshot.SwipeDismissHandler;

import java.util.function.Consumer;

/**
 * ConstraintLayout that is draggable when touched in a specific region
 */
public class DraggableConstraintLayout extends ConstraintLayout {
    private final SwipeDismissHandler mSwipeDismissHandler;
    private final GestureDetector mSwipeDetector;
    private Runnable mOnDismiss;
    private Consumer<Animator> mOnDismissInitiated;
    private Runnable mOnDismissComplete;
    private Runnable mOnInteraction;

    public DraggableConstraintLayout(Context context) {
@@ -58,9 +62,16 @@ public class DraggableConstraintLayout extends ConstraintLayout {
                    }

                    @Override
                    public void onDismiss() {
                        if (mOnDismiss != null) {
                            mOnDismiss.run();
                    public void onSwipeDismissInitiated(Animator animator) {
                        if (mOnDismissInitiated != null) {
                            mOnDismissInitiated.accept(animator);
                        }
                    }

                    @Override
                    public void onDismissComplete() {
                        if (mOnDismissComplete != null) {
                            mOnDismissComplete.run();
                        }
                    }
                });
@@ -105,11 +116,19 @@ public class DraggableConstraintLayout extends ConstraintLayout {
        mSwipeDismissHandler.dismiss();
    }

    /**
     * Set the callback to be run after view is dismissed (before animation; receives animator as
     * input)
     */
    public void setOnDismissStartCallback(Consumer<Animator> callback) {
        mOnDismissInitiated = callback;
    }

    /**
     * Set the callback to be run after view is dismissed
     */
    public void setOnDismissCallback(Runnable callback) {
        mOnDismiss = callback;
    public void setOnDismissEndCallback(Runnable callback) {
        mOnDismissComplete = callback;
    }

    /**
+5 −1
Original line number Diff line number Diff line
@@ -403,12 +403,16 @@ public class ScreenshotView extends FrameLayout implements
                    }

                    @Override
                    public void onDismiss() {
                    public void onSwipeDismissInitiated(Animator animator) {
                        if (DEBUG_DISMISS) {
                            Log.d(ScreenshotView.TAG, "dismiss triggered via swipe gesture");
                        }
                        mUiEventLogger.log(ScreenshotEvent.SCREENSHOT_SWIPE_DISMISSED, 0,
                                mPackageName);
                    }

                    @Override
                    public void onDismissComplete() {
                        mCallbacks.onDismiss();
                    }
                });
+17 −7
Original line number Diff line number Diff line
@@ -48,10 +48,15 @@ public class SwipeDismissHandler implements View.OnTouchListener {
         */
        void onInteraction();

        /**
         * Run when the view is dismissed (the distance threshold is met), pre-dismissal animation
         */
        void onSwipeDismissInitiated(Animator animator);

        /**
         * Run when the view is dismissed (the distance threshold is met), post-dismissal animation
         */
        void onDismiss();
        void onDismissComplete();
    }

    private final View mView;
@@ -89,7 +94,9 @@ public class SwipeDismissHandler implements View.OnTouchListener {
                return true;
            }
            if (isPastDismissThreshold()) {
                dismiss();
                ValueAnimator dismissAnimator = createSwipeDismissAnimation(1);
                mCallbacks.onSwipeDismissInitiated(dismissAnimator);
                dismiss(dismissAnimator);
            } else {
                // if we've moved, but not past the threshold, start the return animation
                if (DEBUG_DISMISS) {
@@ -117,7 +124,10 @@ public class SwipeDismissHandler implements View.OnTouchListener {
                float velocityY) {
            if (mView.getTranslationX() * velocityX > 0
                    && (mDismissAnimation == null || !mDismissAnimation.isRunning())) {
                dismiss(velocityX / (float) 1000);
                ValueAnimator dismissAnimator =
                        createSwipeDismissAnimation(velocityX / (float) 1000);
                mCallbacks.onSwipeDismissInitiated(dismissAnimator);
                dismiss(dismissAnimator);
                return true;
            }
            return false;
@@ -160,11 +170,11 @@ public class SwipeDismissHandler implements View.OnTouchListener {
     * Start dismissal animation (will run onDismiss callback when animation complete)
     */
    public void dismiss() {
        dismiss(1);
        dismiss(createSwipeDismissAnimation(1));
    }

    private void dismiss(float velocity) {
        mDismissAnimation = createSwipeDismissAnimation(velocity);
    private void dismiss(ValueAnimator animator) {
        mDismissAnimation = animator;
        mDismissAnimation.addListener(new AnimatorListenerAdapter() {
            private boolean mCancelled;

@@ -178,7 +188,7 @@ public class SwipeDismissHandler implements View.OnTouchListener {
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if (!mCancelled) {
                    mCallbacks.onDismiss();
                    mCallbacks.onDismissComplete();
                }
            }
        });