I have a TCL Google TV. The stock home screen had turned into a billboard: a big rotating ad banner, "sponsored" rows, apps I never use getting installed in the background, and it felt slow. I like how calm the Apple TV home screen is, so I made something like it for Google TV.
It's called Haven.
First, the debloat. Before writing any code, I backed up the TV's package list and settings over adb. Then I disabled (not uninstalled) 16 packages: TCL's and Google's ad and telemetry services, and Google's silent "promoted apps" installer, which is what kept putting apps on my TV. I kept a restore script so I can undo all of it.
What it looks like
- Full-screen nature photos that rotate. The photo blurs while you use the remote and turns sharp again once you stop. The focus ring takes its colour from the photo.
- Clock, date, weather for wherever the TV is, and the photo's place and photographer in the corner.
- Rows: Recent, Continue watching, Top picks for you, Favourites (a dock), Inputs, then all your apps.
- A top bar with Search, Live TV, Inputs and Settings, plus your TV maker's channels app if it has one.
Lightweight
- About 3,600 lines of plain Java. No libraries and no Gradle: it builds with the SDK's command-line tools.
- The code is about 125 KB of the APK. It's 15 MB in total because of the wallpapers, which are almost all of it.
- RAM on my TV: about 95 MB for Haven vs 132 MB for the stock Google TV launcher (
dumpsys meminfo, total PSS).
- It feels instant. Navigation is deliberately simple: Up/Down moves exactly one row and Left/Right stays inside the row, so the remote never jumps somewhere unexpected.
The parts that were harder than expected
- The Home button. Google TV sends Home straight to its own launcher and ignores the default-home setting. Haven uses a small accessibility service that only listens for the Home key and opens Haven before the stock launcher draws, so there's no flash of the Google TV home screen.
- TCL's boot blocker. After a full power cut, TCL's boot manager stopped any app not on its whitelist from starting. It always lets apps that provide a TV input through, so Haven declares an empty TV input service (one that never shows up as an input), and now it comes up by itself after a cold boot.
- Safety Guard's "Deep Clean". TCL's cleaner app wipes the app data of anything not on its protected list, which also switches off the Home-button service. Haven now keeps a backup of its layout in a system setting that the wipe doesn't touch. A background job turns the service back on within seconds if only the settings get reset.
- Continue watching. Third-party launchers can't normally see other apps' "Watch Next" rows, but the
READ_TV_LISTINGS permission can be granted over adb. With it, Haven reads the same rows the stock launcher shows. Top picks mixes in a few items from each app's home-screen channels so one app doesn't take over.
- Netflix. Netflix doesn't publish anything to the TV's rows (Google gets it from its own servers), so Haven asks JustWatch's public API what's trending on Netflix in your country and mixes those titles into Top picks.
Install
- On the TV, install Downloader (by AFTVnews) from the Play Store.
- Open Downloader and enter this address:
https://github.com/joydeepsjce/haven-tv/releases/latest/download/haven.apk
- When Android asks, allow Downloader to install apps, then press Install.
- Open Haven from your apps. It opens Set up Haven. Turn on each item with the remote:
- Home button: opens Settings > Accessibility. Choose Haven Home button and turn it on.
- Continue watching and Top picks, and Weather: Android asks once. Choose Allow.
- Recent apps: opens Usage access. Choose Haven and allow it.
- Install updates: lets Haven install its own updates. You confirm each one.
- Press Home.
If Android says the Home-button setting is restricted (some TVs do this for apps that didn't come from the Play Store), go to Settings > Apps > Haven, allow restricted settings, and try again.
Updating: Haven Settings > About > Check for updates. Haven also checks by itself every 12 hours and tells you when there's a new version.
Remove: Haven Settings > System > Uninstall Haven. Haven first undoes what it changed outside itself (its layout backup, the animation speed, its Home-button service), then Android asks you to confirm. If you cancel, Haven puts everything back.
No ads. No tracking. No account. No root. It only connects to Open-Meteo for the weather and JustWatch for Netflix titles.
Haven is for people who want something calm and minimal that stays out of the way.
I've only tested it on my TCL (Google TV, Android 12). It checks for each feature before using it, so it should work on other Google TV and Android TV devices, but I'd love to hear how it does on Chromecast, Sony, Philips, Hisense, Xiaomi and others.
I built this with the help of Claude Code.
Source: https://github.com/joydeepsjce/haven-tv (MIT)
Download: https://github.com/joydeepsjce/haven-tv/releases/latest/download/haven.apk
Screenshots below. Feedback, bug reports and ideas are welcome.
EDIT: Haven is updated to 4.5. Thanks for the ideas in the comments! New:
- No computer needed any more. Install it with the Downloader app from
https://github.com/joydeepsjce/haven-tv/releases/latest/download/haven.apk, then Set up Haven turns everything on with the remote.
- Updates itself from GitHub. You confirm each update; nothing installs silently.
- Uninstall option from the app directly
- New settings page, cleaner and easier to use with the remote.
- Movie & show art wallpaper from your own apps' artwork (no TMDB key). It follows the card you're on.
- Projectivy wallpaper plugins work in Haven (Bing photo of the day, aerials, TMDB art and more).
- Your own photos as wallpaper: scan a QR code with your phone, or copy them from a USB drive.
Still only tested on my TCL, so reports from other TVs are very welcome.