Skip to main content
← All work

tvhome

A home screen for a Google TV with four things on it, no advertising, and no network calls at all.

Status

Running on the device it was built for. Four tiles, a clock, and three small links. Nothing on the screen can change except by editing the source.

Language
Java
Build
No Gradle
Network calls
None
Commits
89

Why the stock launcher has to be disabled

Google TV wins the Home button whenever it is enabled, and three ways of outranking it were tried against the live device. A higher priority on the home intent filter does nothing, because Android clamps that for non-system packages. The command line tool for setting the home activity reports success and then changes nothing. And the settings route is gone — Google removed launcher choice on Google TV.

So Home only reaches this app while the stock launcher package is disabled outright. That is also why the app's own "Google TV" link opens a settings page rather than the launcher: a disabled package cannot be started.

Defensive about a detail the platform gets wrong

The same app carries different package identifiers on different devices, so a tile that launches by hard-coded id is a tile that silently does nothing on the next TV. Each tile therefore checks whether any of its candidate packages are actually installed, and renders dimmed when none are.

That is the difference between a launcher that looks broken and one that tells you what is missing — on a device with no keyboard, where the user's only recourse is pressing the button again harder.

Testing without the television

Development runs against a headless emulator rather than the TV in the living room, which matters more than it sounds: the emulator's clock runs slow, so anything time-dependent has to be verified against it deliberately rather than eyeballed.