summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt27
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java46
2 files changed, 39 insertions, 34 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
index 28ab83c83a42..2006d5338c8c 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
@@ -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()
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
index 067f4cbb975e..057ed2439df3 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
@@ -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();
}
/**