A swipe onto a panel the app was already heading for is still a swipe #26
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
mobrule/kurageyomi#26
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#1
What is wrong, with evidence
Two reports that turn out to be one bug: swiping the Cue strip is inconsistent, and turning on
Swiping seeks the showchanges nothing. The setting itself is fine — the header label and the diagnostics state both flip with it, confirmed on the phone. The swipe path never acts on it.From #24's log, taken while the reader was swiping:
Those
appverdicts are the reader's own swipes, misjudged.Cause. #22 made the strip ignore settles it had queued itself, recorded in
awaitingSettle, to stop its own auto-scroll reading as a swipe. With the Playhead advancing, the app queues scrolls constantly, so a swipe that lands on a panel the app had also queued is attributed to the app.readerMovedreturns false, thescrollendhandler returns early, andfollowsSettleis never reached — no seek, no freeze, nothing.It is a race, so it is intermittent, which is exactly how it feels in the hand.
#22 named this blind spot and judged it harmless: "a swipe onto the panel a scroll is already travelling to — nothing distinguishes the two inside that window and nothing needs to: the strip was going there either way." That reasoning holds for the frozen state, where the outcome is the same either way. It does not hold for follow mode, where the app's scroll must not seek and the reader's must.
What to build
A discriminator that does not depend on where the strip lands.
#22 rejected a pointer flag on the grounds that tapping a word puts a finger on the strip without scrolling it, so a nearby auto-scroll settle would read as the reader's. That objection is answerable: a pointer down and the scroll position changing between that pointer going down and the settle is unambiguous — a tap alone moves nothing, and the app's own scroll happens with no pointer down at all.
Whatever you choose, it must satisfy both:
awaitingSettlemay stay, change, or go. It exists only to answer this question, and if a better answer makes it dead weight, remove it rather than keeping both.Acceptance criteria
reader/appverdict reflects the new discriminatorBlocked by
Merged to
main. Suites: 79 C#, 371 phone.The verdict no longer looks at where the strip landed.
dragsTheStripasks whether a pointer was down, travelled past a slop threshold, and the strip's scroll actually moved since that pointer went down — both halves required, each excluding a named false positive: a vertical drag down the tail of a long Cue, and a finger resting on a word while the app scrolls underneath it.awaitingSettleandscrolledItselfToare deleted. They existed only to answer this one question, and keeping them would have left two notions of "who moved the strip" that can disagree — the thing the last cross-seam review warned about.#22's test and this one are now the same landing with opposite verdicts: the app arriving on panel 1 is the app's, the reader arriving on panel 1 is the reader's. That is the fix stated as plainly as it can be.
Known limit, in the safe direction: a drag that passes the slop while the strip cannot move (over-scrolled at either end) reads as the app's, so it does not seek.