Open source contribution · Java · Android TV · Google TV
simbasjungles/ free-my-tv
Fast, ad-free home screen for Google TV, LG and Samsung TVs, with the user's own apps, trending picks, weather and one button that undoes everything.
- 9 merged PRs
- 9 commits to the project
- +36 lines added
- 2.8k GitHub stars
The project
Free My TV replaces the TV home screen, full of ads and sponsored rows, with a shelf of the apps the user actually uses, trending movie and show picks drawn only from those apps, the weather, crypto prices and a look that is light by day and dark by night, following the sunset in the user's city. There are builds for Google TV, LG and Samsung.
Installing takes about ten minutes from a computer, guided by a coding assistant (Claude Code) or done by hand, with no root and nothing deleted: the manufacturer's apps are turned off instead of uninstalled, and a button in the settings brings back the original screen.
How each PR was made
-
One problem per PR
Each PR fixes a single thing with the smallest possible change. That keeps reviews simple, lowers the risk of side effects and lets one change be reverted without taking others with it.
-
The problem becomes a test
Fixes come with automated tests that cover the case that used to fail, so the problem cannot come back unnoticed.
-
The project's own bar
Formatting, static analysis and the full test suite run in the project's continuous integration, and a change only lands after the maintainer's review.
-
Written for the reviewer
Each PR description explains the problem, the change and how it was tested, so the maintainer can decide with confidence.
Every PR, in business terms
Click a PR to see the problem, what was done and the value delivered. The link at the end of each one leads to the full technical discussion on GitHub.
-
#147merged Oct 21, 2026 Remote button shortcuts switch apps using arrow keys as hinted on screen The hint in the button mapping screen promised arrow key adjustments that did not work; left and right arrows now cycle through configured applications.
- The problem
- The remote control button mapping screen displays a footer hint indicating that pressing OK or the arrow keys changes the selected shortcut. However, the key event dispatcher forwarded arrow key inputs only on the general home settings screen, ignoring the remote shortcut screen. The method designed to cycle through installed applications was already present in the codebase but was never reached by directional inputs.
- What was done
- The directional key handler now includes the remote button configuration screen, stepping forward or backward through installed apps with each arrow press. Pressing the center button still opens the full application picker, and cycling shortcuts does not trigger unwanted weather refreshes.
- Value delivered
- Users can quickly configure remote shortcuts using directional arrows directly on each row, delivering the exact experience described in the on-screen hint.
-
#145merged Oct 21, 2026 Shelf editor clears phantom slots for previously uninstalled apps Apps uninstalled from the TV continued occupying hidden slots in the shelf editor; the settings view now filters out packages no longer present on the system.
- The problem
- The application settings allow users to select up to eight favorite shortcuts for the home screen shelf. When an application placed on the shelf was uninstalled from the television, its identifier lingered in the saved shelf order without rendering a row in the editor interface. That hidden entry still counted toward the eight-item ceiling, blocking users from adding new apps and creating dead gaps when reordering entries with the remote arrows.
- What was done
- The editor now validates the saved list against installed applications when launched, retaining only packages with active launch intents. The updated order is written to storage only when the user commits an actual change, and reordering on the main home screen continues to preserve absent slots without disruption.
- Value delivered
- The shelf accurately mirrors available applications on the TV, ensuring all eight shortcut slots remain usable even after uninstalling older software.
-
#141merged Oct 21, 2026 Samsung TV uninstall works without requiring a built package file The removal script for Tizen stopped and demanded a signed package before uninstalling the app; it now reads the identifier directly from the source manifest.
- The problem
- The install and removal script for Samsung televisions connects to the device over the local network and runs package management commands. Removing the application requires only its package identifier, but the tool verified the presence of a signed package file in the directory to inspect its internal manifest. Anyone working with a clean clone to remove the application from a test TV was forced to create signing profiles and build a package file before performing the uninstall.
- What was done
- The uninstall flag now extracts the necessary identifiers straight from the source manifest in the repository, bypassing the need for a built package. Package presence and signature checks are enforced strictly when an actual installation is requested. Network communication with the TV and uninstall confirmation handling remained untouched.
- Value delivered
- Removing the application from Samsung televisions works immediately from a clean checkout, eliminating unnecessary build steps and certificate requirements.
-
#138merged Oct 21, 2026 Home navigation reaches top rows even when the shelf is kept empty Removing every app from the home shelf made the remote focus vanish on pressing up; navigation now moves straight to recommendations or the top bar.
- The problem
- The home screen organizes favorite apps on a customizable shelf and displays recommendation cards just above it. When a user cleared all shortcuts from the shelf, navigation bypassed the modern movement routine and fell back to legacy layout handlers that targeted deprecated interface elements. The visual focus disappeared from view, leaving content rows unreachable and causing the center remote button to trigger invisible background shortcuts.
- What was done
- Navigation now handles an empty shelf directly within the current movement routine, measuring distance to recommendation cards from the horizontal center of the screen. If no recommendations are present, focus moves straight to the top bar tabs, matching the behavior already present in the web version. Movement with populated shelves and downward actions into drawers remained unchanged.
- Value delivered
- The home screen stays fully navigable and predictable regardless of how many apps remain on the shelf, preventing lost focus and unintended shortcut triggers.
-
#63merged Oct 20, 2026 The build reads the source code as UTF-8 on any computer The app build did not tell the Java compiler which text encoding to use and, on JDK 17, depended on the computer's settings; the PR proposes fixing UTF-8 and changing nothing elsewhere.
- The problem
- To install Free My TV, the user builds the app on their own computer with the project's build script. The source has accented text and Russian (18 files with non-ASCII characters), and the script also writes the chosen city name to a configuration file. The Java compiler was called without an encoding and used the system one: a Windows code page or, on Linux without a UTF-8 locale, ASCII. On JDK 17, the minimum required, accented text was misread and the Russian had bytes those encodings cannot represent.
- What was done
- The PR proposes adding the UTF-8 encoding option to the compiler command, on the line that already exists. On JDK 18 or newer, on macOS and on Linux with UTF-8 nothing changes, and the Windows install walkthrough and the project's Python build scripts already do the same.
- Value delivered
- The compiled app gets correct text even on computers with a different regional setup, with no adjustments from the user.
-
#61merged Oct 20, 2026 An app taken off the shelf is listed again in the all apps view A known app removed from the home shelf also vanished from the full list and could only be brought back through the editor; the PR proposes listing it there while it is off the shelf.
- The problem
- The home screen has a shelf with the user's favorite apps, which the user can edit, and a list with all the others. That list always skipped the apps on a fixed list in the project (Netflix, YouTube, Prime Video and more), which made sense when the shelf was always made of them. Once the shelf became the user's own list, one of those apps taken off it, installed after the list was saved or beyond the eight slots was on neither the shelf nor the list, and the editor was the only way back.
- What was done
- The PR proposes skipping an app from the fixed list only while it is on the user's shelf, as the project's web version already does. Apps on the shelf stay out of the list, live TV apps, Free My TV itself and hidden ones are still left out, and the function's signature and its single caller do not change.
- Value delivered
- No installed app becomes unreachable from the home screen: taking Netflix off the shelf puts it in the full list, and putting it back removes it from there.
-
#59merged Oct 20, 2026 Russian settings get the City row and city search translated On a TV in Russian, everything in settings was translated except the city, which stayed in English; the PR proposes adding the seven missing phrases to the translation.
- The problem
- Free My TV's settings follow the TV's language, and Russian was added before the city search existed. So the City row, the window that OK opens with its title, hint and Search and Cancel buttons, and the messages for searching, no city found and search failure all showed in English on an otherwise Russian screen, because the translation lacked those seven phrases. Unlike its sibling PR on the search itself, this one fixes the texts on screen, not the names the search returns.
- What was done
- The PR proposes adding the seven missing phrases to the Russian translation, in the same place the German one already has them. Each English phrase was compared character by character with the one used in settings, including the ellipsis, the apostrophe and the trailing space, and no other language changes. With it, every phrase in settings has a Russian translation.
- Value delivered
- Russian speakers see the whole settings screen in their language, including the step where they choose the city for the weather.
-
#56merged Oct 20, 2026 A TV updated from Android 11 to 12 gets its screensaver back After the Android update, the startup check did not notice that the app's screensaver had been replaced and judged everything fine; the PR proposes comparing the exact component name and restoring it.
- The problem
- Free My TV becomes the TV's home screen and screensaver and, on every startup, checks that Android kept those choices, fixing them and saying so when something changed. A TV that goes from Android 11 to 12 or newer is left configured with the screensaver used on Android 11, a component that is turned off from Android 12 on. The check asked whether the setting's text contained the app's screensaver name, and the old name contains the new one as a substring, so the setting was judged correct and the notice said Free My TV was still on.
- What was done
- The PR proposes treating the setting as a comma-separated list of names and looking for the app's screensaver among them as a whole name. A setting that already holds the right name, alone or in a list, passes as before, an unset one is still fixed, and the Android 10 to 11 path, which already worked, does not change. It is two lines, and only the startup check is touched.
- Value delivered
- People who update their TV to Android 12 or newer get the app's screensaver back without reinstalling anything, and the startup notice stops saying all is well when it is not.
-
#54merged Oct 20, 2026 City search returns German and Russian names on TVs in those languages On a TV set to German or Russian, the city search in settings answered with Portuguese names; the PR proposes asking for names in the TV's language, so Vienna and Moscow show up when searched in German and Russian.
- The problem
- Free My TV shows the weather and the sunset time for the city the user picks, and the settings have a search to find it. That search was written when the app spoke only Portuguese, English and Spanish, so for any other language it asked the geocoding service for Portuguese names. With the TV in German, the list showed Munique, Baviera, Alemanha, the Portuguese spelling of Munich, and the weather card kept Munique; searching Wien did not bring up Vienna, and on a Russian TV searching Москва found nothing.
- What was done
- The PR proposes sending the language the TV is already using, the same value the app sends to the movie and show service to pick artwork. That language is always Portuguese, English, Spanish, German or Russian, so the first three send exactly what they sent before, and a language added later is picked up with no further change. It was checked against the geocoding service in German and Russian, with Vienna and Moscow among the first results. This PR changes the language of the search results; the texts on screen are the subject of a separate PR.
- Value delivered
- Anyone using the TV in German or Russian picks a city by the name they know and sees the weather under that same name, not a Portuguese translation.
Figures updated on Oct 21, 2026.
The same care in your system
The habits behind these PRs carry over to backends that move money: reproduce the problem before fixing it, prove the fix with a test and keep sensitive data from leaking.