Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f731eb17 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Add separate key hysteresis distance for sliding modifier input

Bug: 7294402
Change-Id: I78c8be9e1a7b2d49d86bfe1e3a46d1785bfe5d48
parent 448e7322
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -109,6 +109,8 @@
        <attr name="altCodeKeyWhileTypingFadeinAnimator" format="reference" />
        <!-- Key detection hysteresis distance. -->
        <attr name="keyHysteresisDistance" format="dimension" />
        <!-- Key detection hysteresis distance for shift/symbols sliding input. -->
        <attr name="keyHysteresisDistanceForSlidingModifier" format="dimension" />
        <!-- Touch noise threshold time in millisecond -->
        <attr name="touchNoiseThresholdTime" format="integer" />
        <!-- Touch noise threshold distance in millimeter -->
+1 −0
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@
         Configuration for MainKeyboardView
    -->
    <dimen name="config_key_hysteresis_distance">8.0dp</dimen>
    <dimen name="config_key_hysteresis_distance_for_sliding_modifier">8.0dp</dimen>
    <integer name="config_touch_noise_threshold_time">40</integer>
    <dimen name="config_touch_noise_threshold_distance">12.6dp</dimen>
    <bool name="config_sliding_key_input_enabled">true</bool>
+1 −0
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@
        <item name="gesturePreviewTrailEndWidth">@dimen/gesture_preview_trail_end_width</item>
        <!-- Common attributes of MainKeyboardView -->
        <item name="keyHysteresisDistance">@dimen/config_key_hysteresis_distance</item>
        <item name="keyHysteresisDistanceForSlidingModifier">@dimen/config_key_hysteresis_distance_for_sliding_modifier</item>
        <item name="touchNoiseThresholdTime">@integer/config_touch_noise_threshold_time</item>
        <item name="touchNoiseThresholdDistance">@dimen/config_touch_noise_threshold_distance</item>
        <item name="slidingKeyInputEnable">@bool/config_sliding_key_input_enabled</item>
+19 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.inputmethod.latin.Constants;

public class KeyDetector {
    private final int mKeyHysteresisDistanceSquared;
    private final int mKeyHysteresisDistanceForSlidingModifierSquared;

    private Keyboard mKeyboard;
    private int mCorrectionX;
@@ -30,10 +31,24 @@ public class KeyDetector {
     * This class handles key detection.
     *
     * @param keyHysteresisDistance if the pointer movement distance is smaller than this, the
     * movement will not been handled as meaningful movement. The unit is pixel.
     * movement will not be handled as meaningful movement. The unit is pixel.
     */
    public KeyDetector(float keyHysteresisDistance) {
        this(keyHysteresisDistance, keyHysteresisDistance);
    }

    /**
     * This class handles key detection.
     *
     * @param keyHysteresisDistance if the pointer movement distance is smaller than this, the
     * movement will not be handled as meaningful movement. The unit is pixel.
     * @param keyHysteresisDistanceForSlidingModifier the same parameter for sliding input that
     * starts from a modifier key such as shift and symbols key.
     */
    public KeyDetector(float keyHysteresisDistance, float keyHysteresisDistanceForSlidingModifier) {
        mKeyHysteresisDistanceSquared = (int)(keyHysteresisDistance * keyHysteresisDistance);
        mKeyHysteresisDistanceForSlidingModifierSquared = (int)(
                keyHysteresisDistanceForSlidingModifier * keyHysteresisDistanceForSlidingModifier);
    }

    public void setKeyboard(Keyboard keyboard, float correctionX, float correctionY) {
@@ -45,8 +60,9 @@ public class KeyDetector {
        mKeyboard = keyboard;
    }

    public int getKeyHysteresisDistanceSquared() {
        return mKeyHysteresisDistanceSquared;
    public int getKeyHysteresisDistanceSquared(boolean isSlidingFromModifier) {
        return isSlidingFromModifier
                ? mKeyHysteresisDistanceForSlidingModifierSquared : mKeyHysteresisDistanceSquared;
    }

    public int getTouchX(int x) {
+4 −1
Original line number Diff line number Diff line
@@ -389,7 +389,10 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack

        final float keyHysteresisDistance = a.getDimension(
                R.styleable.MainKeyboardView_keyHysteresisDistance, 0);
        mKeyDetector = new KeyDetector(keyHysteresisDistance);
        final float keyHysteresisDistanceForSlidingModifier = a.getDimension(
                R.styleable.MainKeyboardView_keyHysteresisDistanceForSlidingModifier, 0);
        mKeyDetector = new KeyDetector(
                keyHysteresisDistance, keyHysteresisDistanceForSlidingModifier);
        mKeyTimerHandler = new KeyTimerHandler(this, a);
        mConfigShowMoreKeysKeyboardAtTouchedPoint = a.getBoolean(
                R.styleable.MainKeyboardView_showMoreKeysKeyboardAtTouchedPoint, false);
Loading