VR Launcher
2.2.3 · GitHub
More about this app
Customizable home launcher for Meta Quest headsets with app organization, playtime tracking and Shizuku-powered clear data/cache actions.
🚀 EvolveLauncher - VR Launcher for Meta Quest
EvolveLauncher is a customizable home launcher for Meta Quest headsets. Organize your apps, track playtime, and personalize your VR experience.
✨ Current Features
📱 App Launcher
- Customizable app grid with adjustable icon sizes
- Real-time search filtering by app name or package
- Launch any installed app with one tap
- App hiding (remove unwanted apps from view)
📁 Category Management
- Create, rename, and delete categories
- Move multiple apps to categories at once (Edit Mode)
- Remove apps from categories
- Category badges displayed on app icons
- Category bar for quick switching
⏱️ Playtime Tracking
- Track usage for Today, This Week, This Month, and All Time
- View playtime leaderboard (most played games)
- Currently playing app indicator
- Per-app playtime statistics
- Reset all playtime data
💾 Backup & Restore
- Export all settings and categories to JSON file
- Import from backup file to restore configuration
- Cross-device backup compatibility
🖼️ Visual Customization
- 6 built-in backgrounds (Space, Nebula, Grid, Mountains, Abstract, Circuit)
- Custom image backgrounds from gallery
- Adjustable background opacity (0-100%)
- Transparent/see-through background option
📊 System Information
- Device model and manufacturer
- Android version and API level
- RAM usage (total, used, free)
- Internal storage usage
- Battery percentage and charging status
- WiFi signal strength and IP address
- App version and package info
⚡ Quick Settings Panel
- Volume control with slider (+/- buttons)
- Accessible via long-press on settings gear
🔧 Other Features
- Auto-start on Quest boot (toggle on/off)
- Edit Mode for batch category assignment
- App install/uninstall detection (auto-refresh)
- WiFi details on long-press
📸 Screenshots
🚀 Installation
Prerequisites
- Meta Quest 1, 2, 3, or Pro
- Developer Mode enabled
- SideQuest or ADB access
Steps
Download
EvolveLauncher.apkfrom ReleasesInstall via adb or any sideloader:
- Open adb or any Sideloader on your computer
- Drag and drop the APK
- Click install
Grant Usage Stats Permission (required for playtime tracking): (No Longer Needed built Into Settings)
adb shell pm grant com.jarjarblinkz.EvolveLauncher android.permission.PACKAGE_USAGE_STATS
How Shizuku is used
Can reset Quest UI, open app and system settings, adjust brightness, toggle Wi-Fi and Bluetooth, and reboot via `shell 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
Shizuku is used to run privileged system commands for Quest device and app management.
- Reset Quest interface: clears stored data for the Quest system shell to restore the older style UI using the
pm clearshell command through Shizuku. - Restart Quest interface: force stops the Quest system shell so it restarts on next use using the
am force-stopshell command through Shizuku. - Open app details: opens the system app info screen for a selected app so the user can use the system Clear cache and Clear data buttons using the
am startshell command through Shizuku. - Open system settings: opens the system Settings screen directly using the
am startshell command through Shizuku. - Adjust screen brightness: applies the brightness slider value using the
settings put system screen_brightnessshell command through Shizuku. - Toggle wireless connections: turns Wi-Fi on or off and Bluetooth on or off from quick settings using the
svc wifiandsvc bluetoothshell commands through Shizuku. - Reboot or power off: restarts the headset and shuts it down completely from the power menu using the
rebootandreboot -pshell commands through Shizuku.
Android APIs or commands used
pm clearam force-stopam startsettings put system screen_brightnesssvc wifisvc bluetoothrebootreboot -p
Notable details
Opening app details and system settings still works without Shizuku using the normal system screens, Shizuku only provides a more direct launch.
Changelog
What's new for version 2.2.3
📝 Release Notes — Evolve Launcher
✨ New Features
- Settings as Separate Quest Panel — Settings now opens in its own floating window beside the launcher instead of replacing it. Matches the launcher's window size for a consistent feel.
- Real-Time Category Updates — Creating, renaming, or deleting categories now reflects instantly on the launcher. Category buttons appear/disappear and card badges update without needing a restart.
- Discrete Icon Size Scales — Icon size slider now snaps to 5 preset sizes (82 / 99 / 125 / 165 / 236 dp) for more reliable layout behavior.
- Markdown Release Notes — Update dialogs now render GitHub-style markdown (headers, bold, code blocks, lists, links) instead of plain text.
- Compositor Refresh on Game Launch — Accessibility service now detects when a Unity/Unreal game becomes active and fires a wake lock to help clear Meta's loading overlay getting stuck on screen.
- Help & Tips Hover Trigger — Hovering over the Help & Tips tile in Meta's library for 300ms now opens Evolve Launcher (previously Store tile, 1500ms dwell).
🎨 Visual Polish
- Card hover effect — Pointing your controller at a card now makes it pop forward (scale 1.15×, +40dp lift) with an overshoot bounce.
- Card click effect — Clicking a card triggers a dramatic pop-out toward you (scale 1.22×, +56dp lift) with a satisfying spring before the app launches.
- Launcher entry animation — Cards now fly in from 8 different directions when the launcher opens, cycling through compass points so the grid feels like it's assembling from all sides.
- Category bar entry animation — Category buttons pop up from below with a staggered cascade when the launcher first opens.
- New categories animate in — Categories created in Settings now pop into the bottom bar while existing buttons stay put.
- Category switch transitions — Switching between categories now animates cards flying OUT in 8 directions, then the new category's cards flying IN.
- Increased card elevation — Bumped from 16dp to 20dp for a stronger sense of depth.
- Settings columns no longer scroll — All four columns in Settings now fit their content to the window height without scrolling, with tightened spacing and reduced button sizes.
🐛 Bug Fixes
- Bulk category move now moves all selected apps. Previously only the last selected app would end up in the target category — the in-memory categories map wasn't being updated between loop iterations, causing each save to overwrite the previous one.
- Auto-boot status label now shows the correct state. The status text in Settings was hardcoded to "Disabled" and never updated. It now reads the actual preference on open and updates live when you toggle the switch.
- Settings panel no longer auto-closes unexpectedly. The auto-close on focus loss has been removed — Settings stays open as part of the launcher UI and only closes when you tap the back button.
- Auto-restart toggle now actually works. MainActivity was reading the toggle preference from a wrong SharedPreferences file (
EvolvePrefsvs the correctVRLPrefs), so the user's "disabled" choice was never seen. Additionally hardened the monitor service to self-stop and respect the preference even if Android tried to revive it viaSTART_STICKY. - Deleted categories no longer reappear after launcher restart. App-to-category mappings stored separately from the category list weren't being cleaned up, so badges and assignments would resurrect themselves on next app launch.
- Category badges no longer persist on app cards after deleting their category. Previously the badge would stay until launcher restart.
- Category buttons no longer linger at the bottom of the launcher after category deletion.
- Renaming a category now properly updates app assignments. Apps in a renamed category previously still pointed to the old name behind the scenes.
- Category switch animation now works for all category sizes. A race condition between
notifyDataSetChangedand the entry animation was killing the animation on categories with many items. Fixed with a small layout-settle delay. - Settings window size now matches the main launcher instead of opening at a small phone-sized dialog.
- Update dialog now renders markdown correctly in Settings.
- Auto-restart category fallback — If you're viewing a category that gets deleted, you're now automatically returned to "All Apps".
- Broadcast delivery fixed for Android 13+ — Category change broadcasts now use explicit package targeting.
🛠️ Technical Improvements
persistableMode="persistNever"on MainActivity to release compositor window token cleanly when a VR game launches.forced3dandfocusawareremoved from MainActivity manifest — prevents HorizonOS treating the launcher as a persistent 3D panel which was blocking focus transfer to games.- Wake lock (
WAKE_LOCKpermission) added — used for compositor refresh both on game launch detection and on launcher resume. launchAppsimplified to plaingetLaunchIntentForPackage+moveTaskToBack+startActivity— removed all service-based and delayed launch approaches.- Debounced window-resize handler (100ms) prevents rapid-fire layout recalculations during Quest panel resizing.
- Cleaner column calculation using a new
CARD_HORIZONTAL_OVERHEAD_DPconstant. - Reduced card spacing from 12dp → 2dp for tighter, more compact app grid.
- Backward-compatible icon size storage — supports both the new scale index (
icon_size_scale) and legacy dp value (icon_size). - Defensive category validation on launcher load — stale category references from previous versions auto-clean on next startup.
Permissions
22 permissions requested