Merge "Forward motion events to BackAnimation from EdgeBackGestureHandler." into tm-qpr-dev

This commit is contained in:
Shan Huang
2022-07-23 13:36:19 +00:00
committed by Android (Google) Code Review
2 changed files with 39 additions and 34 deletions

View File

@@ -34,7 +34,6 @@ import android.view.ViewConfiguration
import android.view.WindowManager
import android.view.animation.DecelerateInterpolator
import android.view.animation.PathInterpolator
import android.window.BackEvent
import androidx.dynamicanimation.animation.DynamicAnimation
import androidx.dynamicanimation.animation.SpringForce
import com.android.internal.util.LatencyTracker
@@ -97,7 +96,6 @@ private val DECELERATE_INTERPOLATOR_SLOW = DecelerateInterpolator(0.7f)
class BackPanelController private constructor(
context: Context,
private var backAnimation: BackAnimation?,
private val windowManager: WindowManager,
private val viewConfiguration: ViewConfiguration,
@Main private val mainHandler: Handler,
@@ -124,7 +122,6 @@ class BackPanelController private constructor(
fun create(context: Context, backAnimation: BackAnimation?): BackPanelController {
val backPanelController = BackPanelController(
context,
backAnimation,
windowManager,
viewConfiguration,
mainHandler,
@@ -266,7 +263,6 @@ class BackPanelController private constructor(
*/
private fun updateConfiguration() {
params.update(resources)
updateBackAnimationSwipeThresholds()
mView.updateArrowPaint(params.arrowThickness)
}
@@ -298,13 +294,6 @@ class BackPanelController private constructor(
}
override fun onMotionEvent(event: MotionEvent) {
backAnimation?.onBackMotion(
event.x,
event.y,
event.actionMasked,
if (mView.isLeftPanel) BackEvent.EDGE_LEFT else BackEvent.EDGE_RIGHT
)
velocityTracker!!.addMovement(event)
when (event.actionMasked) {
MotionEvent.ACTION_DOWN -> {
@@ -483,18 +472,6 @@ class BackPanelController private constructor(
)
}
fun setBackAnimation(backAnimation: BackAnimation?) {
this.backAnimation = backAnimation
updateBackAnimationSwipeThresholds()
}
private fun updateBackAnimationSwipeThresholds() {
backAnimation?.setSwipeThresholds(
params.swipeTriggerThreshold,
fullyStretchedThreshold
)
}
override fun onDestroy() {
cancelFailsafe()
windowManager.removeView(mView)
@@ -567,7 +544,6 @@ class BackPanelController private constructor(
totalTouchDelta = 0f
vibrationTime = 0
cancelFailsafe()
backAnimation?.setTriggerBack(false)
}
private fun updateYPosition(touchY: Float) {
@@ -580,7 +556,6 @@ class BackPanelController private constructor(
override fun setDisplaySize(displaySize: Point) {
this.displaySize.set(displaySize.x, displaySize.y)
fullyStretchedThreshold = min(displaySize.x.toFloat(), params.swipeProgressThreshold)
updateBackAnimationSwipeThresholds()
}
/**
@@ -664,7 +639,6 @@ class BackPanelController private constructor(
updateRestingArrowDimens(animated = true, currentState)
}
GestureState.ACTIVE -> {
backAnimation?.setTriggerBack(true)
updateRestingArrowDimens(animated = true, currentState)
// Vibrate the first time we transition to ACTIVE
if (!hasHapticPlayed) {
@@ -674,7 +648,6 @@ class BackPanelController private constructor(
}
}
GestureState.INACTIVE -> {
backAnimation?.setTriggerBack(false)
updateRestingArrowDimens(animated = true, currentState)
}
GestureState.FLUNG -> playFlingBackAnimation()

View File

@@ -53,6 +53,7 @@ import android.view.MotionEvent;
import android.view.Surface;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.window.BackEvent;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.policy.GestureNavigationSettingsObserver;
@@ -208,6 +209,10 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private float mBottomGestureHeight;
// The slop to distinguish between horizontal and vertical motion
private float mTouchSlop;
// The threshold for triggering back
private float mBackSwipeTriggerThreshold;
// The threshold for back swipe full progress.
private float mBackSwipeProgressThreshold;
// Duration after which we consider the event as longpress.
private final int mLongPressTimeout;
private int mStartingQuickstepRotation = -1;
@@ -274,6 +279,8 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
Log.d(DEBUG_MISSING_GESTURE_TAG, "Triggered back: down="
+ sendDown + ", up=" + sendUp);
}
} else {
mBackAnimation.setTriggerBack(true);
}
mOverviewProxyService.notifyBackAction(true, (int) mDownPoint.x,
@@ -285,6 +292,9 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
@Override
public void cancelBack() {
if (mBackAnimation != null) {
mBackAnimation.setTriggerBack(false);
}
logGesture(SysUiStatsLog.BACK_GESTURE__TYPE__INCOMPLETE);
mOverviewProxyService.notifyBackAction(false, (int) mDownPoint.x,
(int) mDownPoint.y, false /* isButton */, !mIsOnLeftEdge);
@@ -406,6 +416,11 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
final float backGestureSlop = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.BACK_GESTURE_SLOP_MULTIPLIER, 0.75f);
mTouchSlop = mViewConfiguration.getScaledTouchSlop() * backGestureSlop;
mBackSwipeTriggerThreshold = res.getDimension(
R.dimen.navigation_edge_action_drag_threshold);
mBackSwipeProgressThreshold = res.getDimension(
R.dimen.navigation_edge_action_progress_threshold);
updateBackAnimationThresholds();
}
public void updateNavigationBarOverlayExcludeRegion(Rect exclude) {
@@ -748,6 +763,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
MotionEvent cancelEv = MotionEvent.obtain(ev);
cancelEv.setAction(MotionEvent.ACTION_CANCEL);
mEdgeBackPlugin.onMotionEvent(cancelEv);
dispatchToBackAnimation(cancelEv);
cancelEv.recycle();
}
@@ -794,6 +810,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
if (mAllowGesture) {
mEdgeBackPlugin.setIsLeftPanel(mIsOnLeftEdge);
mEdgeBackPlugin.onMotionEvent(ev);
dispatchToBackAnimation(ev);
}
if (mLogGesture) {
mDownPoint.set(ev.getX(), ev.getY());
@@ -867,12 +884,23 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
if (mAllowGesture) {
// forward touch
mEdgeBackPlugin.onMotionEvent(ev);
dispatchToBackAnimation(ev);
}
}
mProtoTracer.scheduleFrameUpdate();
}
private void dispatchToBackAnimation(MotionEvent event) {
if (mBackAnimation != null) {
mBackAnimation.onBackMotion(
event.getX(),
event.getY(),
event.getActionMasked(),
mIsOnLeftEdge ? BackEvent.EDGE_LEFT : BackEvent.EDGE_RIGHT);
}
}
private void updateDisabledForQuickstep(Configuration newConfig) {
int rotation = newConfig.windowConfiguration.getRotation();
mDisabledForQuickstep = mStartingQuickstepRotation > -1 &&
@@ -900,6 +928,16 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
if (mEdgeBackPlugin != null) {
mEdgeBackPlugin.setDisplaySize(mDisplaySize);
}
updateBackAnimationThresholds();
}
private void updateBackAnimationThresholds() {
if (mBackAnimation == null) {
return;
}
mBackAnimation.setSwipeThresholds(
mBackSwipeTriggerThreshold,
Math.min(mDisplaySize.x, mBackSwipeProgressThreshold));
}
private boolean sendEvent(int action, int code) {
@@ -979,13 +1017,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
public void setBackAnimation(BackAnimation backAnimation) {
mBackAnimation = backAnimation;
if (mEdgeBackPlugin != null) {
if (mEdgeBackPlugin instanceof NavigationBarEdgePanel) {
((NavigationBarEdgePanel) mEdgeBackPlugin).setBackAnimation(backAnimation);
} else if (mEdgeBackPlugin instanceof BackPanelController) {
((BackPanelController) mEdgeBackPlugin).setBackAnimation(backAnimation);
}
}
updateBackAnimationThresholds();
}
/**