Bannerlator 2.9-pre2 (superseded by 2.9-pre3)
Pre-release⛔ Superseded — please use 2.9-pre3
This build is no longer the current test build. 2.9-pre3 replaces it and is what you want if you're testing the virtual controls editor.
pre3 carries everything below plus eleven further controls-editor commits from @arro000 (per-device controller edges, custom icon rendering, Button Grid multitouch), Smart Game Import, the in-game refresh-rate unlock, a fifth frame-gen model (FSR3+) and the removal of a per-frame present stall.
It's the same versionCode (49), so it installs straight over this one — but the in-app updater won't prompt you. Download it from the pre3 page.
This release is kept for reference only. Bug reports against it are still welcome, but please check whether pre3 already fixes them first.
Bannerlator 2.9-pre2 — test build
⚠️ This is a pre-release, not a stable buildIt exists so the work below can get real testing on real devices. Expect rough edges. The headline feature — the rebuilt virtual controls editor — is still in-progress work from an open pull request that hasn't been merged or fully reviewed yet.
- Stable users are not affected.
2.8remains the Latest release; nobody is offered this unless they ask for it.- Already on 2.9-pre1? This build carries the same versionCode (49) so it installs straight over pre1 — but for that reason the in-app updater will not offer it to you automatically. Grab the APK below.
- Coming from 2.8? Settings → enable "Include pre-releases" in the updater, or just sideload.
- If it misbehaves, install 2.8 back over the top. It's app-side only, so nothing about your containers is at risk either way.
- Please report what you find — that's the entire point of this build. Open an issue with logs where you can.
Like the last several releases this is entirely app-side — no ImageFS reinstall. Containers, themes, custom accent and per-game settings all carry over. Install straight over 2.8 or pre1.
🔁 What changed since 2.9-pre1
pre1 was cut to get the controls editor tested. Everything that came back has been acted on, and the build has been rebased onto current main, which has moved a long way in two days.
Controls editor — every reported item fixed (thanks @Devaspe)
- D-Pad highlighting — pressing the D-Pad now highlights it, and holding it while pressing another button no longer freezes it lit.
- Expandable Button labels now shorten the same way the rest do (
BUTTON A→A), so they fit their cells. - Imported icons are themed — custom PNG and SVG glyphs now take the app accent colour like the built-in ones, instead of rendering untinted. SVG import and a size cap came with it.
- Binding category filters wrap properly, so
keyboard/gamepad/mouseno longer spill letters onto a second line. - Plus virtual-mouse priority handling and button-grid sizing/alignment work from @arro000's own testing.
And a merge-only bug that existed in neither branch alone — releaseAllInputs() cleared the finger state out from under the Cursor-to-Touch gesture machine, which could fire a queued long-press against a finger that had just been released. Fixed on both sides now.
✨ Also new since 2.8 — everything merged to main since pre1
🎞️ Frame generation — four interpolation models, switchable live
The bundled bionic-fg layer had been unchanged since June and was missing every engine built since. It's now current, and you can pick between four motion-estimation models — Default, Traced, V2 and FSR3 — per container, per game, or live from the in-game drawer while the game is running.
- Default stays the default, so nothing changes unless you go looking.
- On an Adreno 750 test, FSR3 measured ~45% more frames than Default while using less GPU — but it is experimental and unproven for image quality, particularly in fast lateral motion. Labelled as such in the UI. Feedback on how the models compare on your device and games is exactly what's wanted.
Two silent bugs fixed alongside it: bundled frame-gen layers were never actually reaching devices on an app update — only on a full ImageFS reinstall — and staging compared file size alone, so a same-size update was skipped forever. Both fixed, so layer updates now arrive with the app.
📱 Frame generation now works on Xiaomi / HyperOS
On HyperOS, neither frame-gen engine loaded at all — frame generation silently did nothing for every Xiaomi user. A libjpeg symlink in our ImageFS was aborting the layer load outright. It's now moved aside on affected devices only; everything else is untouched.
Diagnosed and fixed by @clintOnSky (#96), reported by @Shalaykin1 (#40), and confirmed working on real HyperOS hardware by @Devaspe. Thank you all.
💾 Storage and drives
- SD cards are always listed in the file manager — volumes now come from the framework rather than a
/storagescan. - One drive entry per volume instead of one per path.
- Container drives use the in-app picker, and duplicate drive letters are rejected instead of silently colliding.
🌡️ Performance HUD
- Temperature colour bands driven by the device's own thermal trip points, so amber and red mean something on your hardware rather than a guessed threshold.
- °C / °F toggle.
⚙️ Environment variables
- The legacy env-vars editor has been rebuilt in Compose and is now shared across the app, with editable SELECT comboboxes and collapsible chip groups.
🕹️ Virtual controls editor — rebuilt in Compose (in progress)
Unchanged in scope from pre1, with the fixes above folded in. The whole on-screen controls editor has been rewritten, replacing the old Fragment/XML settings interface with a Compose one — and a large set of new capabilities along with it.
- New control types — Dynamic Stick, Mouse Area, Button Grid, Expandable Button, and an Android Keyboard control.
- A real editing UI — Compose toolbar, visual control-type picker, and a sliding settings panel that opens automatically when you add an element.
- Per-element tuning — dead zones for Stick / Dynamic Stick / D-Pad, sensitivity, hold bindings, detection-area styling and grid cell shapes.
- Better bindings — category-filtered binding selector, multi-key combos, binding presets, and custom icons.
- Control groups — name a group, toggle its visibility, and move its members together.
- Reference background images with adjustable opacity, so you can lay controls out against a screenshot of the actual game.
- Live in-game profile editing — adjust a profile without leaving the Wine session.
- Versioned ICPx import/export — embedded icons, legacy
.icpcompatibility, validation and atomic writes. - Input hardening — fixes for stuck and conflicting buttons, sticks, and duplicate bindings.
⚠️ This is still the part that most needs testing. It is a very large change to the input system, it is not yet merged, and it has not had a full review. Please exercise your existing control profiles and report anything that regressed — especially profiles created in an older version.
This work is entirely by @arro000 in PR #156, published here as a test build so it can get device coverage before merge. Thank you.
🖱️ Cursor to Touch — fixed, and given real gestures
Carried over from pre1. Cursor to Touch (in-game drawer → Controls → Mouse) moves the pointer to wherever your finger lands, with drag to box-select, hold for right click (adjustable 150–800 ms, with a haptic tick) and two-finger scroll. The toggle-never-lit and lost-on-launch bugs are fixed.
Gesture set modeled on the RTS touch controls in Producdevity/gamehub-lite #73 by @Nightwalker743 — the behaviour and thresholds are theirs; the implementation here is written against Bannerlator's own touch path. Thank you.
🐞 Known issues
- Occasional ANR ("Bannerlator isn't responding") during input. The UI thread can block on a socket write and stall touch delivery for 5+ seconds. This is pre-existing — it reproduces on 2.8 and earlier — but you may well meet it while testing, so it's listed rather than left as a surprise. Reports with a timestamp are still useful.
- The FPS limiter and frame generation interact badly at low caps. With a cap around 30 and generation on, generated frames get dropped and you end up with fewer frames than you asked for. Understood and being worked on; a cap of 60 behaves correctly. Not a regression from pre1.
- Frame-gen models 1–3 are experimental and not quality-proven. Default (model 0) is unchanged from 2.8.
- The virtual controls editor is unmerged, in-progress work. Treat anything it does as provisional.
📥 Downloads
| Variant | File |
|---|---|
| Standard | Bannerlator-2.9-pre2-standard.apk |
| PUBG | Bannerlator-2.9-pre2-pubg.apk |
| Ludashi | Bannerlator-2.9-pre2-ludashi.apk |
ℹ️ On pre1 already? Same versionCode, so the in-app updater won't prompt you — download directly from here and install over the top. On 2.8? Turn on "Include pre-releases" in the updater, or sideload. Either way this build is entirely app-side: there's no ImageFS reinstall, and your containers, themes, accent, per-game settings and control colours all carry over.
🙏 Credits
- @arro000 — the entire virtual controls editor rebuild (#156): the Compose editor, the new control types, per-element tuning, control groups, background images, live in-game profile editing and the ICPx format — and the fixes in this build responding to pre1 feedback.
- @Devaspe — detailed testing of pre1 and the four editor reports fixed here, plus confirming the Xiaomi/HyperOS frame-gen fix on real hardware.
- @clintOnSky — diagnosing and fixing the Xiaomi
libjpegbug that stopped both frame-gen layers loading on HyperOS (#96). - @Shalaykin1 — reporting that frame generation was dead on HyperOS 3 (#40), which is exactly the bug fixed here.
- @Nightwalker743 and Producdevity/gamehub-lite — the RTS touch-control design (#73) the Cursor to Touch gestures follow.
