Google TV launcher switching works properly now: Setup Wraith, Google TV's setup helper, no longer takes the Home button back after you change launchers (#122, #157, #158). Also new: a Logs tab, Stop ADB when quitting, Report this app, app storage details, restart after updating, patch notes on demand, a proper right-click menu, and Ask again for a TV whose debugging prompt was missed. 2.3.1 was prepared but never published, and the 2.4.0 build failed before anything was
published; everything both listed is in this release.
Added
-
Add a read-only desktop Logs tab with severity, tag and main-process filters, bounded recent snapshots, local text search and optional auto-refresh that stops when leaving the view. Raw logs stay out of automatic debug reports.
-
Desktop: Stop ADB when quitting, beside Restart ADB on Devices, off by default. The adb server otherwise keeps running after the app closes and holds every network device's connection open, so the TV goes on receiving adb traffic. Turning it on stops that server for every tool on the computer (Android Studio, scrcpy, a terminal), which the setting says. The server is still left running while the app is using adb (an open Remote, a command in progress), when the app restarts for an update, and when adb is pointed at a non-default server.
-
Each catalog entry now records when it was reviewed and why (#101).
Entries carry areviewed_atdate and theirsources, plus a
device_scopeon the Shield and Google TV lists. All 89 entries were dated
from git history. Tests reject malformed or future dates, and they reject any
scope that disagrees with the list the entry lives in. They also require
every Safe entry to carry a date. The app detail panel shows "Reviewed
" beside a catalog verdict. -
A local triage tool for user reports (#101).
tools/registry-triage
reads a folder of mobile diagnostics exports and desktop bug-report
bundles. It prints the packages they mention, with report counts, device
scope and today's verdict, for a person to review. It never writes the
catalog, and a report never makes an app Safe. -
Report this app (#100). The app detail panel can report an app that is
missing from the list, or an entry that looks wrong. You pick a reason, add
an optional note, and see the exact report: the package and app name, the
device family and Android version, and the verdict shown with its source.
The installed and enabled state, RAM and storage go in only if you tick the
box. It never includes a serial, an IP address or any other app. Nothing is
sent automatically: you can copy it, save it as a file thatregistry-triage
reads, or open a prefilled GitHub issue that you submit yourself. A report
asks for a review and never changes an app's verdict. -
Patch notes are always one click away. Click the version next to the app
name to see the last few releases, newest first, with the installed one
open and older ones collapsed, plus a link to every release on GitHub. They
are bundled with the app, so this works offline.
App details
- Installed storage, separate from RAM. Opening any app row now shows the
app's installed size, its data and its cache, read in one batch from
Android'sdumpsys diskstats. Data includes cache, so the two are never
added together. When diskstats has no row for an app, the panel falls back to
the size of its APK files and says that data and cache are unavailable. - Every figure says where it came from and when. RAM is PSS from
dumpsys meminfo, storage is fromdiskstats, and last used is from
usagestats, which keeps roughly a year of history. Each one shows the time
it was read. A read that failed shows "Unavailable" with the reason, never a
zero. A Re-measure button reads all three again. - One detail panel everywhere. The App List, "Everything else" and the
Optimize wizard all open the same panel with the same numbers. The panel is
read-only: removing or restoring an app still goes through the row's
existing, safety-checked buttons.
Fixed
-
A TV whose debugging prompt was missed could not be asked again. Android shows the
prompt once per connection, and Scan counted a TV still waiting on it as connected. Scan now
reports it as needing authorization, and its row has Ask again, which reconnects that one
TV so it prompts again. No other TV is touched. -
Uninstall could remove the only enabled launcher, leaving the TV without a Home screen.
It now refuses, as Disable already did. -
Projectivy and the other listed launchers read Unknown in the App List. They now read
Caution, as third-party Home screens, with what removing one actually risks. -
The device tabs and page were cut off in windows narrower than about 1100 px. The page
now fits the window, every tab fits at the default size, and the tab strip scrolls with a
fade where tabs run past it. The Stop ADB when quitting explanation is now its tooltip. -
Find app backups said a folder "couldn't be searched" when it simply didn't exist
(#86). SmartTube can keep
backups in any of three folders, and most TVs only have one of them. A missing folder now
reads as no matches; only a search that actually failed is reported as not searched. -
Launcher source pages remain available for installed and current-default launchers. Projectivy links to its official GitHub releases; opening the page never uninstalls or changes the current launcher (#161).
-
The Memory table cut off long process names and dropped PIDs
(#97). Health's Memory
table now shows each process's full name and its PID. -
Disabling the stock launcher from the App List or Optimize left Setup Wraith on
(#157). Every way of
disabling Google TV's stock launcher now turns Setup Wraith off with it, once another
launcher holds Home, using the same checks as Disable stock launcher. If no other
launcher holds Home yet, Setup Wraith is left on and the app says how to finish. -
"Enable & set default" on the stock launcher left Setup Wraith off
(#158). Turning the stock
launcher back on by any route now turns Setup Wraith back on too, on desktop and mobile. -
Disabling the stock launcher on Google TV now turns off Setup Wraith too, so
it can't take the Home button back (#122). Google TV's setup helper
(com.google.android.tungsten.setupwraith) declares a Home screen, and with
the stock launcher gone it became the fallback Home. The takeover now
disables it together with stock, only after your launcher is confirmed as
Home, and checks again afterwards. If anything fails, stock and Setup Wraith
are both re-enabled, as is re-enabling stock from the Launcher tab. The pairing lives inlaunchers.json, so a Shield, which
has no Setup Wraith, behaves exactly as before. Emergency Recovery re-enables
both. The Launcher tab now always says whether Setup Wraith is on or off, warns
when it is on with stock off, offers a one-click Turn it off (guarded and
verified like the takeover) and a Re-enable Setup Wraith button for when
Google asks you to sign in again or you need to pair a remote. The confirm
names both effects, and the bug-report bundle records its state. -
An app report no longer carries state from before an Optimize run
(#138). Right after a run, the page re-reads package states in the
background. A report opened in that window with state included could carry
the pre-run state. It now reports the state as unknown until the re-read
lands, then shows the new state. -
Or from during one (#147). A report opened while an Optimize run is
still working through its plan now gives every app's state as unknown, from
the run's first change until the post-run re-read lands. -
A report's note redacts more (#143). A serial is redacted whatever its
casing, and a serial shorter than four characters is redacted where it
stands as a whole word. Package ids other than the reported app are
replaced with[redacted]too, so a pasted package list cannot carry other
installed apps into the report. -
Opening a device by a second adb address works (#139). adb can hold one
device under two keys (its wireless debugging name andIP:port), and the
device list shows it once. Opening the device page by the key the list did
not keep said "device not found". The key now resolves to that row through
the hardware id its own connection reported, never through its address, and
the page moves to the row's key. -
registry-triagesays when a mobile export was truncated (#135). The
mobile collector drops its oldest records once it reaches its cap and marks
the exporttruncated. The tool ignored that flag. It now names each
truncated export in its summary and in--jsonoutput. While a batch holds
one, every count is marked as a lower bound, because the capped export
cannot say which packages it dropped. -
The Launcher tab named Setup Wraith as the current launcher after a
successful switch (#122).
With the stock launcher disabled and Google TV's setup wizard (Setup Wraith)
still enabled, setting Monet as default worked, but the app kept showing
Setup Wraith. The app asked Android's intent resolver, which ranks Setup
Wraith's high-priority Home filter first. It now asks for the Home role
holder, which is what the Home button opens, and only falls back to the
resolver on builds without the role command, or when the resolver names an
enabled stock launcher that overrides the role on that build. The ACTIVE
tag, the current Home app, snapshots, the restore preview, the stock-launcher step and the
bug-report bundle all use this one reading. When the two disagree, the
bug-report bundle says so. Setup Wraith's row now reads "Google TV setup
helper — not a launcher", has no Set as default button, and its Disable
button asks first and explains the risk. Setup Wraith also no longer counts
as a Home screen when the app checks whether disabling a launcher would
leave the TV with no Home screen. -
The "what's new" pop-up shows after an update again. It read the new
version's notes from GitHub on the first launch and marked the version as
seen whether or not they arrived, so one slow or failed request (the 2.2.0 →
2.3.0 update hit exactly that) lost the pop-up for good. The notes now ship
inside the app, and a version only counts as seen once its pop-up has been
closed. Anyone the bug skipped sees the 2.3.0 notes on their next launch. -
Restart after an update. When an update finishes installing, a prompt
offers Restart now or Later, and the header keeps a Restart button. Download
progress is shown as a percentage. If the app can't restart itself it says
to quit and reopen instead of doing nothing. On Windows the installer closes
and reopens the app itself, so no second launch is offered there. -
Right-click no longer shows the webview's own menu (#129). It offered
Open Link in New Window, Download Linked File and Share on a device row, none
of which mean anything here. Device rows now get a small app menu instead:
Open (or Open anyway), Copy IP, Copy serial, Copy diagnostics and Forget. App
rows get Copy package name. Text fields, the Shell output and selected text
keep Copy, and the menu works from the keyboard (arrow keys, Escape to close). -
The Background Process Limit tweak didn't do anything, so it's gone
(#99). It wrote a setting that Android doesn't read. On a Shield TV Pro
(Android 11), setting it to 1 left Android's limit at 32 cached apps. Tweaks
now shows the limit Android is actually using and explains how to change it
in the TV's Developer options. If an earlier version left the setting behind,
a Remove old setting button deletes it. The rest of the Tweaks text was also
rewritten in plainer words.
First-run warnings
These builds are unsigned. Your OS may complain on first launch:
- macOS (Gatekeeper): the first-launch dialog on macOS 15+ only offers "Move to Trash" or "Done" — click Done, then either:
- Terminal:
xattr -dr com.apple.quarantine "/Applications/ATV Optimizer.app"(one-time, then double-click as normal) - GUI: System Settings → Privacy & Security → scroll to the "ATV Optimizer was blocked" message → Open Anyway → enter password
- Terminal:
- Windows (SmartScreen): "More info" → "Run anyway".
- Linux:
chmod +x ATV.Optimizer*.AppImagebefore running.
See the README for setup and feature docs.