mirror of
https://github.com/florisboard/florisboard.git
synced 2024-09-20 03:52:18 +02:00
Fix glide threshold using incorrect units (#1023)
This commit is contained in:
parent
977b32de6e
commit
cdb9504e5f
@ -5,6 +5,8 @@ import android.view.MotionEvent
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKey
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
||||
import dev.patrickgold.florisboard.lib.util.ViewUtils
|
||||
import kotlin.math.pow
|
||||
import kotlin.math.sqrt
|
||||
|
||||
@ -18,13 +20,13 @@ class GlideTypingGesture {
|
||||
*/
|
||||
class Detector(context: Context) {
|
||||
private var pointerData: PointerData = PointerData(mutableListOf(), 0)
|
||||
private val keySize = context.resources.getDimensionPixelSize(R.dimen.key_width).toDouble()
|
||||
private val keySize = ViewUtils.px2dp(context.resources.getDimension(R.dimen.key_width))
|
||||
private val listeners: ArrayList<Listener> = arrayListOf()
|
||||
private var pointerId: Int = -1
|
||||
|
||||
companion object {
|
||||
private const val MAX_DETECT_TIME = 500
|
||||
private const val VELOCITY_THRESHOLD = 0.65
|
||||
private const val VELOCITY_THRESHOLD = 0.10 // dp per ms
|
||||
private val SWIPE_GESTURE_KEYS = arrayOf(KeyCode.DELETE, KeyCode.SHIFT, KeyCode.SPACE, KeyCode.CJK_SPACE)
|
||||
}
|
||||
|
||||
@ -37,13 +39,13 @@ class GlideTypingGesture {
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN,
|
||||
MotionEvent.ACTION_POINTER_DOWN -> {
|
||||
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||
resetState()
|
||||
}
|
||||
if (pointerId != -1) {
|
||||
// if we already have another pointer, we don't care
|
||||
return false
|
||||
}
|
||||
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||
resetState()
|
||||
}
|
||||
val pointerIndex = event.actionIndex
|
||||
pointerId = event.getPointerId(pointerIndex)
|
||||
pointerData.apply {
|
||||
@ -67,8 +69,9 @@ class GlideTypingGesture {
|
||||
pointerData.positions.add(pos)
|
||||
if (pointerData.isActuallyGesture == null) {
|
||||
// evaluate whether is actually a gesture
|
||||
val dist = pointerData.positions[0].dist(pos)
|
||||
val dist = ViewUtils.px2dp(pointerData.positions[0].dist(pos))
|
||||
val time = (System.currentTimeMillis() - pointerData.startTime) + 1
|
||||
flogDebug { "Distance glided: $dist dp with velocity: ${dist / time} dp/ms" }
|
||||
if (dist > keySize && (dist / time) > VELOCITY_THRESHOLD && (initialKey?.computedData?.code !in SWIPE_GESTURE_KEYS)) {
|
||||
pointerData.isActuallyGesture = true
|
||||
// Let listener know all those points need to be added.
|
||||
|
@ -474,7 +474,8 @@ private class TextKeyboardLayoutController(
|
||||
swipeGestureDetector.onTouchEvent(event)
|
||||
if (isGlideEnabled && keyboard.mode == KeyboardMode.CHARACTERS) {
|
||||
val glidePointer = pointerMap.findById(0)
|
||||
if (glideTypingDetector.onTouchEvent(event, glidePointer?.initialKey)) {
|
||||
val isNotBlocked = glidePointer?.hasTriggeredLongPress != true
|
||||
if (isNotBlocked && glideTypingDetector.onTouchEvent(event, glidePointer?.initialKey)) {
|
||||
for (pointer in pointerMap) {
|
||||
if (pointer.activeKey != null) {
|
||||
onTouchCancelInternal(event, pointer)
|
||||
@ -611,6 +612,7 @@ private class TextKeyboardLayoutController(
|
||||
pointer.pressedKeyInfo = inputEventDispatcher.sendDown(
|
||||
data = key.computedData,
|
||||
onLongPress = onLongPress@ {
|
||||
pointer.hasTriggeredLongPress = true
|
||||
when (key.computedData.code) {
|
||||
KeyCode.SPACE, KeyCode.CJK_SPACE -> {
|
||||
when (prefs.gestures.spaceBarLongPress.get()) {
|
||||
@ -1005,6 +1007,7 @@ private class TextKeyboardLayoutController(
|
||||
var initialKey: TextKey? = null
|
||||
var activeKey: TextKey? = null
|
||||
var hasTriggeredGestureMove: Boolean = false
|
||||
var hasTriggeredLongPress: Boolean = false
|
||||
var pressedKeyInfo: InputEventDispatcher.PressedKeyInfo? = null
|
||||
|
||||
override fun reset() {
|
||||
@ -1012,6 +1015,7 @@ private class TextKeyboardLayoutController(
|
||||
initialKey = null
|
||||
activeKey = null
|
||||
hasTriggeredGestureMove = false
|
||||
hasTriggeredLongPress = false
|
||||
pressedKeyInfo = null
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user