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

This commit is contained in:
Miranda Kephart
2022-03-03 16:29:04 +00:00
committed by Android (Google) Code Review
4 changed files with 48 additions and 15 deletions

View File

@@ -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());

View File

@@ -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;
}
/**

View File

@@ -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();
}
});

View File

@@ -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();
}
}
});