chrisboyle / sgtpuzzles

Android port of Simon Tatham's Puzzles
https://chris.boyle.name/puzzles
Other
586 stars 167 forks source link

Support Google TV? #531

Open chrisboyle opened 2 years ago

chrisboyle commented 2 years ago

I have a "Chromecast with Google TV" and was surprised to find Google Play offers it as an install target for Puzzles (edit: for recent builds it doesn't, though I don't think I changed anything relevant?) It will actually run and you can play using the D-pad on the remote (including long-press). There are a few major issues:

PXL_20220408_000035196 PXL_20220408_142319205

chrisboyle commented 10 months ago

As I belatedly realised this morning: Filling, Keen, Solo, Towers, and Unequal would also want excluding because there's just no good way to do that much number entry with that remote. Undead has basically the same problems, including how to move around the keyboard without moving the cursor off the play area. So I think just exclude those and Untangle on devices that have neither touch screen nor mouse, showing them in a disabled category at the bottom of the chooser titled "Requires a touch screen" or similar. That's 7 exclusions, which still leaves 33 games. Of course some Google TV devices could have "air mouse" remotes, as I've seen on one LG TV.

JupiLogy commented 10 months ago

What if you used the scrolling (assuming that remote works like those old i-pods) functionality to scroll through a number wheel, 1-9? For those number games.

Edit: I guess not all TV remotes will have that same functionality BUT those that don't have the scrolly wheel are likely to have a number pad right? Looks like a tough problem and I also have no idea about programming for TVs but wanted to suggest some ideas.

chrisboyle commented 10 months ago

I have the Chromecast with Google TV shown in the photo and unfortunately it doesn't have that scrolling functionality nor a number pad. I think the next thing to do here is check that this device only declares android.hardware.faketouch (not android.hardware.touchscreen) and if so, use a combination of faketouch + no mouse-like device detected, to exclude such games as per previous comment. How to reliably detect a mouse-like device (e.g. air mouse), I haven't figured out yet. Maybe inspect /dev/hid*.

Edit: Untangle needs a mouse or touchscreen, the number-entry/monster-entry puzzles need a keyboard (num-pad is enough) or mouse or touchscreen. There's already code in Puzzles that tries to detect a keyboard but it's not perfect - occasionally it clashes with e.g. Bluetooth headphones that declare their volume buttons as a keyboard. :roll_eyes: