0
0
mirror of https://github.com/florisboard/florisboard.git synced 2024-09-19 19:42:20 +02:00

Fix glide threshold using incorrect units (#1023)

This commit is contained in:
Patrick Goldinger 2022-05-14 12:38:45 +02:00
parent 977b32de6e
commit cdb9504e5f
2 changed files with 14 additions and 7 deletions

View File

@ -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.

View File

@ -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
}