Merge "Change the long-press behavior on custom shortcuts to utilize an actual long-press" into udc-dev

This commit is contained in:
Brad Hinegardner
2023-05-25 19:53:30 +00:00
committed by Android (Google) Code Review
2 changed files with 52 additions and 25 deletions

View File

@@ -406,19 +406,21 @@ object KeyguardBottomAreaViewBinder {
view.isClickable = viewModel.isClickable view.isClickable = viewModel.isClickable
if (viewModel.isClickable) { if (viewModel.isClickable) {
if (viewModel.useLongPress) { if (viewModel.useLongPress) {
view.setOnTouchListener( val onTouchListener = KeyguardQuickAffordanceOnTouchListener(
KeyguardQuickAffordanceOnTouchListener( view,
view, viewModel,
viewModel, messageDisplayer,
messageDisplayer, vibratorHelper,
vibratorHelper, falsingManager,
falsingManager,
)
) )
view.setOnTouchListener(onTouchListener)
view.onLongClickListener =
OnLongClickListener(falsingManager, viewModel, vibratorHelper, onTouchListener)
} else { } else {
view.setOnClickListener(OnClickListener(viewModel, checkNotNull(falsingManager))) view.setOnClickListener(OnClickListener(viewModel, checkNotNull(falsingManager)))
} }
} else { } else {
view.onLongClickListener = null
view.setOnClickListener(null) view.setOnClickListener(null)
view.setOnTouchListener(null) view.setOnTouchListener(null)
} }
@@ -454,6 +456,42 @@ object KeyguardBottomAreaViewBinder {
.start() .start()
} }
private class OnLongClickListener(
private val falsingManager: FalsingManager?,
private val viewModel: KeyguardQuickAffordanceViewModel,
private val vibratorHelper: VibratorHelper?,
private val onTouchListener: KeyguardQuickAffordanceOnTouchListener
) : View.OnLongClickListener {
override fun onLongClick(view: View): Boolean {
if (falsingManager?.isFalseLongTap(FalsingManager.MODERATE_PENALTY) == true) {
return true
}
if (viewModel.configKey != null) {
viewModel.onClicked(
KeyguardQuickAffordanceViewModel.OnClickedParameters(
configKey = viewModel.configKey,
expandable = Expandable.fromView(view),
slotId = viewModel.slotId,
)
)
vibratorHelper?.vibrate(
if (viewModel.isActivated) {
KeyguardBottomAreaVibrations.Activated
} else {
KeyguardBottomAreaVibrations.Deactivated
}
)
}
onTouchListener.cancel()
return true
}
override fun onLongClickUseDefaultHapticFeedback(view: View?) = false
}
private class OnClickListener( private class OnClickListener(
private val viewModel: KeyguardQuickAffordanceViewModel, private val viewModel: KeyguardQuickAffordanceViewModel,
private val falsingManager: FalsingManager, private val falsingManager: FalsingManager,

View File

@@ -46,7 +46,7 @@ class KeyguardQuickAffordanceOnTouchListener(
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun onTouch(v: View, event: MotionEvent): Boolean { override fun onTouch(v: View, event: MotionEvent): Boolean {
return when (event.actionMasked) { return when (event.actionMasked) {
MotionEvent.ACTION_DOWN -> MotionEvent.ACTION_DOWN -> {
if (viewModel.configKey != null) { if (viewModel.configKey != null) {
downDisplayCoords.set(event.rawX, event.rawY) downDisplayCoords.set(event.rawX, event.rawY)
if (isUsingAccurateTool(event)) { if (isUsingAccurateTool(event)) {
@@ -62,21 +62,10 @@ class KeyguardQuickAffordanceOnTouchListener(
.scaleX(PRESSED_SCALE) .scaleX(PRESSED_SCALE)
.scaleY(PRESSED_SCALE) .scaleY(PRESSED_SCALE)
.setDuration(longPressDurationMs) .setDuration(longPressDurationMs)
.withEndAction {
if (
falsingManager?.isFalseLongTap(
FalsingManager.MODERATE_PENALTY
) == false
) {
dispatchClick(viewModel.configKey)
}
cancel()
}
} }
true
} else {
false
} }
false
}
MotionEvent.ACTION_MOVE -> { MotionEvent.ACTION_MOVE -> {
if (!isUsingAccurateTool(event)) { if (!isUsingAccurateTool(event)) {
// Moving too far while performing a long-press gesture cancels that // Moving too far while performing a long-press gesture cancels that
@@ -91,7 +80,7 @@ class KeyguardQuickAffordanceOnTouchListener(
cancel() cancel()
} }
} }
true false
} }
MotionEvent.ACTION_UP -> { MotionEvent.ACTION_UP -> {
if (isUsingAccurateTool(event)) { if (isUsingAccurateTool(event)) {
@@ -146,7 +135,7 @@ class KeyguardQuickAffordanceOnTouchListener(
} }
) )
} }
true false
} }
MotionEvent.ACTION_CANCEL -> { MotionEvent.ACTION_CANCEL -> {
cancel() cancel()
@@ -179,7 +168,7 @@ class KeyguardQuickAffordanceOnTouchListener(
view.setOnClickListener(null) view.setOnClickListener(null)
} }
private fun cancel(onAnimationEnd: Runnable? = null) { fun cancel(onAnimationEnd: Runnable? = null) {
longPressAnimator?.cancel() longPressAnimator?.cancel()
longPressAnimator = null longPressAnimator = null
view.animate().scaleX(1f).scaleY(1f).withEndAction(onAnimationEnd) view.animate().scaleX(1f).scaleY(1f).withEndAction(onAnimationEnd)