Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug(web): longpress up-flick shortcut usability issues - too easy to trigger #10647

Closed
mcdurdin opened this issue Feb 6, 2024 · 11 comments · Fixed by #11306
Closed

bug(web): longpress up-flick shortcut usability issues - too easy to trigger #10647

mcdurdin opened this issue Feb 6, 2024 · 11 comments · Fixed by #11306
Assignees
Milestone

Comments

@mcdurdin
Copy link
Member

mcdurdin commented Feb 6, 2024

Keyman 17.0.256-alpha on Android, Samsung A53/5G phone, Android 14

In this example, the e key gets a diacritic at about 8 seconds. There are other examples as well.

Screen_Recording_20240206_104531_Keep.Notes.mp4

No, I am not attempting to type precisely or use suggested corrections for this video. 😁

@jahorton
Copy link
Contributor

jahorton commented Feb 6, 2024

Re: one of the keypresses:

image

And the other:

image

So, remember that up-flick longpress shortcut? I'm blaming that. Sounds like we may need to take one or more of the following approaches:

  1. Increase the up-flick distance threshold.
  2. If completed via up-flick, require a certain amount of time pass; if that time doesn't elapse, the subkey-selection process gets cancelled in favor of the base key.

@jahorton jahorton changed the title bug(android): typing rapidly leads to unexpected diacritics bug(web): longpress up-flick shortcut usability issues Feb 6, 2024
@mcdurdin mcdurdin modified the milestones: B17S1, B17S2 Feb 17, 2024
@mcdurdin mcdurdin modified the milestones: B17S2, B17S3 Mar 3, 2024
@jahorton jahorton changed the title bug(web): longpress up-flick shortcut usability issues bug(web): longpress up-flick shortcut usability issues - too easy to trigger Mar 4, 2024
@keymanapp-test-bot keymanapp-test-bot bot added web/ and removed android/ labels Mar 4, 2024
@darcywong00 darcywong00 modified the milestones: B17S3, B17S4 Mar 16, 2024
@mcdurdin mcdurdin modified the milestones: B17S4, B17S5 Mar 30, 2024
@darcywong00 darcywong00 modified the milestones: B17S5, B17S6 Apr 12, 2024
@mcdurdin
Copy link
Member Author

mcdurdin commented Apr 26, 2024

Here's a repro with attached video. (Logging per #11277)

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

Screen_Recording_20240426_092243_Keyman.Beta.mp4
[
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_N",
      "sources": [
        {
          "identifier": "touch:525",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 248.33334350585938,
                "targetY": 138.33334350585938,
                "t": 132597186,
                "item": "default-K_N"
              },
              {
                "targetX": 248.2890625,
                "targetY": 138.33334350585938,
                "t": 132597207.9000001,
                "item": "default-K_N"
              },
              {
                "targetX": 248.33334350585938,
                "targetY": 138.33334350585938,
                "t": 132597210.10000014,
                "item": "default-K_N"
              },
              {
                "targetX": 248.62240600585938,
                "targetY": 137.7548828125,
                "t": 132597259.60000014,
                "item": "default-K_N"
              },
              {
                "targetX": 248.6666717529297,
                "targetY": 137.6666717529297,
                "t": 132597268.29999995,
                "item": "default-K_N"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0.7453582671771405,
              "duration": 82.29999995231628,
              "sampleCount": 5,
              "rawDistance": 0.833920400327363
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:525"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:526",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 302.66668701171875,
                "targetY": 45,
                "t": 132597403.5,
                "item": "default-K_O"
              },
              {
                "targetX": 302.6224060058594,
                "targetY": 45,
                "t": 132597418,
                "item": "default-K_O"
              },
              {
                "targetX": 302.66668701171875,
                "targetY": 45,
                "t": 132597430.70000005,
                "item": "default-K_O"
              },
              {
                "targetX": 302.66668701171875,
                "targetY": 45,
                "t": 132597443.29999995,
                "item": "default-K_O"
              },
              {
                "targetX": 297.39422607421875,
                "targetY": 50.93522644042969,
                "t": 132597475.9000001,
                "item": "default-K_L"
              },
              {
                "targetX": 297.39422607421875,
                "targetY": 50.93522644042969,
                "t": 132597476.4000001,
                "item": "default-K_L"
              },
              {
                "targetX": 296.75946044921875,
                "targetY": 51.57389831542969,
                "t": 132597486.10000014,
                "item": "default-K_L"
              },
              {
                "targetX": 296.66668701171875,
                "targetY": 51.66667175292969,
                "t": 132597491.20000005,
                "item": "default-K_L"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 3.8744073760143007,
              "cardinal": "sw",
              "netDistance": 8.969086478639316,
              "duration": 87.70000004768372,
              "sampleCount": 8,
              "rawDistance": 9.059100314101052
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:526"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "flick-start",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:527",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 153.6666717529297,
                "targetY": 30.666671752929688,
                "t": 132597516.20000005,
                "item": "default-K_T"
              },
              {
                "targetX": 153.6666717529297,
                "targetY": 30.666671752929688,
                "t": 132597525,
                "item": "default-K_T"
              },
              {
                "targetX": 151.5416717529297,
                "targetY": 35.652671813964844,
                "t": 132597577,
                "item": "default-K_T"
              },
              {
                "targetX": 148.3434295654297,
                "targetY": 39.44987487792969,
                "t": 132597585.70000005,
                "item": "default-K_T"
              },
              {
                "targetX": 147,
                "targetY": 41,
                "t": 132597591.9000001,
                "item": "default-K_T"
              }
            ],
            "stats": {
              "angle": 3.71455936826273,
              "cardinal": "sw",
              "netDistance": 12.297242980563237,
              "duration": 75.70000004768372,
              "sampleCount": 5,
              "rawDistance": 12.435837605769263
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:527"
      ]
    },
    {
      "gestureSetId": "default",
      "matchedId": "flick-reset-end",
      "linkType": "complete",
      "item": "default-K_T",
      "sources": [],
      "allSourceIds": [
        "touch:527"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_SPACE",
      "sources": [
        {
          "identifier": "touch:528",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 225.6666717529297,
                "targetY": 173,
                "t": 132597638.60000014,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 225.6666717529297,
                "targetY": 172.9557342529297,
                "t": 132597658.4000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 225.6666717529297,
                "targetY": 173,
                "t": 132597662,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 225.9557342529297,
                "targetY": 172.4215545654297,
                "t": 132597702.29999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 226,
                "targetY": 172.33334350585938,
                "t": 132597712.10000014,
                "item": "default-K_SPACE"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0.7453446192700639,
              "duration": 73.5,
              "sampleCount": 5,
              "rawDistance": 0.833876233325523
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:528"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "longpress",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:529",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 134.33334350585938,
                "targetY": 41.66667175292969,
                "t": 132597771.10000014,
                "item": "default-K_R"
              },
              {
                "targetX": 126.07682800292969,
                "targetY": 36.3798828125,
                "t": 132597837.9000001,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 31.377609252929688,
                "t": 132597853.29999995,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 31.377609252929688,
                "t": 132597854.29999995,
                "item": "default-K_R"
              }
            ],
            "stats": {
              "angle": 5.286392476605971,
              "cardinal": "nw",
              "netDistance": 18.94861035574078,
              "duration": 83.19999980926514,
              "sampleCount": 4,
              "rawDistance": 18.948812886232915
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:529"
      ]
    },
    {
      "gestureSetId": "none",
      "matchedId": "subkey-select",
      "linkType": "complete",
      "item": "popup-default-U_0213",
      "sources": [
        {
          "identifier": "touch:529",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 134.33334350585938,
                "targetY": 94.66667175292969,
                "t": 132597771.10000014,
                "item": "default-K_R"
              },
              {
                "targetX": 126.07682800292969,
                "targetY": 89.3798828125,
                "t": 132597837.9000001,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 84.37760925292969,
                "t": 132597853.29999995,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 84.37760925292969,
                "t": 132597854.29999995,
                "item": "default-K_R"
              },
              {
                "targetX": 118.33333587646484,
                "targetY": 84.33333587646484,
                "t": 132597894.29999995,
                "item": "popup-default-U_0213"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 5.28582940138711,
              "cardinal": "nw",
              "netDistance": 19.04673395825433,
              "duration": 123.19999980926514,
              "sampleCount": 5,
              "rawDistance": 19.047517845309315
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:529"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_E",
      "sources": [
        {
          "identifier": "touch:530",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 88.66667175292969,
                "targetY": 29,
                "t": 132597932.5,
                "item": "default-K_E"
              },
              {
                "targetX": 88.66667175292969,
                "targetY": 29,
                "t": 132597979.70000005,
                "item": "default-K_E"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 47.200000047683716,
              "sampleCount": 2,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:530"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:531",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 322,
                "targetY": 45,
                "t": 132597997.20000005,
                "item": "default-K_O"
              },
              {
                "targetX": 322,
                "targetY": 45,
                "t": 132598089.5,
                "item": "default-K_O"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 92.29999995231628,
              "sampleCount": 2,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:531"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_R",
      "sources": [
        {
          "identifier": "touch:532",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 129,
                "targetY": 34.333335876464844,
                "t": 132598172.60000014,
                "item": "default-K_R"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 0,
              "sampleCount": 1,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:532"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:533",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 308.3333435058594,
                "targetY": 35.66667175292969,
                "t": 132598204,
                "item": "default-K_O"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 0,
              "sampleCount": 1,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:533"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:534",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598347.10000014,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.622398376464844,
                "t": 132598370,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598381.79999995,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598394.4000001,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598404.9000001,
                "item": "default-K_O"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 57.799999952316284,
              "sampleCount": 5,
              "rawDistance": 0.0885467529296875
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:534"
      ]
    }
  ]
]

@mcdurdin
Copy link
Member Author

mcdurdin commented Apr 26, 2024

Another repro.

Highlight is at 0:15 with m intended. (I didn't notice quickly enough to get history for the first unintended r with diacritic!)

Screen_Recording_20240426_092929_Keyman.Beta.mp4
[
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_E",
      "sources": [
        {
          "identifier": "touch:607",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006237.70000005,
                "item": "default-K_E"
              },
              {
                "targetX": 98.37760925292969,
                "targetY": 35.333335876464844,
                "t": 133006254.4000001,
                "item": "default-K_E"
              },
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006255.5,
                "item": "default-K_E"
              },
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006285.4000001,
                "item": "default-K_E"
              },
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006312.4000001,
                "item": "default-K_E"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 74.70000004768372,
              "sampleCount": 5,
              "rawDistance": 0.0885467529296875
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:607"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_SPACE",
      "sources": [
        {
          "identifier": "touch:608",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 240,
                "targetY": 172.6666717529297,
                "t": 133006363.79999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 239,
                "targetY": 172.6666717529297,
                "t": 133006375.9000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 240,
                "targetY": 172.6666717529297,
                "t": 133006392.79999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 237.35678100585938,
                "targetY": 166.7233123779297,
                "t": 133006442.29999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 237,
                "targetY": 166,
                "t": 133006454.29999995,
                "item": "default-K_SPACE"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 5.860331666553952,
              "cardinal": "nw",
              "netDistance": 7.3105753714266974,
              "duration": 90.5,
              "sampleCount": 5,
              "rawDistance": 9.311142895984577
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:608"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "flick-start",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:609",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 193,
                "targetY": 130.6666717529297,
                "t": 133006580.9000001,
                "item": "default-K_B"
              },
              {
                "targetX": 192.9117889404297,
                "targetY": 130.7109375,
                "t": 133006597.70000005,
                "item": "default-K_B"
              },
              {
                "targetX": 193,
                "targetY": 130.6666717529297,
                "t": 133006606.29999995,
                "item": "default-K_B"
              },
              {
                "targetX": 198.59213256835938,
                "targetY": 131.9814453125,
                "t": 133006656.60000014,
                "item": "default-K_B"
              },
              {
                "targetX": 202.3193359375,
                "targetY": 132,
                "t": 133006664.29999995,
                "item": "default-K_B"
              },
              {
                "targetX": 202.6666717529297,
                "targetY": 132,
                "t": 133006672.4000001,
                "item": "default-K_B"
              },
              {
                "targetX": 205.9117889404297,
                "targetY": 130.7109375,
                "t": 133006689.4000001,
                "item": "default-K_B"
              }
            ],
            "stats": {
              "angle": 1.574224633581177,
              "cardinal": "e",
              "netDistance": 12.911864818784546,
              "duration": 108.5,
              "sampleCount": 7,
              "rawDistance": 13.508359026548284
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:609"
      ]
    },
    {
      "gestureSetId": "default",
      "matchedId": "flick-reset-end",
      "linkType": "complete",
      "item": "default-K_B",
      "sources": [],
      "allSourceIds": [
        "touch:609"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_I",
      "sources": [
        {
          "identifier": "touch:610",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 253.33334350585938,
                "targetY": 24.333335876464844,
                "t": 133006806.60000014,
                "item": "default-K_I"
              },
              {
                "targetX": 253.2008514404297,
                "targetY": 24.333335876464844,
                "t": 133006822.9000001,
                "item": "default-K_I"
              },
              {
                "targetX": 253.33334350585938,
                "targetY": 24.333335876464844,
                "t": 133006831.5,
                "item": "default-K_I"
              },
              {
                "targetX": 248.05014038085938,
                "targetY": 32.260093688964844,
                "t": 133006873.29999995,
                "item": "default-K_U"
              },
              {
                "targetX": 248.05014038085938,
                "targetY": 32.260093688964844,
                "t": 133006873.79999995,
                "item": "default-K_U"
              },
              {
                "targetX": 247.4215545654297,
                "targetY": 32.333335876464844,
                "t": 133006882.10000014,
                "item": "default-K_U"
              },
              {
                "targetX": 247.33334350585938,
                "targetY": 32.333335876464844,
                "t": 133006888,
                "item": "default-K_U"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 3.7850937623830774,
              "cardinal": "sw",
              "netDistance": 10,
              "duration": 81.39999985694885,
              "sampleCount": 7,
              "rawDistance": 10.512088716068373
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:610"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_T",
      "sources": [
        {
          "identifier": "touch:611",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 159,
                "targetY": 36,
                "t": 133006948.60000014,
                "item": "default-K_T"
              },
              {
                "targetX": 158.9557342529297,
                "targetY": 36,
                "t": 133006968.9000001,
                "item": "default-K_T"
              },
              {
                "targetX": 159,
                "targetY": 36,
                "t": 133006973.10000014,
                "item": "default-K_T"
              },
              {
                "targetX": 158.6666717529297,
                "targetY": 36.333335876464844,
                "t": 133007024.29999995,
                "item": "default-K_T"
              },
              {
                "targetX": 151.6666717529297,
                "targetY": 39.95573425292969,
                "t": 133007040.70000005,
                "item": "default-K_T"
              },
              {
                "targetX": 151.6666717529297,
                "targetY": 40,
                "t": 133007042.60000014,
                "item": "default-K_T"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 4.213041967135186,
              "cardinal": "sw",
              "netDistance": 8.353304925553678,
              "duration": 94,
              "sampleCount": 6,
              "rawDistance": 8.48593644742464
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:611"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_SPACE",
      "sources": [
        {
          "identifier": "touch:612",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 233.33334350585938,
                "targetY": 163,
                "t": 133007049,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 233.33334350585938,
                "targetY": 163,
                "t": 133007077.4000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 233.8740234375,
                "targetY": 153.26498413085938,
                "t": 133007108.4000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 234,
                "targetY": 151,
                "t": 133007125,
                "item": "default-K_SPACE"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 0.05549766014351466,
              "cardinal": "n",
              "netDistance": 12.018503687280704,
              "duration": 76,
              "sampleCount": 4,
              "rawDistance": 12.01850369305674
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:612"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "longpress",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:613",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 256.3333435058594,
                "targetY": 130,
                "t": 133007215.79999995,
                "item": "default-K_M"
              },
              {
                "targetX": 257.3232421875,
                "targetY": 121.41342163085938,
                "t": 133007291.10000014,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298.70000005,
                "item": "default-K_M"
              }
            ],
            "stats": {
              "angle": 0.09078383549729901,
              "cardinal": "n",
              "netDistance": 18.312058034521733,
              "duration": 82.90000009536743,
              "sampleCount": 4,
              "rawDistance": 18.316768945725826
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:613"
      ]
    },
    {
      "gestureSetId": "none",
      "matchedId": "subkey-select",
      "linkType": "complete",
      "item": "popup-default-U_1E41",
      "sources": [
        {
          "identifier": "touch:613",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 44.333343505859375,
                "targetY": 84,
                "t": 133007215.79999995,
                "item": "default-K_M"
              },
              {
                "targetX": 45.3232421875,
                "targetY": 75.41342163085938,
                "t": 133007291.10000014,
                "item": "default-K_M"
              },
              {
                "targetX": 45.993499755859375,
                "targetY": 65.76335144042969,
                "t": 133007298,
                "item": "default-K_M"
              },
              {
                "targetX": 45.993499755859375,
                "targetY": 65.76335144042969,
                "t": 133007298.70000005,
                "item": "default-K_M"
              },
              {
                "targetX": 46,
                "targetY": 65.08822631835938,
                "t": 133007309.70000005,
                "item": "popup-default-U_1E41"
              },
              {
                "targetX": 46,
                "targetY": 65,
                "t": 133007320,
                "item": "popup-default-U_1E41"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 0.08749480949450114,
              "cardinal": "n",
              "netDistance": 19.0729584456492,
              "duration": 104.20000004768372,
              "sampleCount": 6,
              "rawDistance": 19.080151678277012
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:613"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_U",
      "sources": [
        {
          "identifier": "touch:614",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 236.33334350585938,
                "targetY": 47.333335876464844,
                "t": 133007409.5,
                "item": "default-K_U"
              },
              {
                "targetX": 236.2890625,
                "targetY": 47.333335876464844,
                "t": 133007417,
                "item": "default-K_U"
              },
              {
                "targetX": 236.33334350585938,
                "targetY": 47.333335876464844,
                "t": 133007423.60000014,
                "item": "default-K_U"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 14.100000143051147,
              "sampleCount": 3,
              "rawDistance": 0.08856201171875
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:614"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_S",
      "sources": [
        {
          "identifier": "touch:615",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007497.79999995,
                "item": "default-K_S"
              },
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007507.79999995,
                "item": "default-K_S"
              },
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007509.70000005,
                "item": "default-K_S"
              },
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007548.70000005,
                "item": "default-K_S"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 50.90000009536743,
              "sampleCount": 4,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:615"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_T",
      "sources": [
        {
          "identifier": "touch:616",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 157,
                "targetY": 42,
                "t": 133007675,
                "item": "default-K_T"
              },
              {
                "targetX": 156.9557342529297,
                "targetY": 42,
                "t": 133007696.29999995,
                "item": "default-K_T"
              },
              {
                "targetX": 157,
                "targetY": 42,
                "t": 133007708.10000014,
                "item": "default-K_T"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 33.10000014305115,
              "sampleCount": 3,
              "rawDistance": 0.088531494140625
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:616"
      ]
    }
  ]
]

@jahorton
Copy link
Contributor

Interesting tidbit 1:

{
  "gestureSetId": "default",
  "matchedId": "flick-start",
  "linkType": "chain",
  "sources": [
    {
      "identifier": "touch:527",
      "isFromTouch": true,
      "path": {
        "coords": [/* ... */],
        "stats": {
          "angle": 3.71455936826273,
          "cardinal": "sw",
          "netDistance": 12.297242980563237,
          "duration": 75.70000004768372,
          "sampleCount": 5,
          "rawDistance": 12.435837605769263
        }
      },
      "stateToken": "default"
    }
  ]
}

That is a surprisingly low 'netDistance' for the flick-start to trigger. I'd ask if it was intended, but the rest of that gesture's lifetime indicates yes - you did go all the way to flick-end.

@mcdurdin
Copy link
Member Author

I'd ask if it was intended, but the rest of that gesture's lifetime indicates yes - you did go all the way to flick-end.

I did no intentional flicks in either video

@jahorton
Copy link
Contributor

jahorton commented Apr 26, 2024

    {
      "gestureSetId": "default",
      "matchedId": "longpress",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:613",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 256.3333435058594,
                "targetY": 130,
                "t": 133007215.79999995,
                "item": "default-K_M"
              },
              {
                "targetX": 257.3232421875,
                "targetY": 121.41342163085938,
                "t": 133007291.10000014,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298.70000005,
                "item": "default-K_M"
              }
            ],
            "stats": {
              "angle": 0.09078383549729901,
              "cardinal": "n",
              "netDistance": 18.312058034521733,
              "duration": 82.90000009536743,
              "sampleCount": 4,
              "rawDistance": 18.316768945725826
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:613"
      ]
    }

That's 18 pixels of movement that it recorded, all within the span of 83ms. If the second tap weren't there, I'd have a reason to question if the coordinate-remapper (for layer changes, etc) did something odd, but it is present. (You can see remapper effects in its following "subkey-select" section - the original coordinates are included, but remapped based on the subkey display area.)

@jahorton
Copy link
Contributor

I'd ask if it was intended, but the rest of that gesture's lifetime indicates yes - you did go all the way to flick-end.

I did no intentional flicks in either video

Oh. Guess I skimmed to fast; you're right, as it does end with flick-reset-end. That simply outputs the base key, and if you never got far, you probably wouldn't even have noticed any flick-preview scrolling.

@mcdurdin
Copy link
Member Author

Added a note to the first video:

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

And second:

Highlight is at 0:15 with m intended.

@jahorton
Copy link
Contributor

jahorton commented Apr 26, 2024

Added a note to the first video:

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

And second:

Highlight is at 0:15 with m intended.

The initial touch location of the 'r', as indicated by the opacity of the touch-indicator on the key.

initial 'r' press location

The gesture-engine notes 'yep, it's been touched' here after a delay of two or three frames and finally displays the key-preview here.

key-preview activates

Two frames later, the subkey menu displays:

subkey menu gets activated

One frame later, the subkey is activated and output... with the subkey menu still showing for a moment. (Its cancellation is triggered by recognition of the end of the gesture, which is processed after the last gesture-component match.)

Subkey is output, with the subkey menu still visible

Two frames later, the subkey menu disappears.

@jahorton
Copy link
Contributor

jahorton commented Apr 26, 2024

One notable thing from that sequence of images - less than half of the 'flick' distance was actually north-directed - a substantial component of the motion was horizontal. That is something that could be cleaned up.

A focused 'start' and 'end' comparison, excerpted from the screenshots above:

start vs end

I'd say that's about a 30-degree angle, direction between north-east and east-north-east.

From the path-model as it is:

'n', 'nw', and 'ne' - approx 67.5 degrees on each side of due N in total.

30 degrees from horizontal would fall within that.

@jahorton
Copy link
Contributor

Added a note to the first video:

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

And second:

Highlight is at 0:15 with m intended.

And that would be the one I extracted above. I only later realized you had two different recordings... but there are others with clearer stats for the 'unintended' cases. Sadly, the 'r' I focused on above was kicked out of history before you stopped (I kept it to the most recent 10), but the first sequence has a good one:

"stats": {
  "angle": 5.28582940138711,
  "cardinal": "nw",
  "netDistance": 19.04673395825433,
  "duration": 123.19999980926514,
  "sampleCount": 5,
  "rawDistance": 19.047517845309315
}

That angle corresponds to 302.9 degrees - or -57.1 degrees, a generally 'nw' direction. Its purely-vertical distance is only 54.3% of its netDistance... which would have put the vertical distance travelled at only 10.36 px. That'd be well within the threshold if I had it properly checking only the vertical component.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants