Repository navigation
Conversation
|
|
A big question for tv is how to enter the access key. How do you propose we do that? Topping the whole thing is not practical. |
|
Thanks for raising this. I don’t expect users to type the full access key with the D-pad. The intended MVP flow is Android TV’s standard remote text input: focus the field, open the keyboard in a phone’s TV remote app, and paste the complete Outline key there. I verified this end to end on a Xiaomi TV using an iOS remote keyboard — I copied the key on the iPhone and pasted it directly into the TV field. The existing I intentionally left a QR-code or phone-pairing flow out of this PR to keep its scope focused on making the existing client usable with a remote. If you consider a first-party quick-transfer flow necessary for Android TV support, I can implement it, either in this PR or as a follow-up. |
89991c3 to
c53c193
Compare
|
@vad612 thanks so much for this contribution and all the testing on Android TV! Currently in CI the client-web test is failing, which is causing some of the other CI not to run. I think the fix should be small. Could you fix that and see that the web tests are all passing, then I'll re-run the full CI? Alternatively, if you make a vad612:master<-vad612:feat/android-tv PR within your repo fork you should be able to check the full set if CI runs without having to wait for me to approve them. |
6c53d34 to
cd26068
Compare
There was a problem hiding this comment.
This file is a red flag to me. Why are we rolling our our own navigation? I'm sure other TV apps don't need to do that. What's the proper way to do this? We should not reinvent the wheel.
There was a problem hiding this comment.
I investigated native and web spatial-navigation libraries. They can select the next element, but do not replace the integration needed for this WebView UI’s Shadow DOM, Material components, dialogs, and focus restoration. Our earlier Norigin attempt still required most of that integration code, so I kept the tested module rather than adding a dependency without substantially reducing it
| if (this.tvNavigationLoad !== navigationLoad || !this.isConnected) { | ||
| return; | ||
| } | ||
| this.removeTvNavigation = installTvNavigation(this.shadowRoot); |
There was a problem hiding this comment.
What does installTvNavigation do?
Can't we always install it? Please explain the tradeoff.
There was a problem hiding this comment.
It installs D-pad, activation, Back, and focus handlers and returns a cleanup function. Enabling those handlers on phones or desktop would interfere with normal keyboard navigation, so installation is limited to Android TV
|
Thank you for the thoughtful review and for recognizing the Android TV testing. I’ve been actively using Outline on my own Xiaomi TV for about two weeks, and I’d be happy to keep refining both the implementation and the remote-control experience until they meet the project’s quality bar. |




Closes #735
Why
The Android client can already run on Android TV, but its portrait-only manifest and pointer-oriented web UI make it impractical to use with a TV remote. Users cannot reliably move focus, activate controls, navigate dialogs and menus, or use the server list without a mouse.
What changes
org.outline.android.clientapplication ID for phones, tablets, and TVs.The navigation module is loaded only on detected Android TV devices, so the regular phone/tablet interaction path remains unchanged.
Testing
Automated:
npm run action client/web/buildnpm run action client/web/test— 75 tests passednpm run lint:lit— 0 errors (three pre-existing CSS container-query warnings)Manual:
MiTV_MOOQ1) over ADBLong access keys can be entered with the Android TV remote keyboard or another external keyboard; the D-pad can then move from the text field to the dialog actions.