Jan So7o: I, then, defy.

So7o Z Trackpad 0.4.0

A floating trackpad for Android, built on-device in Termux with a hand-rolled build: no Gradle, no Kotlin, no SDK install. This release is about a problem you only notice once you have several floating windows open.

The window at the back

Android’s pop-up windows overlap, and the ones underneath are unreachable in a specific way: they are still running, still drawn, and nothing on screen names them. You cannot tap what you cannot see, and Recents lists tasks rather than windows.

So 0.4.0 adds a list. A fourth dot sits on the left edge, and tapping it opens every window on the display:

  • The full-screen app comes first. Being behind the floating windows is exactly what makes it hard to reach, so it is the row the list exists for — and keeping it last would move it down the panel every time another window opened.
  • Then the floating windows, front-most first, each marked for what it is: full screen, hidden when it is behind something or minimized, or parked if the app had to move it out of the way.
  • Tapping a row brings that window forward. A hidden one comes back.

Nothing in the platform can raise a full-screen app above floating windows — it lives in the window layer below theirs, so focusing it only reorders it within its own layer. So the app moves the obstruction instead: it taps each pop-up’s own minimize button, checks that it actually worked, and only then falls back to shrinking the window into a strip at the bottom edge. There is no minimize API; the button is a real input target, and the check is what makes that assumption safe.

What else is in it

  • A CONTROLS panel, on a gear dot docked outermost in the pad: the keys layout choice, on/off switches for the two optional dots, and links to the keys guide and the issue tracker. The pad’s own dot has no switch, deliberately: it is the only way to show the pad, and it carries the gear, so hiding it would strand the way back.
  • Full keyboard or your favourite shortcuts. The keys panel was already driven by a spec string; now it can hold two, and the gear switches between the built-in layout and yours without a rebuild.
  • The split-divider buttons are gone, and so is the nudge behind them: that edge of the pad is the scroll strip, and a thumb there is scrolling.
  • Edge scrolling moves half as far by design: a 100px swipe down the side scrolls 33.6 units instead of 64.