ShizuStore

Thor Wayfinder (thor-wayfinder)

Thor-Wayfinder

1.0 · GitHub

Download APK
Vendor-specific Android 8.0+ 5 months ago CC-BY-NC-ND-4.0
6 ShizuStore
11.4k GitHub
148 Stars
5 MB Size

More about this app

Moves apps between the two AYN Thor screens with back-button gestures

Wayfinder β€” For the AYN Thor

Two screens, one controller. Wayfinder moves apps between the Thor's screens without restarting them, sends the controller where you want it, gives every game its own buttons, and puts the Thor's settings one press away β€” all without leaving your game.

⬇ Download (free) Β· πŸ“– How to use it (wiki) Β· What's new Β· Report a bug Β· β˜• Support on Ko-fi

https://github.com/user-attachments/assets/226f78aa-bb8b-410a-bae7-4842b72444f0

Note

ClusterTune, Pulse, SleepManager and other Thor apps: Since 1.4, Wayfinder leaves the CPU to ClusterTune and Pulse, so they can stay installed together. With SleepManager, Wayfinder's sleep actions and lid guard stay off unless you turn them on. And if another app does the same job as a part of Wayfinder (Mjolnir, BiFrost, OdinTools), the Hub tells you what to do. If ClusterTune and Wayfinder gave you trouble before, restart your Thor once after updating.

Highlights

  • Move and swap apps between the screens β€” live, the app keeps running (hold Back)
  • Combos on Home, Back and the AYN button for 30+ actions, and a cheat sheet when you hold Home
  • Game controls (Home + X): remap any button per app or per game β€” keys, mouse, macros, gyro
  • Keyboard & mouse (Home + Y) on the other screen: PC keys, a trackpad (with a Touch mode), your own pad, the game's guide
  • Quick panel (AYN button) over your game: brightness, volume, performance, fan, 45 shortcut tiles
  • Per game and app: screen, performance, fan, refresh rate, lights, controls
  • Just what you need: only screen switching, or everything β€” choose part by part
  • No root, no PC: one-press setup

Screenshots

The Hub and your combos
The Hub β€” and every combo on the other screen
Quick panel
Quick panel (AYN button) over your game
Game controls
Game controls (Home + X) β€” per app, per game
Hold Home: every combo
Hold Home β€” your combos, over the game
More screenshots (7)
Remap a button
Remap a button β€” keys, mouse, macros, actions
FPS counter
FPS counter + battery and temperatures
Keyboard and mouse deck
Keyboard & mouse (Home + Y) on the other screen
Wayfinder Keyboard
Wayfinder Keyboard β€” type with the controller
Screens and power
Screens & power β€” brightness, colour, sound
Appearance
Appearance β€” light / dark, glass, aurora
Recent apps with the controller
Recent apps, driven with the controller

Everything it does

Tap a section to open it. Step-by-step help for each is in the wiki.

Two screens
  • Move / swap apps between screens (Back Β· hold) β€” live: the app keeps running and keeps its state; the controller can go with the game you move (per game too)
  • A glass slide animation when an app moves
  • "Opens on": each app opens on its own screen; apps that break when moved live (Firefox) reopen on the other screen instead
  • App pairs: two apps, one press β€” from the quick panel or a combo; "Save what's on the screens now"
  • Screens restored after a restart (optional)
  • Recent apps (Back Β· double), driven by the controller: browse, open, close, clear all β€” its hint one line of words, symbols or off
  • Close background apps (Back Β· triple) β€” the apps on both screens stay open
  • Close this app β€” close the game you're playing with a combo, no multitask view
  • Home goes home on the screen that has the controller β€” or on the top, the bottom or both screens, with your own combo
Bottom screen & power
  • Bottom screen off with a 3-finger tap (tap again for on) or a 3-finger swipe down; wake it with a double tap (optional) so a thumb brushing it doesn't
  • Auto-off when the bottom screen is unused (15 s – 2 min)
  • Per-app bottom-screen rule (keep on / off)
  • Screen modes: both / top only / bottom only
  • Stay awake
  • Do not disturb while playing β€” never touches a Do not disturb you turned on yourself
  • A Battery page: what the Thor draws right now, stop charging at 80 % and direct power (with what the charger is doing now), sleep
Display & sound
  • Brightness per screen; Home + R2 / L2 = brighter / dimmer on both, keeping their difference (or one screen, with your own combo)
  • Volume per screen, and the volume buttons change both together; "Same on both" when they differ
  • Colour saturation (50–130 %)
  • Speaker fix: EQ, +15 dB with a limiter and a stereo widener β€” EQ on / off to compare, never on headphones. EQ curve: the community preset by Joey (Retro Handhelds) β€” thank you!
  • Volume boost: up to +12 dB with a limiter, on the speakers, headphones and Bluetooth
  • Headphones & Bluetooth EQ: wired, USB and Bluetooth each their own sound β€” presets or a curve you shape; follows what you plug in
  • 60 / 120 Hz, per app or per game
  • FPS counter on either or both screens, in any corner, + battery and temperatures β€” per app or per game
Controller
  • Combos on Home / Back: tap, double, triple, hold, + a button (tapped, twice, three times or held) β€” 30+ actions: volume and brightness per screen, swipes on the screen, record the screen, close the other screen's app…
  • Stick flicks as combo buttons (Home + right stick up / down), and any button can start a combo
  • Combo editor: press the buttons to record a combo
  • Hold Home: a cheat sheet of every combo (let go without pressing anything: nothing happens)
  • Open an app (on the screen you choose), a pair or a Wayfinder page with a combo
  • Per-app combos: normal / custom / off
  • Send the controller to the top or bottom screen, lock it; 4 modes (follows touch, stays where sent, always top, always bottom)
  • AYN button opens Wayfinder's quick panel (or AYN's drawer); a tap and a hold can each do an action, and it can start combos too (AYN + a button)
  • One-press fix for AYN's "press Home twice"
  • Face buttons Nintendo-style / Xbox-style, globally or per app / game
  • Test the controller: stick drift β†’ a suggested deadzone for every game
  • Games see one clean controller that stays controller #1; Home + Back held 5 s = emergency off
  • Bluetooth and USB controllers work alongside β€” only the Thor's own controls are taken over
  • Button names on screen as printed, the Xbox way or PlayStation symbols (or following AYN's controller style)
  • The input layer runs everywhere, only in the games you set up, or nowhere β€” and on / off per game
Game controls (Home + X)
  • Remap per app, and per game inside emulators β€” "Which game?" switcher, "Change a button" by pressing it
  • Automatic game detection (RetroArch, other emulators, GameNative, Cocoon)
  • A button can become a button, the D-pad, keys, the mouse, Android Back, nothing, a macro or a Wayfinder action
  • Several buttons at once, turbo, toggle, long / double press
  • Macros: record, edit, up to 20 steps
  • Chords: two buttons pressed together
  • Hold-to-shift layer (optional, off by default)
  • Each D-pad direction on its own; a stick as the mouse, the scroll wheel or four keys (arrows / W A S D), with dead zones so a resting stick never moves anything; a Web browsing preset
  • Stick deadzone / response curve, trigger ranges, swap sticks, invert up / down and left / right, D-pad ↔ left stick
  • Gyro: mouse, right stick or steering β€” always, while holding, toggle or on trigger pull; smoothing, calibration and auto-calibration; "Gyro on / off" as an action (a combo, a long press, a tile)
  • Emulator presets: RetroArch hotkeys (hold Select + R1 / L1 / R2 / Start), emulator menu on hold Select + Start
  • Copy controls from another app
  • Per-game performance, fan, refresh rate, stick lights, bottom screen and FPS counter
  • Share / import controls as a file β€” filtered, macros arrive switched off
Keyboard & mouse
  • A deck on the other screen (Home + Y): PC keys, trackpad, numpad, emulator, media, video, "My pad" β€” and the game's Guide (its guide page and your notes, even over dual-screen games)
  • Trackpad gestures (2-finger tap = right click, 2-finger drag = scroll, hold + move = drag), sticky Ctrl / Shift / Alt / Win
  • Touch mode: the trackpad moves a pointer on the game's screen and taps, drags and swipes there like a finger β€” for games that ignore a mouse; Direct mode: the trackpad is the game's screen
  • The right pad picked automatically per app
  • Stick-as-mouse mode
  • My pad: your own keys and text snippets; a simpler keyboard page
  • Wayfinder Keyboard: type with the controller, 17 languages, accents, password-safe β€” opens on the other screen so the game keeps its own; pick keys with the D-pad (option); hold Space and slide to move the cursor; emoji; a clipboard with your last 5 copied texts (also in the deck, pasted into the game's screen)
Quick panel (AYN button)
  • A glass panel on the bottom screen, with the game blurred behind β€” over a dual-screen game's second screen too; the game never pauses under it
  • The panel takes the controller, or leaves it to the game (touch only)
  • Brightness, volume, live stats, screen modes
  • 45 shortcut tiles: Wayfinder, Android and AYN switches (bypass charging, 80 % charge limit, L2 / R2 mode…), plus tiles that open an app, an app pair or a Wayfinder page
  • Arrange tiles like a home screen; show, hide and reorder the cards
  • "Now playing": keep performance, fan, refresh rate and the bottom screen for this game
  • Optional media and details cards
Per game and app (Games)
  • Screen, bottom screen, performance, fan, refresh rate, combos, controls, input layer, lights, guide β€” each shows only what you changed
  • Two apps open: performance, fan and refresh rate take the more demanding one; buttons and lights follow the app that has the controller
Guide & notes
  • A game guide (small browser, pin a page) and your notes β€” per game, even inside an emulator; on the bottom screen, in the Home + Y deck, or beside the game when no screen is free (an action and a tile); well-known ad networks aren't loaded
Stick lights
  • AYN default, off, colour, breathing, strobe, spectrum, screen colour
  • Per app / per game, speed, brightness (down to 1 %, or following the screens'), a colour for each stick (wheel or hex); screen colour split left / right, taken from the top screen, the bottom screen or the controller's screen
Capture
  • Screenshots: top, bottom or both stacked (Home + R1)
  • Screen recording of the top screen (up to 3 min, from the quick panel)
Sleep & standby
  • Sleep actions: Wi-Fi, Bluetooth, Tailscale, Syncthing… with conditions (delay, battery, charging, hours)
  • Lid guard: stays asleep in its case β€” with a heat guard (45 Β°C closed in the case β†’ pauses media, performance to Standard)
  • Pause music and videos when the lid closes
  • Sleep when an external display is unplugged
  • Standby drain stats, battery health, an activity log
  • Sleep from a tile, a combo or the AYN button
Look & setup
  • Light / dark / black (OLED) / system theme, see-through glass, blur, your wallpaper or the aurora backdrop β€” or your own flat colours
  • The Hub on either screen β€” with the Hub on top, the bottom screen shows your combos
  • A status strip: where the controller is, the app on each screen, battery, brightness
  • Settings search
  • A welcome tour with practice mode; choose what Wayfinder is for (just screen switching, or everything) β€” More β†’ Features, part by part
  • One-press setup β€” no root, no Shizuku, no PC
  • Backup & restore
  • Help, troubleshooting, a system-access check, open-source licenses, the version number
  • "Update available" next to Ready when a new version is out (checked once a day, can be turned off)

Install

  • An AYN Thor on its stock system ("Force SELinux" off β€” the default).
  • Nothing else: no root, no computer, no Shizuku. Wayfinder uses the Thor's own system service (the one AYN's "Run script as root" uses). Root and Shizuku are only fallbacks: on a rooted Thor your root manager may ask once, and if Shizuku is running it asks for its permission β€” saying no is fine to both.
  1. Download the APK (wayfinder-<version>.apk, free) from the latest release and check it (below) against the checksums listed there.
  2. Beta users: uninstall "Thor Wayfinder" (com.thorwayfinder.app) first β€” 1.0 is a new app (app.wayfinder).
  3. Open Wayfinder: the tour sets everything up (accessibility service, keyboard, background running) and teaches the combos by doing them.
Verify the APK

Every release lists the APK's SHA-256 and the signing certificate's SHA-256. Check them before installing:

certutil -hashfile wayfinder-1.4.1.apk SHA256              (Windows)
sha256sum wayfinder-1.4.1.apk                               (Linux / macOS)
apksigner verify --print-certs wayfinder-1.4.1.apk          (the certificate)

Privacy and security

  • Nothing is collected or sent. The only internet use is the optional Guide page (a small browser: a DuckDuckGo search for your game, or a page you pinned β€” when you open it, or automatically for apps where you turned the Guide companion on), the Ko-fi support link, and a once-a-day check of the latest version number on GitHub (turn it off in Help & status).
  • Wayfinder needs more access than most apps (accessibility, a keyboard, system commands through the Thor's service). What that access is used for, what was reviewed and what was fixed: SECURITY.md.
  • Screenshots and screen recordings capture everything shown, including what apps hide from screenshots.

How it's made

Wayfinder is designed, tested and maintained by one person. Most of the code was written with an AI assistant (Claude, by Anthropic), directed and reviewed feature by feature. Every feature was tested on a real Thor before release, and the code went through dedicated security review passes, also AI-assisted (see SECURITY.md). No outside firm audited it β€” the full source is here so anyone can check it.

Building from source

The source is published so anyone can audit it.

  • Android Studio (its JBR, JDK 17+) with the Android SDK; the native parts need the NDK (27.2.12479018).

  • ./gradlew :app:assembleDebug β€” a debug build (use -Pminify for a build shrunk like the release).

  • Native binaries shipped in app/src/main/assets/fx/ are built from fx/: tools/build_wfpad.sh (the input layer; tools/build_wfpad.sh test runs its unit tests on a Thor) and tools/build_fx.sh (the speaker widener) β€” Windows + Git Bash, NDK in the default SDK folder. SHA-256 of the shipped copies:

    • wfpad β€” a08e13ea3a0bd90b9b5c8e2d7ea4c3594720f0522eb31133c46472aaac78b7b8
    • libwfwide.so β€” f64974296927c51c1645b5c56af38504ef5e364d34df7620c07c0ce8a08d6b8a

    Rebuilt from this source with NDK 27.2.12479018 and those scripts, both come out byte-identical.

  • Release builds are signed by the maintainer (tools/release.ps1); the key is never in this repository.

  • Some code comments refer to the maintainer's private design notes; they aren't needed to build or understand the code.

Disclaimer

Wayfinder works around Android's limited support for two screens. Most apps move fine; a few heavy or unusual apps may restart or refuse to move.

Wayfinder is an independent project, not affiliated with, endorsed or sponsored by AYN or any other company named here. AYN, Thor and Odin are trademarks of AYN; Nintendo, Xbox, RetroArch, PPSSPP, Dolphin, DuckStation, GameNative, Cocoon, Spotify, Steam, Shizuku, Tailscale, Syncthing and other names are trademarks of their respective owners, used only to describe compatibility.

Credits
  • Sleep & standby β€” the ideas come from SleepManager by Baggio94 (closed-lid protection, false-wake handling, sleep actions and conditions, standby statistics). Wayfinder's version is written from scratch: no SleepManager code was copied. Thank you!
License

Wayfinder's own code: PolyForm Strict 1.0.0 (SPDX: PolyForm-Strict-1.0.0) β€” source-available, not open source. The source is published for transparency and security auditing. In short: you may read it, audit it, and build it as-is for your own personal, non-commercial use; you may not share it or builds of it, change it, or use it commercially. For anything else, ask through the Ko-fi page below. The Wayfinder name and icon are not licensed.

Not covered by that license: the Gradle wrapper (gradlew, gradlew.bat, gradle/wrapper/, Apache 2.0) and the libraries built into the app β€” see THIRD_PARTY_NOTICES.txt (also in the app: Help & status β†’ Open-source licenses).

Contributions: pull requests aren't accepted (the license doesn't allow changes to the code) β€” bug reports and ideas are welcome as issues.

Support

Wayfinder is made by one person. It's free; if it makes your Thor better, you can support me on Ko-fi:

Support me on Ko-fi

Questions and bug reports: open an issue.

Close

How Shizuku is used

Can move apps between the two Thor screens and force-stop stuck apps via `am start` and `am force-stop` through Shizuku.

This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.

How this app uses Shizuku

Shizuku is used to reliably move running apps between the two device screens when a swap is triggered.

  • Move apps between screens: the apps detected on each display are relaunched on the opposite display with the am start --display shell command through Shizuku, which reuses the existing task and works for apps that ignore normal display hints.
  • Force-stop stuck apps: when an app ends up duplicated on both screens or fails to move, it is closed with the am force-stop shell command through Shizuku, then relaunched once on the target display.

Android APIs or commands used

  • am start --display
  • am force-stop

Notable details

Without Shizuku the app still tries to move apps with a normal relaunch trampoline and to close them with the standard background kill, but the source notes Shizuku is recommended because the normal path cannot reliably move some apps or actually stop foreground apps.

Close

Changelog

What's new for version 1.0

Get the APK: wayfinder-1.4.1.apk under Assets below β€” free. Installs over any earlier version: updating changes none of your settings. If Wayfinder makes your Thor better, you can support me on Ko-fi:

Support me on Ko-fi

What's fixed in 1.4.1

  • Wayfinder closed when you pressed ⌫ at the start of a text field with the Wayfinder Keyboard β€” for example the hex code of your own colours. The same could close other apps' text fields: ⌫ with nothing before the cursor now does nothing.
  • Typing in a filled-in field started at the beginning (a hex code went in front of the old one): editing now starts at the end.
  • Colour saturation went back to 110 % after a restart on some Thors: Wayfinder now puts your own value back once it has started.

New in 1.4 (a simpler Hub, the Battery page, works next to ClusterTune and Pulse, headphones & Bluetooth EQ…): the 1.4 release Β· Every change: CHANGELOG Β· How to use it: wiki

Verify your download

certutil -hashfile wayfinder-1.4.1.apk SHA256              (Windows)
sha256sum wayfinder-1.4.1.apk                               (Linux / macOS)
apksigner verify --print-certs wayfinder-1.4.1.apk          (the certificate)

Checksums

  • APK (wayfinder-1.4.1.apk) SHA-256: ac3061f83dfdd17e4f6ad6e595789c30c35f1fb5f66df16fb37840f6748138b5
  • Signing certificate SHA-256: 21d1272b5116449056206037600171702c6d4ad5897cf4e9be192a4cd1a2913b (same key as every release)
  • Built from commit 3a083bc (tag v1.4.1)
  • VirusTotal: 0 / 58 β€” report
Close

Permissions

8 permissions requested

  • android.permission.QUERY_ALL_PACKAGES
  • android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
  • android.permission.FOREGROUND_SERVICE
  • android.permission.POST_NOTIFICATIONS
  • android.permission.KILL_BACKGROUND_PROCESSES
  • android.permission.VIBRATE
  • com.thorwayfinder.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
  • moe.shizuku.manager.permission.API_V23
Close