Skip to content

fix(tv): ignore an OK held from opening a menu until it is released - #1852

Open
A-EDev wants to merge 1 commit into
mainfrom
fix/tv-held-ok-in-menu
Open

A-EDev wants to merge 1 commit into
mainfrom
fix/tv-held-ok-in-menu

Conversation

@A-EDev

@A-EDev A-EDev commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

On a TV remote, holding OK on a video on the home screen opens its options menu, and the same press then selects an item in it. This fixes the second part, as far as the report goes: the tester's report is cut off after that point, so anything it went on to say isn't covered.

From reading the code: combinedClickable opens the menu while the key is still down. On TV the menu is a dialog window whose content takes focus. The key's auto-repeats arrive there as key downs, Compose's clickable treats the first one it sees as a press, and the release clicks. The bytecode of foundation 1.13.0-alpha01 (AbstractClickableNode.onKeyEvent) shows a click needs only a press seen before the release, with no check of the repeat count.

The fix is in PresentedQuickActionsSheet, the path TV uses: OK keys count only from a key down with repeat count 0 inside the menu. Until then, repeats and the release are consumed. Sheets on phones use the other path and don't change.

Related issue

None.

Change type

  • Bug fix
  • Feature
  • Refactor or maintenance
  • Build, packaging, or CI
  • Documentation

Validation

All Gradle commands ran with --offline -Dorg.gradle.jvmargs="-Xmx4096m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8 -Djava.net.preferIPv6Addresses=true".

  • :app:testGithubDebugUnitTest --tests '*quickactions.*' --tests 'io.github.aedev.flow.ui.tv.*': 48 tests, 0 failed.

  • ktlintCheck: exit 0.

  • python3 .github/scripts/nightly_notes.py --check: exit 0.

  • New QuickActionsSheetKeyTest (3). Before the fix, repeats plus a release clicked the item: an_ok_still_held_from_opening_the_menu_selects_nothing and the_next_press_of_ok_selects failed, while a_press_that_starts_in_the_menu_selects_even_when_held passed.

  • Each of these made two tests fail when tried: the menu not using the check, repeats counting as a press, every OK ignored, and the centre key left out.

  • ./gradlew :app:assembleGithubDebug: not run locally, CI builds it.

  • ./gradlew :app:testGithubDebugUnitTest: full suite not run locally, CI runs it.

  • I ran any additional flavor-specific build or test tasks affected by this change.

  • I manually tested the affected behavior on an Android device or emulator: not done.

Test device and Android version: none. This hasn't run on a TV or any device. The tests send key events with repeat counts to a sheet in the test's own window, because focus didn't land inside TvSheetPresenter's dialog under Robolectric. So the real dialog, the real remote's repeat timing and the first item taking focus are from reading only.

Risk and compatibility

Only menus built on QuickActionsSheet get this. A long press elsewhere that opens another kind of window on TV isn't covered. A remote that sends no repeats never hit the problem, and the first real press still works.

  • The change does not introduce secrets, private data, or unexpected telemetry.
  • New user-facing text uses Android string resources. (No new app strings; the nightly note is the only new text.)
  • Dependency and lockfile changes are intentional and limited to this PR.
  • Room schema changes include the required version bump and migration, or this PR does not change the Room schema.
  • Breaking changes and upgrade steps are clearly documented. (None.)

Copilot AI balanced review requested due to automatic review settings November 7, 2026 20:13

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@github-actions github-actions Bot added documentation Improvements or additions to documentation ui Compose UI, theming, or Material 3 surfaces labels Nov 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation ui Compose UI, theming, or Material 3 surfaces

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants