use timeout for both space swipe directions, and require minimum move distance

fixes #555
This commit is contained in:
Helium314 2024-03-14 02:58:12 +01:00
parent 0ccc500c1e
commit 7058fb78b8

View file

@ -11,11 +11,7 @@ import static java.lang.Math.abs;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.os.SystemClock; import android.os.SystemClock;
import helium314.keyboard.keyboard.internal.keyboard_parser.floris.KeyCode;
import helium314.keyboard.latin.utils.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.inputmethod.InputMethodSubtype;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -32,18 +28,18 @@ import helium314.keyboard.keyboard.internal.GestureStrokeRecognitionParams;
import helium314.keyboard.keyboard.internal.PointerTrackerQueue; import helium314.keyboard.keyboard.internal.PointerTrackerQueue;
import helium314.keyboard.keyboard.internal.TimerProxy; import helium314.keyboard.keyboard.internal.TimerProxy;
import helium314.keyboard.keyboard.internal.TypingTimeRecorder; import helium314.keyboard.keyboard.internal.TypingTimeRecorder;
import helium314.keyboard.keyboard.internal.keyboard_parser.floris.KeyCode;
import helium314.keyboard.latin.R; import helium314.keyboard.latin.R;
import helium314.keyboard.latin.RichInputMethodManager;
import helium314.keyboard.latin.common.Constants; import helium314.keyboard.latin.common.Constants;
import helium314.keyboard.latin.common.CoordinateUtils; import helium314.keyboard.latin.common.CoordinateUtils;
import helium314.keyboard.latin.common.InputPointers; import helium314.keyboard.latin.common.InputPointers;
import helium314.keyboard.latin.define.DebugFlags; import helium314.keyboard.latin.define.DebugFlags;
import helium314.keyboard.latin.settings.Settings; import helium314.keyboard.latin.settings.Settings;
import helium314.keyboard.latin.settings.SettingsValues; import helium314.keyboard.latin.settings.SettingsValues;
import helium314.keyboard.latin.utils.Log;
import helium314.keyboard.latin.utils.ResourceUtils; import helium314.keyboard.latin.utils.ResourceUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Locale; import java.util.Locale;
public final class PointerTracker implements PointerTrackerQueue.Element, public final class PointerTracker implements PointerTrackerQueue.Element,
@ -905,12 +901,16 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
final SettingsValues sv = Settings.getInstance().getCurrent(); final SettingsValues sv = Settings.getInstance().getCurrent();
if (oldKey != null && oldKey.getCode() == Constants.CODE_SPACE) { if (oldKey != null && oldKey.getCode() == Constants.CODE_SPACE) {
// reason for timeout: https://github.com/openboard-team/openboard/issues/411
final int longpressTimeout = 2 * sv.mKeyLongpressTimeout / MULTIPLIER_FOR_LONG_PRESS_TIMEOUT_IN_SLIDING_INPUT;
if (mStartTime + longpressTimeout > System.currentTimeMillis())
return;
int dX = x - mStartX; int dX = x - mStartX;
int dY = y - mStartY; int dY = y - mStartY;
// vertical movement // vertical movement
int stepsY = dY / sPointerStep; int stepsY = dY / sPointerStep;
if (abs(dX) < abs(dY) && !mInHorizontalSwipe) { if (stepsY != 0 && abs(dX) < abs(dY) && !mInHorizontalSwipe) {
mInVerticalSwipe = true; mInVerticalSwipe = true;
if (sListener.onVerticalSpaceSwipe(stepsY)) { if (sListener.onVerticalSpaceSwipe(stepsY)) {
mStartY += stepsY * sPointerStep; mStartY += stepsY * sPointerStep;
@ -920,8 +920,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
// Horizontal movement // Horizontal movement
int stepsX = dX / sPointerStep; int stepsX = dX / sPointerStep;
final int longpressTimeout = 2 * sv.mKeyLongpressTimeout / MULTIPLIER_FOR_LONG_PRESS_TIMEOUT_IN_SLIDING_INPUT; if (stepsX != 0 && !mInVerticalSwipe) {
if (!mInVerticalSwipe && mStartTime + longpressTimeout < System.currentTimeMillis()) {
mInHorizontalSwipe = true; mInHorizontalSwipe = true;
if (sListener.onHorizontalSpaceSwipe(stepsX)) { if (sListener.onHorizontalSpaceSwipe(stepsX)) {
mStartX += stepsX * sPointerStep; mStartX += stepsX * sPointerStep;