Swap the top and bottom apps on the AYN Thor (and other dual-screen Android handhelds) without closing anything. Built for multitasking — game on top + browser on bottom, one action flips them.
- Quick Settings tile — tap Swap Screens from the status shade
- Button combos — hold Start + Select (default) or any combo you configure
- Shizuku-powered — moves apps between displays without restarting them
- Smart swap rules — only swaps when both screens have a real app open (not launcher/home)
| Requirement | Notes |
|---|---|
| AYN Thor (or dual-screen Android 13+ device) | Tested target: AYN Thor |
| Shizuku | Required for moving apps between displays |
| No root needed | Shizuku runs via wireless debugging (ADB shell) |
Download the latest APK from GitHub Releases (after publishing) or build from source (see Build from source).
Transfer the APK to your Thor and install it.
Shizuku gives Screen Switcher permission to move apps between displays. You do not need root.
- Install Shizuku from shizuku.rikka.app or the Play Store
- Enable Developer options on your Thor:
- Settings → About → Build number (tap 7 times)
- Enable Wireless debugging:
- Settings → System → Developer options → Wireless debugging → ON
- Open Shizuku → Start via Wireless debugging
- Tap Pairing → enter the pairing code from Developer options → Pair device with pairing code
- Back in Shizuku → tap Start
- You should see "Shizuku is running"
After every reboot, open Shizuku and tap Start again. This is normal on non-root devices.
- Open Screen Switcher
- Tap Grant Shizuku permission
- In the Shizuku prompt → Allow
Optional but recommended: tap Disable battery optimization.
- Pull down Quick Settings
- Tap Edit (pencil icon)
- Find Swap Screens and drag it into your active tiles
- Tap Done
To swap with Start + Select (or custom combos):
- In Screen Switcher → tap Enable button detection
- In Accessibility settings → find Screen Switcher buttons → turn ON
- Confirm the permission (this service only listens for button presses, not screen content)
Default combo: Start + Select held together.
To customize: Manage button combos → pick buttons → Add combo.
- Open a game (or any app) on the top screen
- Open Chrome (or another app) on the bottom screen
- Either:
- Tap Swap Screens in Quick Settings, or
- Hold Start + Select together
- Apps should swap — game moves to bottom, Chrome moves to top
You can also tap Test swap now inside the Screen Switcher app.
Pull down Quick Settings → tap Swap Screens.
You'll see a brief notification with the result (success or why it didn't swap).
Hold all buttons in a configured combo at the same time. Examples:
| Combo | Use case |
|---|---|
| Start + Select | Default — easy to reach on Thor |
| L1 + R1 | Shoulder button swap |
| Mode + Start | Alternative if Select maps differently |
Manage combos in the app: Manage button combos.
Toggle shortcuts on/off with the Button shortcuts enabled switch (without disabling accessibility).
Swap runs only when both displays have a foreground app that is not the launcher/home screen.
| Message | Meaning |
|---|---|
| Nothing to swap — top/bottom screen has no app | One screen is empty or shows home |
| Same app on both screens | Only one task detected |
| Shizuku not ready | Open Shizuku and tap Start |
| Shizuku permission denied | Re-grant permission in Screen Switcher |
Use this if something isn't working:
- Shizuku installed and shows "Shizuku is running"
- Screen Switcher has Shizuku permission granted
- Battery optimization disabled for Screen Switcher (optional)
- Swap Screens tile added to Quick Settings
- (Optional) Accessibility service Screen Switcher buttons enabled
- Two real apps open — one on top, one on bottom
- After reboot: Shizuku Start tapped again
- Confirm Shizuku is running
- Open Screen Switcher once and tap Test swap now
- Check the notification after tapping the tile — it shows the error
- Reinstall the latest APK
- Confirm accessibility service is ON for Screen Switcher
- Open Manage button combos — verify your combo is listed
- Try the default Start + Select first
- If Thor maps buttons differently, add a combo with Mode or Select variants
- Open Shizuku → tap Start
- If Start fails: toggle Wireless debugging off and on, then try again
- Some games and full-screen apps refuse to move (Android limitation)
- Emulators and browsers usually work well
- Both screens must have separate apps open
See Build from source → Windows below.
- Close Android Studio
- Run
powershell -ExecutionPolicy Bypass -File .\clean-gradle-cache.ps1 - Run
powershell -ExecutionPolicy Bypass -File .\setup-gradle.ps1 - Set Gradle JDK to the project's
.jdkfolder - Reopen and sync
- Android Studio (recommended) or JDK 17 + Android SDK
- Windows, macOS, or Linux
- Clone this repo
- Open the folder in Android Studio
- Build → Build APK(s)
- APK:
app/build/outputs/apk/debug/app-debug.apk
git clone https://github.com/<your-username>/screene-switcher.git
cd screene-switcher
./gradlew assembleDebugOn Windows:
.\gradlew.bat assembleDebugOr use the helper script (sets JDK from .jdk if present):
.\build.ps1If downloads fail with Tag mismatch or AEADBadTagException:
powershell -ExecutionPolicy Bypass -File .\setup-gradle.ps1
.\build.ps1This downloads Gradle/JDK via curl and configures IPv4 workarounds.
If Gradle cache is corrupted:
powershell -ExecutionPolicy Bypass -File .\clean-gradle-cache.ps1Quick Settings tile / Button combo
↓
SwapActionService (foreground)
↓
Shizuku UserService (shell privileges)
↓
ActivityTaskManager.moveRootTaskToDisplay()
↓
Top app ↔ Bottom app
- Display detection — auto-finds top (display 0) and bottom (typically display 2) on Thor
- Task detection — uses
getRootTaskInfoOnDisplay()per screen - Button input — accessibility service filters key events only (no screen reading)
| Permission | Why |
|---|---|
| Shizuku | Move apps between displays via system APIs |
| Accessibility | Detect hardware button combos globally |
| Notifications | Show swap progress/result from Quick Settings |
| Battery optimization | Optional — keeps background reliability |
- Shizuku must be restarted after each reboot
- Not all apps cooperate with display moves (especially some native games)
- Requires apps on both screens — won't swap launcher/empty states
- Experimental dual-display support — behavior depends on Android version and app
If Screen Switcher helps you out, optional tips are welcome:
- Ko-fi — Support me
- donatr.ee/d06d60 — USDT (TRC20, BEP20, ERC20) and other methods.
Issues and PRs welcome. Especially helpful: Thor-specific button keycodes, other dual-screen device testing, and swap reliability improvements.