Loading packages/SystemUI/res/values/dimens.xml +3 −5 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ <!-- The threshold to drag to trigger the edge action --> <dimen name="navigation_edge_action_drag_threshold">16dp</dimen> <!-- The threshold to progress back animation for edge swipe --> <dimen name="navigation_edge_action_progress_threshold">400dp</dimen> <dimen name="navigation_edge_action_progress_threshold">412dp</dimen> <!-- The minimum display position of the arrow on the screen --> <dimen name="navigation_edge_arrow_min_y">64dp</dimen> <!-- The amount by which the arrow is shifted to avoid the finger--> Loading Loading @@ -80,13 +80,11 @@ <dimen name="navigation_edge_active_arrow_length">8dp</dimen> <dimen name="navigation_edge_active_arrow_height">9dp</dimen> <!-- stretch @412 dp --> <dimen name="navigation_edge_stretch_threshold">412dp</dimen> <dimen name="navigation_edge_stretch_margin">18dp</dimen> <dimen name="navigation_edge_stretch_background_width">74dp</dimen> <dimen name="navigation_edge_stretch_background_height">60dp</dimen> <dimen name="navigation_edge_stretch_left_corners">30dp</dimen> <dimen name="navigation_edge_stretch_right_corners">30dp</dimen> <dimen name="navigation_edge_stretch_edge_corners">30dp</dimen> <dimen name="navigation_edge_stretch_far_corners">30dp</dimen> <dimen name="navigation_edge_stretched_arrow_length">7dp</dimen> <dimen name="navigation_edge_stretched_arrow_height">10dp</dimen> Loading packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt +97 −40 Original line number Diff line number Diff line Loading @@ -58,14 +58,16 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : SpringForce().apply { stiffness = 600f dampingRatio = 0.65f }) } ) private val backgroundHeight = AnimatedFloat( name = "backgroundHeight", SpringForce().apply { stiffness = 600f dampingRatio = 0.65f }) } ) /** * Corners of the background closer to the edge of the screen (where the arrow appeared from). Loading @@ -76,18 +78,20 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : SpringForce().apply { stiffness = 400f dampingRatio = SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY }) } ) /** * Corners of the background further from the edge of the screens (toward the direction the * arrow is being dragged). Used for animating [arrowBackgroundRect] */ private val backgroundDragCornerRadius = AnimatedFloat( private val backgroundFarCornerRadius = AnimatedFloat( name = "backgroundDragCornerRadius", SpringForce().apply { stiffness = 2200f dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY }) } ) /** * Left/right position of the background relative to the canvas. Also corresponds with the Loading @@ -96,14 +100,32 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : */ private var horizontalTranslation = AnimatedFloat("horizontalTranslation", SpringForce()) private val currentAlpha: FloatPropertyCompat<BackPanel> = object : FloatPropertyCompat<BackPanel>("currentAlpha") { override fun setValue(panel: BackPanel, value: Float) { panel.alpha = value } override fun getValue(panel: BackPanel): Float = panel.alpha } private val alphaAnimation = SpringAnimation(this, currentAlpha) .setSpring( SpringForce() .setStiffness(60f) .setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY) ) /** * Canvas vertical translation. How far up/down the arrow and background appear relative to the * canvas. */ private var verticalTranslation: AnimatedFloat = AnimatedFloat("verticalTranslation", SpringForce().apply { private var verticalTranslation: AnimatedFloat = AnimatedFloat( name = "verticalTranslation", SpringForce().apply { stiffness = SpringForce.STIFFNESS_MEDIUM }) } ) /** * Use for drawing debug info. Can only be set if [DEBUG]=true Loading Loading @@ -160,6 +182,17 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : animation.animateToFinalPosition(restingPosition + stretchAmount) } /** * Animates to a new position ([finalPosition]) that is the given fraction ([amount]) * between the existing [restingPosition] and the new [finalPosition]. * * The [restingPosition] will remain unchanged. Only the animation is updated. */ fun stretchBy(finalPosition: Float, amount: Float) { val stretchedAmount = amount * (finalPosition - restingPosition) animation.animateToFinalPosition(restingPosition + stretchedAmount) } fun updateRestingPosition(pos: Float, animated: Boolean) { restingPosition = pos if (animated) Loading Loading @@ -192,7 +225,10 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : } fun addEndListener(endListener: DelayedOnAnimationEndListener): Boolean { return if (horizontalTranslation.animation.isRunning) { return if (alphaAnimation.isRunning) { alphaAnimation.addEndListener(endListener) true } else if (horizontalTranslation.animation.isRunning) { horizontalTranslation.animation.addEndListener(endListener) true } else { Loading @@ -202,47 +238,59 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : } fun setStretch( arrowLengthStretch: Float, arrowHeightStretch: Float, backgroundWidthStretch: Float, backgroundHeightStretch: Float, backgroundEdgeCornerRadiusStretch: Float, backgroundDragCornerRadiusStretch: Float, horizontalTranslationStretch: Float horizontalTranslationStretchAmount: Float, arrowStretchAmount: Float, backgroundWidthStretchAmount: Float, fullyStretchedDimens: EdgePanelParams.BackIndicatorDimens ) { arrowLength.stretchTo(arrowLengthStretch) arrowHeight.stretchTo(arrowHeightStretch) backgroundWidth.stretchTo(backgroundWidthStretch) backgroundHeight.stretchTo(backgroundHeightStretch) backgroundEdgeCornerRadius.stretchTo(backgroundEdgeCornerRadiusStretch) backgroundDragCornerRadius.stretchTo(backgroundDragCornerRadiusStretch) horizontalTranslation.stretchTo(horizontalTranslationStretch) horizontalTranslation.stretchBy( finalPosition = fullyStretchedDimens.horizontalTranslation, amount = horizontalTranslationStretchAmount ) arrowLength.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.length, amount = arrowStretchAmount ) arrowHeight.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.height, amount = arrowStretchAmount ) backgroundWidth.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.width, amount = backgroundWidthStretchAmount ) } fun resetStretch() { setStretch(0f, 0f, 0f, 0f, 0f, 0f, 0f) horizontalTranslation.stretchTo(0f) arrowLength.stretchTo(0f) arrowHeight.stretchTo(0f) backgroundWidth.stretchTo(0f) backgroundHeight.stretchTo(0f) backgroundEdgeCornerRadius.stretchTo(0f) backgroundFarCornerRadius.stretchTo(0f) } /** * Updates resting arrow and background size not accounting for stretch */ internal fun updateRestingArrowDimens( backgroundWidth: Float, backgroundHeight: Float, backgroundEdgeCornerRadius: Float, backgroundDragCornerRadius: Float, arrowLength: Float, arrowHeight: Float, horizontalTranslation: Float, internal fun setRestingDimens( restingParams: EdgePanelParams.BackIndicatorDimens, animate: Boolean ) { this.arrowLength.updateRestingPosition(arrowLength, animate) this.arrowHeight.updateRestingPosition(arrowHeight, animate) this.backgroundWidth.updateRestingPosition(backgroundWidth, animate) this.backgroundHeight.updateRestingPosition(backgroundHeight, animate) this.backgroundEdgeCornerRadius.updateRestingPosition(backgroundEdgeCornerRadius, animate) this.backgroundDragCornerRadius.updateRestingPosition(backgroundDragCornerRadius, animate) this.horizontalTranslation.updateRestingPosition(horizontalTranslation, animate) horizontalTranslation.updateRestingPosition(restingParams.horizontalTranslation, animate) arrowLength.updateRestingPosition(restingParams.arrowDimens.length, animate) arrowHeight.updateRestingPosition(restingParams.arrowDimens.height, animate) backgroundWidth.updateRestingPosition(restingParams.backgroundDimens.width, animate) backgroundHeight.updateRestingPosition(restingParams.backgroundDimens.height, animate) backgroundEdgeCornerRadius.updateRestingPosition( restingParams.backgroundDimens.edgeCornerRadius, animate ) backgroundFarCornerRadius.updateRestingPosition( restingParams.backgroundDimens.farCornerRadius, animate ) } fun animateVertically(yPos: Float) = verticalTranslation.stretchTo(yPos) Loading @@ -262,7 +310,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : override fun onDraw(canvas: Canvas) { var edgeCorner = backgroundEdgeCornerRadius.pos val farCorner = backgroundDragCornerRadius.pos val farCorner = backgroundFarCornerRadius.pos val halfHeight = backgroundHeight.pos / 2 canvas.save() Loading Loading @@ -337,4 +385,13 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : ) addRoundRect(this@toPathWithRoundCorners, corners, Path.Direction.CW) } fun cancelAlphaAnimations() { alphaAnimation.cancel() alpha = 1f } fun fadeOut() { alphaAnimation.animateToFinalPosition(0f) } } packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt +134 −143 File changed.Preview size limit exceeded, changes collapsed. Show changes packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt +86 −85 Original line number Diff line number Diff line Loading @@ -4,66 +4,36 @@ import android.content.res.Resources import com.android.systemui.R data class EdgePanelParams(private var resources: Resources) { data class ArrowDimens( val length: Float = 0f, val height: Float = 0f ) data class BackgroundDimens( val width: Float = 0f, val height: Float = 0f, val edgeCornerRadius: Float = 0f, val farCornerRadius: Float = 0f ) data class BackIndicatorDimens( val horizontalTranslation: Float = 0f, val arrowDimens: ArrowDimens = ArrowDimens(), val backgroundDimens: BackgroundDimens = BackgroundDimens() ) var arrowThickness: Float = 0f private set var entryArrowLength: Float = 0f private set var entryArrowHeight: Float = 0f private set var activeArrowLength: Float = 0f private set var activeArrowHeight: Float = 0f private set var stretchedArrowLength: Float = 0f private set var stretchedArrowHeight: Float = 0f private set var cancelledArrowLength: Float = 0f private set var cancelledArrowHeight: Float = 0f private set var entryMargin: Float = 0f private set var entryBackgroundWidth: Float = 0f private set var entryBackgroundHeight: Float = 0f private set var entryEdgeCorners: Float = 0f private set var entryFarCorners: Float = 0f private set var preThresholdMargin: Float = 0f private set var preThresholdBackgroundWidth: Float = 0f var entryIndicator = BackIndicatorDimens() private set var preThresholdBackgroundHeight: Float = 0f var activeIndicator = BackIndicatorDimens() private set var preThresholdEdgeCorners: Float = 0f var preThresholdIndicator = BackIndicatorDimens() private set var preThresholdFarCorners: Float = 0f private set var activeMargin: Float = 0f private set var activeBackgroundWidth: Float = 0f private set var activeBackgroundHeight: Float = 0f private set var activeEdgeCorners: Float = 0f private set var activeFarCorners: Float = 0f private set var fullyStretchedThreshold: Float = 0f private set var stretchMargin: Float = 0f private set var stretchBackgroundWidth: Float = 0f private set var stretchBackgroundHeight: Float = 0f private set var stretchEdgeCorners: Float = 0f private set var stretchFarCorners: Float = 0f var fullyStretchedIndicator = BackIndicatorDimens() private set var cancelledArrowDimens = ArrowDimens() // navigation bar edge constants var arrowPaddingEnd: Int = 0 Loading Loading @@ -98,42 +68,73 @@ data class EdgePanelParams(private var resources: Resources) { fun update(resources: Resources) { this.resources = resources arrowThickness = getDimen(R.dimen.navigation_edge_arrow_thickness) entryArrowLength = getDimen(R.dimen.navigation_edge_entry_arrow_length) entryArrowHeight = getDimen(R.dimen.navigation_edge_entry_arrow_height) activeArrowLength = getDimen(R.dimen.navigation_edge_active_arrow_length) activeArrowHeight = getDimen(R.dimen.navigation_edge_active_arrow_height) stretchedArrowLength = getDimen(R.dimen.navigation_edge_stretched_arrow_length) stretchedArrowHeight = getDimen(R.dimen.navigation_edge_stretched_arrow_height) cancelledArrowLength = getDimen(R.dimen.navigation_edge_cancelled_arrow_length) cancelledArrowHeight = getDimen(R.dimen.navigation_edge_cancelled_arrow_height) entryMargin = getDimen(R.dimen.navigation_edge_entry_margin) entryBackgroundWidth = getDimen(R.dimen.navigation_edge_entry_background_width) entryBackgroundHeight = getDimen(R.dimen.navigation_edge_entry_background_height) entryEdgeCorners = getDimen(R.dimen.navigation_edge_entry_edge_corners) entryFarCorners = getDimen(R.dimen.navigation_edge_entry_far_corners) preThresholdMargin = getDimen(R.dimen.navigation_edge_pre_threshold_margin) preThresholdBackgroundWidth = getDimen(R.dimen.navigation_edge_pre_threshold_background_width) preThresholdBackgroundHeight = getDimen(R.dimen.navigation_edge_pre_threshold_background_height) preThresholdEdgeCorners = getDimen(R.dimen.navigation_edge_pre_threshold_edge_corners) preThresholdFarCorners = getDimen(R.dimen.navigation_edge_pre_threshold_far_corners) activeMargin = getDimen(R.dimen.navigation_edge_active_margin) activeBackgroundWidth = getDimen(R.dimen.navigation_edge_active_background_width) activeBackgroundHeight = getDimen(R.dimen.navigation_edge_active_background_height) activeEdgeCorners = getDimen(R.dimen.navigation_edge_active_edge_corners) activeFarCorners = getDimen(R.dimen.navigation_edge_active_far_corners) fullyStretchedThreshold = getDimen(R.dimen.navigation_edge_stretch_threshold) stretchMargin = getDimen(R.dimen.navigation_edge_stretch_margin) stretchBackgroundWidth = getDimen(R.dimen.navigation_edge_stretch_background_width) stretchBackgroundHeight = getDimen(R.dimen.navigation_edge_stretch_background_height) stretchEdgeCorners = getDimen(R.dimen.navigation_edge_stretch_left_corners) stretchFarCorners = getDimen(R.dimen.navigation_edge_stretch_right_corners) arrowPaddingEnd = getPx(R.dimen.navigation_edge_panel_padding) minArrowYPosition = getPx(R.dimen.navigation_edge_arrow_min_y) fingerOffset = getPx(R.dimen.navigation_edge_finger_offset) swipeTriggerThreshold = getDimen(R.dimen.navigation_edge_action_drag_threshold) swipeProgressThreshold = getDimen(R.dimen.navigation_edge_action_progress_threshold) minDeltaForSwitch = getPx(R.dimen.navigation_edge_minimum_x_delta_for_switch) entryIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_entry_margin), arrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_entry_arrow_length), height = getDimen(R.dimen.navigation_edge_entry_arrow_height), ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_entry_background_width), height = getDimen(R.dimen.navigation_edge_entry_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_entry_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_entry_far_corners) ) ) activeIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_active_margin), arrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_active_arrow_length), height = getDimen(R.dimen.navigation_edge_active_arrow_height), ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_active_background_width), height = getDimen(R.dimen.navigation_edge_active_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_active_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_active_far_corners) ) ) preThresholdIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_pre_threshold_margin), arrowDimens = ArrowDimens( length = entryIndicator.arrowDimens.length, height = entryIndicator.arrowDimens.height, ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_pre_threshold_background_width), height = getDimen(R.dimen.navigation_edge_pre_threshold_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_pre_threshold_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_pre_threshold_far_corners) ) ) fullyStretchedIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_stretch_margin), arrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_stretched_arrow_length), height = getDimen(R.dimen.navigation_edge_stretched_arrow_height), ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_stretch_background_width), height = getDimen(R.dimen.navigation_edge_stretch_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_stretch_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_stretch_far_corners) ) ) cancelledArrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_cancelled_arrow_length), height = getDimen(R.dimen.navigation_edge_cancelled_arrow_height) ) } } Loading
packages/SystemUI/res/values/dimens.xml +3 −5 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ <!-- The threshold to drag to trigger the edge action --> <dimen name="navigation_edge_action_drag_threshold">16dp</dimen> <!-- The threshold to progress back animation for edge swipe --> <dimen name="navigation_edge_action_progress_threshold">400dp</dimen> <dimen name="navigation_edge_action_progress_threshold">412dp</dimen> <!-- The minimum display position of the arrow on the screen --> <dimen name="navigation_edge_arrow_min_y">64dp</dimen> <!-- The amount by which the arrow is shifted to avoid the finger--> Loading Loading @@ -80,13 +80,11 @@ <dimen name="navigation_edge_active_arrow_length">8dp</dimen> <dimen name="navigation_edge_active_arrow_height">9dp</dimen> <!-- stretch @412 dp --> <dimen name="navigation_edge_stretch_threshold">412dp</dimen> <dimen name="navigation_edge_stretch_margin">18dp</dimen> <dimen name="navigation_edge_stretch_background_width">74dp</dimen> <dimen name="navigation_edge_stretch_background_height">60dp</dimen> <dimen name="navigation_edge_stretch_left_corners">30dp</dimen> <dimen name="navigation_edge_stretch_right_corners">30dp</dimen> <dimen name="navigation_edge_stretch_edge_corners">30dp</dimen> <dimen name="navigation_edge_stretch_far_corners">30dp</dimen> <dimen name="navigation_edge_stretched_arrow_length">7dp</dimen> <dimen name="navigation_edge_stretched_arrow_height">10dp</dimen> Loading
packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt +97 −40 Original line number Diff line number Diff line Loading @@ -58,14 +58,16 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : SpringForce().apply { stiffness = 600f dampingRatio = 0.65f }) } ) private val backgroundHeight = AnimatedFloat( name = "backgroundHeight", SpringForce().apply { stiffness = 600f dampingRatio = 0.65f }) } ) /** * Corners of the background closer to the edge of the screen (where the arrow appeared from). Loading @@ -76,18 +78,20 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : SpringForce().apply { stiffness = 400f dampingRatio = SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY }) } ) /** * Corners of the background further from the edge of the screens (toward the direction the * arrow is being dragged). Used for animating [arrowBackgroundRect] */ private val backgroundDragCornerRadius = AnimatedFloat( private val backgroundFarCornerRadius = AnimatedFloat( name = "backgroundDragCornerRadius", SpringForce().apply { stiffness = 2200f dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY }) } ) /** * Left/right position of the background relative to the canvas. Also corresponds with the Loading @@ -96,14 +100,32 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : */ private var horizontalTranslation = AnimatedFloat("horizontalTranslation", SpringForce()) private val currentAlpha: FloatPropertyCompat<BackPanel> = object : FloatPropertyCompat<BackPanel>("currentAlpha") { override fun setValue(panel: BackPanel, value: Float) { panel.alpha = value } override fun getValue(panel: BackPanel): Float = panel.alpha } private val alphaAnimation = SpringAnimation(this, currentAlpha) .setSpring( SpringForce() .setStiffness(60f) .setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY) ) /** * Canvas vertical translation. How far up/down the arrow and background appear relative to the * canvas. */ private var verticalTranslation: AnimatedFloat = AnimatedFloat("verticalTranslation", SpringForce().apply { private var verticalTranslation: AnimatedFloat = AnimatedFloat( name = "verticalTranslation", SpringForce().apply { stiffness = SpringForce.STIFFNESS_MEDIUM }) } ) /** * Use for drawing debug info. Can only be set if [DEBUG]=true Loading Loading @@ -160,6 +182,17 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : animation.animateToFinalPosition(restingPosition + stretchAmount) } /** * Animates to a new position ([finalPosition]) that is the given fraction ([amount]) * between the existing [restingPosition] and the new [finalPosition]. * * The [restingPosition] will remain unchanged. Only the animation is updated. */ fun stretchBy(finalPosition: Float, amount: Float) { val stretchedAmount = amount * (finalPosition - restingPosition) animation.animateToFinalPosition(restingPosition + stretchedAmount) } fun updateRestingPosition(pos: Float, animated: Boolean) { restingPosition = pos if (animated) Loading Loading @@ -192,7 +225,10 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : } fun addEndListener(endListener: DelayedOnAnimationEndListener): Boolean { return if (horizontalTranslation.animation.isRunning) { return if (alphaAnimation.isRunning) { alphaAnimation.addEndListener(endListener) true } else if (horizontalTranslation.animation.isRunning) { horizontalTranslation.animation.addEndListener(endListener) true } else { Loading @@ -202,47 +238,59 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : } fun setStretch( arrowLengthStretch: Float, arrowHeightStretch: Float, backgroundWidthStretch: Float, backgroundHeightStretch: Float, backgroundEdgeCornerRadiusStretch: Float, backgroundDragCornerRadiusStretch: Float, horizontalTranslationStretch: Float horizontalTranslationStretchAmount: Float, arrowStretchAmount: Float, backgroundWidthStretchAmount: Float, fullyStretchedDimens: EdgePanelParams.BackIndicatorDimens ) { arrowLength.stretchTo(arrowLengthStretch) arrowHeight.stretchTo(arrowHeightStretch) backgroundWidth.stretchTo(backgroundWidthStretch) backgroundHeight.stretchTo(backgroundHeightStretch) backgroundEdgeCornerRadius.stretchTo(backgroundEdgeCornerRadiusStretch) backgroundDragCornerRadius.stretchTo(backgroundDragCornerRadiusStretch) horizontalTranslation.stretchTo(horizontalTranslationStretch) horizontalTranslation.stretchBy( finalPosition = fullyStretchedDimens.horizontalTranslation, amount = horizontalTranslationStretchAmount ) arrowLength.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.length, amount = arrowStretchAmount ) arrowHeight.stretchBy( finalPosition = fullyStretchedDimens.arrowDimens.height, amount = arrowStretchAmount ) backgroundWidth.stretchBy( finalPosition = fullyStretchedDimens.backgroundDimens.width, amount = backgroundWidthStretchAmount ) } fun resetStretch() { setStretch(0f, 0f, 0f, 0f, 0f, 0f, 0f) horizontalTranslation.stretchTo(0f) arrowLength.stretchTo(0f) arrowHeight.stretchTo(0f) backgroundWidth.stretchTo(0f) backgroundHeight.stretchTo(0f) backgroundEdgeCornerRadius.stretchTo(0f) backgroundFarCornerRadius.stretchTo(0f) } /** * Updates resting arrow and background size not accounting for stretch */ internal fun updateRestingArrowDimens( backgroundWidth: Float, backgroundHeight: Float, backgroundEdgeCornerRadius: Float, backgroundDragCornerRadius: Float, arrowLength: Float, arrowHeight: Float, horizontalTranslation: Float, internal fun setRestingDimens( restingParams: EdgePanelParams.BackIndicatorDimens, animate: Boolean ) { this.arrowLength.updateRestingPosition(arrowLength, animate) this.arrowHeight.updateRestingPosition(arrowHeight, animate) this.backgroundWidth.updateRestingPosition(backgroundWidth, animate) this.backgroundHeight.updateRestingPosition(backgroundHeight, animate) this.backgroundEdgeCornerRadius.updateRestingPosition(backgroundEdgeCornerRadius, animate) this.backgroundDragCornerRadius.updateRestingPosition(backgroundDragCornerRadius, animate) this.horizontalTranslation.updateRestingPosition(horizontalTranslation, animate) horizontalTranslation.updateRestingPosition(restingParams.horizontalTranslation, animate) arrowLength.updateRestingPosition(restingParams.arrowDimens.length, animate) arrowHeight.updateRestingPosition(restingParams.arrowDimens.height, animate) backgroundWidth.updateRestingPosition(restingParams.backgroundDimens.width, animate) backgroundHeight.updateRestingPosition(restingParams.backgroundDimens.height, animate) backgroundEdgeCornerRadius.updateRestingPosition( restingParams.backgroundDimens.edgeCornerRadius, animate ) backgroundFarCornerRadius.updateRestingPosition( restingParams.backgroundDimens.farCornerRadius, animate ) } fun animateVertically(yPos: Float) = verticalTranslation.stretchTo(yPos) Loading @@ -262,7 +310,7 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : override fun onDraw(canvas: Canvas) { var edgeCorner = backgroundEdgeCornerRadius.pos val farCorner = backgroundDragCornerRadius.pos val farCorner = backgroundFarCornerRadius.pos val halfHeight = backgroundHeight.pos / 2 canvas.save() Loading Loading @@ -337,4 +385,13 @@ class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : ) addRoundRect(this@toPathWithRoundCorners, corners, Path.Direction.CW) } fun cancelAlphaAnimations() { alphaAnimation.cancel() alpha = 1f } fun fadeOut() { alphaAnimation.animateToFinalPosition(0f) } }
packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt +134 −143 File changed.Preview size limit exceeded, changes collapsed. Show changes
packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt +86 −85 Original line number Diff line number Diff line Loading @@ -4,66 +4,36 @@ import android.content.res.Resources import com.android.systemui.R data class EdgePanelParams(private var resources: Resources) { data class ArrowDimens( val length: Float = 0f, val height: Float = 0f ) data class BackgroundDimens( val width: Float = 0f, val height: Float = 0f, val edgeCornerRadius: Float = 0f, val farCornerRadius: Float = 0f ) data class BackIndicatorDimens( val horizontalTranslation: Float = 0f, val arrowDimens: ArrowDimens = ArrowDimens(), val backgroundDimens: BackgroundDimens = BackgroundDimens() ) var arrowThickness: Float = 0f private set var entryArrowLength: Float = 0f private set var entryArrowHeight: Float = 0f private set var activeArrowLength: Float = 0f private set var activeArrowHeight: Float = 0f private set var stretchedArrowLength: Float = 0f private set var stretchedArrowHeight: Float = 0f private set var cancelledArrowLength: Float = 0f private set var cancelledArrowHeight: Float = 0f private set var entryMargin: Float = 0f private set var entryBackgroundWidth: Float = 0f private set var entryBackgroundHeight: Float = 0f private set var entryEdgeCorners: Float = 0f private set var entryFarCorners: Float = 0f private set var preThresholdMargin: Float = 0f private set var preThresholdBackgroundWidth: Float = 0f var entryIndicator = BackIndicatorDimens() private set var preThresholdBackgroundHeight: Float = 0f var activeIndicator = BackIndicatorDimens() private set var preThresholdEdgeCorners: Float = 0f var preThresholdIndicator = BackIndicatorDimens() private set var preThresholdFarCorners: Float = 0f private set var activeMargin: Float = 0f private set var activeBackgroundWidth: Float = 0f private set var activeBackgroundHeight: Float = 0f private set var activeEdgeCorners: Float = 0f private set var activeFarCorners: Float = 0f private set var fullyStretchedThreshold: Float = 0f private set var stretchMargin: Float = 0f private set var stretchBackgroundWidth: Float = 0f private set var stretchBackgroundHeight: Float = 0f private set var stretchEdgeCorners: Float = 0f private set var stretchFarCorners: Float = 0f var fullyStretchedIndicator = BackIndicatorDimens() private set var cancelledArrowDimens = ArrowDimens() // navigation bar edge constants var arrowPaddingEnd: Int = 0 Loading Loading @@ -98,42 +68,73 @@ data class EdgePanelParams(private var resources: Resources) { fun update(resources: Resources) { this.resources = resources arrowThickness = getDimen(R.dimen.navigation_edge_arrow_thickness) entryArrowLength = getDimen(R.dimen.navigation_edge_entry_arrow_length) entryArrowHeight = getDimen(R.dimen.navigation_edge_entry_arrow_height) activeArrowLength = getDimen(R.dimen.navigation_edge_active_arrow_length) activeArrowHeight = getDimen(R.dimen.navigation_edge_active_arrow_height) stretchedArrowLength = getDimen(R.dimen.navigation_edge_stretched_arrow_length) stretchedArrowHeight = getDimen(R.dimen.navigation_edge_stretched_arrow_height) cancelledArrowLength = getDimen(R.dimen.navigation_edge_cancelled_arrow_length) cancelledArrowHeight = getDimen(R.dimen.navigation_edge_cancelled_arrow_height) entryMargin = getDimen(R.dimen.navigation_edge_entry_margin) entryBackgroundWidth = getDimen(R.dimen.navigation_edge_entry_background_width) entryBackgroundHeight = getDimen(R.dimen.navigation_edge_entry_background_height) entryEdgeCorners = getDimen(R.dimen.navigation_edge_entry_edge_corners) entryFarCorners = getDimen(R.dimen.navigation_edge_entry_far_corners) preThresholdMargin = getDimen(R.dimen.navigation_edge_pre_threshold_margin) preThresholdBackgroundWidth = getDimen(R.dimen.navigation_edge_pre_threshold_background_width) preThresholdBackgroundHeight = getDimen(R.dimen.navigation_edge_pre_threshold_background_height) preThresholdEdgeCorners = getDimen(R.dimen.navigation_edge_pre_threshold_edge_corners) preThresholdFarCorners = getDimen(R.dimen.navigation_edge_pre_threshold_far_corners) activeMargin = getDimen(R.dimen.navigation_edge_active_margin) activeBackgroundWidth = getDimen(R.dimen.navigation_edge_active_background_width) activeBackgroundHeight = getDimen(R.dimen.navigation_edge_active_background_height) activeEdgeCorners = getDimen(R.dimen.navigation_edge_active_edge_corners) activeFarCorners = getDimen(R.dimen.navigation_edge_active_far_corners) fullyStretchedThreshold = getDimen(R.dimen.navigation_edge_stretch_threshold) stretchMargin = getDimen(R.dimen.navigation_edge_stretch_margin) stretchBackgroundWidth = getDimen(R.dimen.navigation_edge_stretch_background_width) stretchBackgroundHeight = getDimen(R.dimen.navigation_edge_stretch_background_height) stretchEdgeCorners = getDimen(R.dimen.navigation_edge_stretch_left_corners) stretchFarCorners = getDimen(R.dimen.navigation_edge_stretch_right_corners) arrowPaddingEnd = getPx(R.dimen.navigation_edge_panel_padding) minArrowYPosition = getPx(R.dimen.navigation_edge_arrow_min_y) fingerOffset = getPx(R.dimen.navigation_edge_finger_offset) swipeTriggerThreshold = getDimen(R.dimen.navigation_edge_action_drag_threshold) swipeProgressThreshold = getDimen(R.dimen.navigation_edge_action_progress_threshold) minDeltaForSwitch = getPx(R.dimen.navigation_edge_minimum_x_delta_for_switch) entryIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_entry_margin), arrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_entry_arrow_length), height = getDimen(R.dimen.navigation_edge_entry_arrow_height), ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_entry_background_width), height = getDimen(R.dimen.navigation_edge_entry_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_entry_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_entry_far_corners) ) ) activeIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_active_margin), arrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_active_arrow_length), height = getDimen(R.dimen.navigation_edge_active_arrow_height), ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_active_background_width), height = getDimen(R.dimen.navigation_edge_active_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_active_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_active_far_corners) ) ) preThresholdIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_pre_threshold_margin), arrowDimens = ArrowDimens( length = entryIndicator.arrowDimens.length, height = entryIndicator.arrowDimens.height, ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_pre_threshold_background_width), height = getDimen(R.dimen.navigation_edge_pre_threshold_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_pre_threshold_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_pre_threshold_far_corners) ) ) fullyStretchedIndicator = BackIndicatorDimens( horizontalTranslation = getDimen(R.dimen.navigation_edge_stretch_margin), arrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_stretched_arrow_length), height = getDimen(R.dimen.navigation_edge_stretched_arrow_height), ), backgroundDimens = BackgroundDimens( width = getDimen(R.dimen.navigation_edge_stretch_background_width), height = getDimen(R.dimen.navigation_edge_stretch_background_height), edgeCornerRadius = getDimen(R.dimen.navigation_edge_stretch_edge_corners), farCornerRadius = getDimen(R.dimen.navigation_edge_stretch_far_corners) ) ) cancelledArrowDimens = ArrowDimens( length = getDimen(R.dimen.navigation_edge_cancelled_arrow_length), height = getDimen(R.dimen.navigation_edge_cancelled_arrow_height) ) } }