abouttreesummaryrefslogcommitdiff
diff options
context:
space:
mode:
authorJules Aguillon2022-03-15 20:44:02 +0100
committerJules Aguillon2022-03-15 20:44:02 +0100
commitd53ee811d97692cebe91a5d5d2207dca4d5b8fd8 (patch)
tree519b7d6f939f2295839f3c7717d0228fcb3711a1
parentfadedfd58f1bc62aea8e913662984f84f20631bf (diff)
downloadunexpected-keyboard-d53ee811d97692cebe91a5d5d2207dca4d5b8fd8.tar.gz
unexpected-keyboard-d53ee811d97692cebe91a5d5d2207dca4d5b8fd8.zip
Handle CANCEL touch events
Handling this event is part of the API but was never done. This caused unstoppable key-repeat. This event isn't common, the only way I found on Android 10 is to switch to the emoji keyboard while holding a key. Some apps might cause this event more often.
-rw-r--r--srcs/juloo.keyboard2/Keyboard2View.java9
-rw-r--r--srcs/juloo.keyboard2/Pointers.java10
2 files changed, 16 insertions, 3 deletions
diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java
index 43274a9..a6ab99c 100644
--- a/srcs/juloo.keyboard2/Keyboard2View.java
+++ b/srcs/juloo.keyboard2/Keyboard2View.java
@@ -115,7 +115,7 @@ public class Keyboard2View extends View
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
_pointers.onTouchUp(event.getPointerId(event.getActionIndex()));
- break ;
+ break;
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
p = event.getActionIndex();
@@ -124,11 +124,14 @@ public class Keyboard2View extends View
KeyboardData.Key key = getKeyAtPosition(tx, ty);
if (key != null)
_pointers.onTouchDown(tx, ty, event.getPointerId(p), key);
- break ;
+ break;
case MotionEvent.ACTION_MOVE:
for (p = 0; p < event.getPointerCount(); p++)
_pointers.onTouchMove(event.getX(p), event.getY(p), event.getPointerId(p));
- break ;
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ _pointers.onTouchCancel(event.getPointerId(event.getActionIndex()));
+ break;
default:
return (false);
}
diff --git a/srcs/juloo.keyboard2/Pointers.java b/srcs/juloo.keyboard2/Pointers.java
index 36a53d5..e6db206 100644
--- a/srcs/juloo.keyboard2/Pointers.java
+++ b/srcs/juloo.keyboard2/Pointers.java
@@ -95,6 +95,16 @@ public final class Pointers implements Handler.Callback
}
}
+ public void onTouchCancel(int pointerId)
+ {
+ Pointer ptr = getPtr(pointerId);
+ if (ptr == null)
+ return;
+ stopKeyRepeat(ptr);
+ removePtr(ptr);
+ _handler.onPointerFlagsChanged();
+ }
+
public void onTouchDown(float x, float y, int pointerId, KeyboardData.Key key)
{
KeyValue value = key.key0;