Using Quiblo
The television app
A ten-foot interface driven by a remote: the focus model, the key maps, the player, and what differs from the phone.
# The shape of it
A tab bar across the top — a search magnifier, then Live, Movies, Series, Favourites, and a settings gear at the far right — with content beneath it. The reference is the Google TV home screen: plain labels with a thin underline marking the selected one, no filled pills, no cards.
Two of those positions are chosen rather than inherited. Search is first, and the only one drawn as an icon: a magnifier says "search" in every language and needs no word beside it, the leftmost position is where a remote already rests when the app opens, and it is where Back comes to rest — Back from any catalogue lands on Search, and Back again leaves the app. Sources is not on the bar at all; it is in Settings, because adding a playlist is a thing done once and the bar is for things done daily.
Movies and Series are one horizontally scrolling row per category, stacked vertically. That replaces the phone's category filter outright: on a phone you pick a category and get a grid, on a television every category is on screen and the remote walks through them. If your provider's categories are more noise than help, one grid instead of shelves collapses them into a single grid of everything.
Live keeps the list shape, with a category rail down the left.
The bar shown above is the full one. Live, Movies, Series and Favourites can each be switched off per profile — see Tabs — while the search magnifier, Home and the settings gear always stay.
# The focus model, and why it is unusual
The tab bar is one focus target, not six. Moving left and right along it switches tab immediately, but the switch is driven by the key press rather than by which label happens to hold focus.
That distinction is the entire reason the bar was rebuilt. With a focusable per tab and selection following focus, any event that destroyed the focused element in the content below — opening a form, a spinner appearing, a list emptying — left Compose with no focus target. It fell back to the first focusable in the tree, which was a tab, which selected itself. Content could silently change which tab you were on; a viewer saw it as "the screen flashes and disappears".
The settings gear is a position along the bar for the same reason, and for a second one found later: an icon that opts out of this model cannot be reached at all. It sits inside the bar's own focusable, so a focus search walks past it into the content below. For a while the gear was both wired to nothing and unreachable.
# What the keys do
On a television the key map is the interface, so it is written as a plain, testable function rather than buried in a modifier.
In the shell
| Key | Effect |
|---|---|
| Left / Right | Move along the tabs; past the last one lies the gear |
| Down | Leave the bar for the content |
| Centre / Enter | Enter the content, or open settings when on the gear |
| Centre held, on a channel | Its full listing, across the bottom |
| Back | Retreat one step; from a catalogue, back to Search; from Search, exit |
Back resting on Search rather than on Live is deliberate: a viewer pressing Back repeatedly is trying to leave, and each press should visibly get closer to it rather than cycling.
In the player, with nothing on screen
| Key | Live | Film or episode |
|---|---|---|
| Centre / Enter / Play-Pause | Play or pause | |
| Down | Show the controls | |
| Left / Right | — (seeking is meaningless) | Skip by the configured interval |
| Up / Channel-Up / Channel-Down | Zap through the list you came from | — (the next film is not "the next channel") |
| Back | Close the controls first, leave playback second | |
Where a key does nothing, it is left unhandled rather than swallowed, so it falls through to the system instead of being absorbed by a player that has nothing to do with it.
With the controls on screen, the arrows belong to them — see the player below. The keys that are not arrows keep working either way, because a remote's play key means one thing wherever you are looking.
# The player
Press down and the controls appear: play or pause in the middle of the screen, the two skips either side of it, and — on an episode — the previous and next episode outside those. Press down again for the row underneath: subtitles, audio and picture fit. The D-pad walks between them and the centre button presses them.
They go away after six seconds without a press, counted from the last press rather than from when they opened, because they are something to navigate rather than something to read.
Two ways in, not one
The remote's own keys still drive playback with nothing on screen. That is the fastest way to pause something and there was never a reason to take it away. The buttons exist because the keys ran out: a remote has keys for about five things, and everything past those five was arriving through a key that already meant something else — subtitles on a second press of Down, picture fit on Up, on a film, where zapping happened not to be using it.
The rule that keeps the two from fighting is a single one: while the controls are on screen, the arrows belong to focus and the player answers none of them. An arrow the player claims is an arrow focus never sees, and the result would be every button drawn, correct, and impossible to reach — which is the same fault as a feature with no way in, arrived at from the other direction.
Which way each arrow goes is written down
Compose finds a focus target in a direction by looking at where things are, and the two rows barely line up: the transport is centred and the options sit against the left margin. Left to geometry, down from the play button landed on picture fit — the last button of the row below, because it was the one nearest beneath the middle of the screen — and right off the end of the options row jumped back up to the previous-episode button. Every button now carries its own four directions, and the ends of each row refuse to wrap.
That was measured rather than argued: a test walks the whole thing with key events at the panel's real geometry, which is the only way this project has ever found an unreachable control.
# One episode after another
A series travels with the request into the player, so the two outer buttons move along it. There is no previous button on the first episode and no next on the last.
When an episode ends, a banner slides in at the top right counting down to the next one, with Stop and Play now under it. The remote lands on Play now, so carrying on is one press and reading the credits is two. The count is set under Settings → Playback, from three seconds to fifteen, or off — off still offers the next episode and waits for you to choose it. Pressing back leaves the player and cancels it.
Two decisions worth stating
"Next" means next in broadcast order, whatever order the list is sorted in. A season shown newest first puts the previous episode in the row below the one playing, and the order things are watched in is not a display preference.
It does not wrap, and channel zapping does. A channel list is a ring you walk round; a series is a thing that finishes. Rolling off the finale into the first episode would restart a series somebody has just finished — unattended, from a countdown, with nobody in the room.
The banner is the closest thing this app puts on a television to a modal, and it is deliberately not one: playback has already stopped so nothing is covered, it takes a corner rather than the middle, it cannot be arrived at by accident, and both ways out are on screen at once.
# The programme guide
Hold the centre button on a channel and its listing appears across the bottom of the screen: an hour behind, twelve ahead, each programme as wide as it is long. Left and right walk it, and Back closes it.
It is a strip, not a dialog. This app has never put a modal over a television screen and this is not the place to start one — the channel list stays visible behind the panel, dimmed, so the listing is still attached to the thing it belongs to.
It opens on the programme playing rather than at the left edge, so the remote has something to do the moment it appears. What is on now is said, not only drawn: a marker line is invisible to somebody three metres away reading whichever block has focus, so the block carries its own mark and the header says it in words, alongside the times and the plot. A block is only as wide as the programme is long, and a half-hour one has room for a title and nothing else — the header is where a listing is actually read.
The arithmetic behind it is the phone's, unchanged. Only the drawing differs, which is the rule about not forking applied one level below the ViewModels.
# Search
One search across live channels, films and series at once, rather than a box on each of the three. A viewer looking for a title does not know which shelf their provider filed it on — panels routinely list the same film as a film and as a one-episode series — and a search that answers for one kind is a search that appears to have found nothing.
Results come back grouped by kind, as rows, using the same poster rows the catalogue tabs use. Nothing is asked of your provider: search runs against what is already on the device.
Its two shapes
At rest the screen is the name and a field in the middle of the panel and nothing else, because typing something is the only thing to do there. Asking a question moves the field to the top and gives the rest of the panel to the answer.
Advanced
Behind Advanced is a genre filter — a second question about the catalogue rather than part of the first, so it stays out of the way until asked for. It is built from whatever film and series information has already been cached, so it costs nothing and lists only genres your own catalogue actually contains: offering "Western" to a library holding none is a control that can only disappoint.
Alongside it sits a coverage figure — how much of your catalogue has been described so far. It is on screen rather than hidden because a genre filter running against a tenth of a library is telling less than the whole truth, and silently omitting nine films in ten is worse than saying so. Describing the catalogue is what raises it.
# Settings on a television
Every setting the phone has, except two — plus two things the phone reaches elsewhere.
Two tabs at the top: Profile and App. The same split the phone has, for the same reason — a television is the one device where "whose setting is this?" has more than one answer. Walk right along the two chips to change halves, and down to enter whichever one is showing. See the settings reference.
Sources lives here, rather than on the tab bar, and so does Switch profile. Both are things a viewer does rarely, and the bar is expensive: every position on it is one more press between somebody and what they came to watch. Sources sits under App and the profile row under Profile.
Which tabs the bar draws is a setting here too. Live, Movies, Series and Favourites can each be switched off, per profile — see Tabs.
Theme mode and dynamic colour are deliberately absent. The television theme is always dark by design — a television is watched at a distance in a dim room — and a television has no wallpaper for a dynamic palette to be drawn from. Both controls would change nothing on screen, and after the feature audit we treat a control that does nothing as worse than an absent one.
Text entry — the metadata key, and renaming a category — works with the on-screen keyboard up, which is harder than it sounds. See below.
# The keyboard trap
Text entry on a television meets two separate problems, and only one is obvious.
Keyboard down. A Compose text field treats the D-pad's up and down as cursor movement within the text, so focus enters a field and never comes out. Intercepting those keys before the field sees them fixes it.
Keyboard up — the one that was broken. The IME takes the D-pad for itself, because that is how a viewer moves around the on-screen keys. So the interception above never runs at all, and every field typed goes into whichever field was focused when the keyboard first appeared — silently, appending to whatever was already there. Filling in a four-field form produced one field containing everything.
The way out is the keyboard's own action key: it becomes "next field" on every field but the last, and "done" on the last, where it dismisses the keyboard so the buttons underneath become reachable.
# What the television deliberately lacks
Stated so nobody implements them by reflex: brightness and volume gestures, screen lock, touch affordances and long-press interactions. Their television equivalents are either the remote's own hardware keys or nothing at all.
Rotation does not apply — the activity is locked to landscape.