ShizuStore

Wayfinder (thor-wayfinder)

Thor-Wayfinder

1.4.1 · GitHub

Download APK
Vendor-specific Android 11+ 11 hours ago CC-BY-NC-ND-4.0
49 ShizuStore
64 Stars
4 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 live apps between the two screens and open and home them via `IActivityTaskManager` and `am` commands 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

Wayfinder uses Shizuku to place and move apps between the two Thor screens without losing app state.

  • Move running apps: reparent the live app task to the other display so it keeps its state with no duplicate or relaunch, using the system task manager through Shizuku.
  • Open apps on display: launch the selected app directly on the target display with the am start --display shell command through Shizuku when a live move is not possible.
  • Force stop for moves: force stop an app with the am force-stop shell command through Shizuku before an aggressive move.
  • Show home on display: bring the launcher or home screen to the front on a chosen display with an am start --display home command through Shizuku.

Android APIs or commands used

  • IActivityTaskManager.getTasks
  • IActivityTaskManager.moveRootTaskToDisplay
  • am start --display
  • am force-stop

Notable details

Without Shizuku, the app falls back to a normal relaunch aimed at the target display and to a normal Home intent for returning a screen to home.

Close

Changelog

What's new for version 1.4.1

Before installing: uninstall the beta ("Thor Wayfinder", com.thorwayfinder.app). 1.0 is a new app (app.wayfinder); both running at once would fight over the screens and the controller. Beta settings don't carry over.

Get the APK: wayfinder-1.0.apk under Assets below β€” free. Check it against the checksums at the bottom of this page. If Wayfinder makes your Thor better, you can support me on Ko-fi.

What it does

Two screens, one controller. Wayfinder moves apps between the screens (live β€” nothing restarts), sends the controller where you want it, gives every game its own buttons, and puts the Thor's settings one press away. Everything works with the controller; hold Home any time to see your combos.

  • Screens: move / swap apps (hold Back), app pairs, per-app "opens on" and bottom-screen rules, 3-finger and idle bottom-screen off, screenshots of one or both screens.
  • Quick panel (AYN button): brightness and volume per screen, performance, fan, 60/120 Hz, live stats, your shortcut tiles; arrange its cards (Now playing, Details, Media widgets).
  • Game controls (Home + X): each game's own buttons β€” remaps, keyboard keys, mouse, turbo, long / double press, macros, chords, gyro aiming, stick deadzone / curves, trigger range, an optional Shift button, emulator hotkey presets, and per-game performance, fan, refresh rate and lights. Share a mapping as a file.
  • Keyboard & mouse (Home + Y) on the other screen; Wayfinder Keyboard typed with the controller.
  • Combos: every Home / Back combo can be changed; combos can also open an app, a pair or a page.
  • More: Test the controller (drift β†’ deadzone), Do not disturb while playing, stick lights, sleep & standby (lid guard), speaker sound fix (the community EQ by Joey, Retro Handhelds, built in), backups.

Needs

The AYN Thor with its stock system ("Force SELinux" off, the default). Wayfinder uses the Thor's own system service; no root, no computer, no Shizuku needed (they're only fallbacks: a rooted Thor or a running Shizuku may ask once β€” saying no is fine). Android 11+ (the Thor ships 13).

Privacy

Nothing is collected or sent. The only internet use: the 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), and the optional Ko-fi support link. Screenshots and screen recordings capture everything shown, including what apps hide from screenshots.

How it's made

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, tested on a real Thor, and given AI-assisted security review passes (no outside firm). The full source is published so anyone can check it.

License

Source-available under PolyForm Strict 1.0.0: read, audit and build it for personal non-commercial use; no redistribution, changes or commercial use. Third-party components keep their own licenses (THIRD_PARTY_NOTICES.txt).

Not affiliated

An independent project β€” not affiliated with, endorsed or sponsored by AYN. AYN and Thor are trademarks of AYN; other names are trademarks of their owners, used only to describe compatibility.

Verify your download

Compare the APK's SHA-256 and the signing certificate's SHA-256 with the values below:

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

Checksums

  • APK (wayfinder-1.0.apk) SHA-256: 3485b4a3727cf563307255c23a0cc78c07fc93f29b82fa2252be0abb55620641
  • Signing certificate SHA-256: 21d1272b5116449056206037600171702c6d4ad5897cf4e9be192a4cd1a2913b
  • Built from commit 492e5e8 (tag v1.0)
  • VirusTotal: 0 / 68 β€” report
Close

Permissions

14 permissions requested

  • android.permission.QUERY_ALL_PACKAGES
  • android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
  • android.permission.POST_NOTIFICATIONS
  • android.permission.KILL_BACKGROUND_PROCESSES
  • android.permission.VIBRATE
  • android.permission.INTERNET
  • android.permission.ACCESS_WIFI_STATE
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.WAKE_LOCK
  • android.permission.MODIFY_AUDIO_SETTINGS
  • android.permission.SCHEDULE_EXACT_ALARM
  • android.permission.RECEIVE_BOOT_COMPLETED
  • app.wayfinder.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
  • moe.shizuku.manager.permission.API_V23
Close