LauncherX is a powerful extension for building custom Android Home Screen / Launcher apps with Niotron and App Inventor.
Features:
Get & launch installed apps
Get app icons as Base64
Set/check default launcher
App Shortcuts support
Recent & most-used apps tracking
App install/remove/change events
App Info & uninstall support
Built with Java + Rush by Zuhaib. 
com.zebdroid.launcherx.aix (31.4 KB)
launcher.aia (210.1 KB)
how to use this block in project
- GetLaunchableApps
Returns all launchable apps installed on the device with their app name and package name.

2. GetLaunchableAppCount
Returns the total number of launchable apps.

3. GetAppName
Returns the application name from a package name.
4. GetAppIconBase64
Returns the application’s icon as a Base64 PNG Data URL.
5. OpenApp
Opens an installed application using its package name.
7. IsAppInstalled
Checks whether the specified application is installed.
8. IsDefaultLauncher
Checks whether your application is currently the default Android launcher.

9. RequestDefaultLauncher
Shows Android’s system interface to request your app as the default Home/Launcher.

10. GetDefaultLauncherPackage
Returns the package name of the currently selected default launcher.

11. OpenAppInfo
Opens Android’s App Info page for the specified application.
12. UninstallApp
Opens Android’s uninstall confirmation screen for the specified application.
give demo aia file or blocks setup video
LauncherX — Update (Bug Fixes + New Features) + Full Function Reference
Hey everyone! Pushing an update to LauncherX with a few important bug fixes and three new features. Full block reference is included at the bottom for anyone new to the extension.
Version 2.0
com.zebdroid.launcherx.aix (63.6 KB)
Bug Fixes
1. RequestDefaultLauncher() — GotDefaultLauncherResult event wasn’t firing on some devices On Android versions/OEMs where the Home RoleManager role wasn’t available, the block used to fall back to opening Settings directly — but never fired the GotDefaultLauncherResult event afterward. If your app was waiting on that event, it would just hang. Fixed: the fallback path now polls in the background and fires the event once the user sets (or doesn’t set) LauncherX as default, or after a timeout.
2. UninstallApp() returning true when it hadn’t actually started an uninstall On some devices, if the direct uninstall dialog couldn’t be shown, the block fell back to opening the App Info screen instead — but was still returning true, making it look like the uninstall had started. This now correctly returns false for that fallback case, so your app logic won’t be misled.
3. Rare race condition in the Home-forwarding debounce LauncherActivity (which handles Home button presses) and OpenMainScreen() shared a timestamp used to prevent duplicate rapid re-launches. Under specific timing, both could pass the check at nearly the same instant and both fire a launch. This is now handled with an atomic check-and-set, closing that window completely.
New Blocks
Icon Pack Support
-
GetInstalledIconPacks() — lists installed icon packs (Nova, Apex, ADW, GO Launcher-style packs) as AppName|PackageName.
-
GetIconFromPackBase64(targetPackage, iconPackPackage) — returns an app’s icon themed by the chosen icon pack, as a Base64 PNG. Falls back to the app’s normal icon automatically if the pack doesn’t have an entry for it.
-
GetIconFromPackFilePath(targetPackage, iconPackPackage) — same as above, but saves the icon to a file and returns the file path instead.
App Icon as File Path
GetAppIconFilePath(packageName) and GetAppIconFilePathSize(packageName, size) — previously icons were only available as Base64 data URLs (GetAppIconBase64 / GetAppIconBase64Size). These new blocks render the icon to a PNG file in the app’s cache folder and return the file path instead — handy if you need a real file rather than a data URL.
Flashlight Control
-
HasFlashlight() — checks if the device has a flash unit.
-
IsFlashlightOn() — returns the real current hardware state.
-
ToggleFlashlight() — flips it on/off.
-
SetFlashlight(true/false) — sets it explicitly.
Manifest Changes
If you’re building manually / not using the Niotron auto-merge, note the manifest now also declares:
-
android.permission.FLASHLIGHT
-
android.hardware.camera.flash (optional feature, required="false", so it won’t block non-flash devices)
-
<queries> entries for the icon-pack discovery intents (Nova/Apex/ADW/GO)
Compatibility
No breaking changes — all existing blocks work exactly as before. This is purely additive + bug fixes, safe to update.
Full Block Reference
App Discovery & Info
| Block |
Description |
IsReady() |
Returns true when LauncherX is loaded and ready. |
GetLaunchableApps() |
Returns all launchable apps as `AppName |
GetLaunchableAppCount() |
Returns the number of launchable applications. |
GetAppName(packageName) |
Returns the display name of an app. |
IsAppInstalled(packageName) |
Returns true if the package is installed. |
App Icons
| Block |
Description |
GetAppIconBase64(packageName) |
App icon as a PNG Base64 data URL (96x96 default). |
GetAppIconBase64Size(packageName, size) |
Same, with custom size (32-512px). |
GetAppIconFilePath(packageName)  |
App icon rendered to a PNG file; returns the file path. |
GetAppIconFilePathSize(packageName, size)  |
Same, with a custom size (32-512px). |
GetInstalledIconPacks()  |
Lists installed icon packs as `AppName |
GetIconFromPackBase64(targetPackage, iconPackPackage)  |
Themed icon (via icon pack) as Base64 PNG, with automatic fallback. |
GetIconFromPackFilePath(targetPackage, iconPackPackage)  |
Same, saved to a file path instead. |
Opening / Managing Apps
| Block |
Description |
OpenApp(packageName) |
Launches an installed app. |
OpenAppAnimated(packageName, x, y, width, height) |
Launches an app with a zoom-from-icon animation. |
OpenAppInfo(packageName) |
Opens Android’s App Info screen for a package. |
UninstallApp(packageName) |
Opens the uninstall confirmation screen for a package. |
OpenMainScreen() |
Opens this app’s main Niotron screen. |
RestartApp() |
Restarts the app from scratch (fresh process). |
HideFromRecents() |
Excludes this screen’s task from the recent-apps list. |
Default Launcher (Home Role)
| Block |
Description |
IsDefaultLauncher() |
Returns true if this app is the current default Home launcher. |
GetDefaultLauncherPackage() |
Returns the package name of the current default Home launcher. |
RequestDefaultLauncher() |
Prompts the user to set this app as the default Home launcher. |
GotDefaultLauncherResult(success) — event |
Fired after the user responds to the RequestDefaultLauncher() prompt. |
App Shortcuts
| Block |
Description |
HasShortcutPermission() |
Returns true if this launcher has permission to access shortcuts. |
GetAppShortcuts(packageName) |
Returns shortcuts as `ShortcutId |
OpenAppShortcut(packageName, shortcutId) |
Launches a specific shortcut. |
Usage Stats
| Block |
Description |
HasUsageAccess() |
Returns true if Usage Access has been granted. |
RequestUsageAccess() |
Opens Usage Access settings for the user to grant it. |
GetLastUsedTime(packageName) |
Returns the last-used Unix timestamp (ms) for a package. |
GetRecentlyUsedApps(hours, limit) |
Recently used apps as `AppName |
GetMostUsedApps(days, limit) |
Most-used apps as `AppName |
Package Change Events
| Block |
Description |
AppInstalled(packageName) — event |
Fired when a package is installed. |
AppRemoved(packageName) — event |
Fired when a package is removed. |
AppChanged(packageName) — event |
Fired when a package changes (updates etc). |
AppAvailable(packageName, replacing) — event |
Fired when a package becomes available. |
AppUnavailable(packageName, replacing) — event |
Fired when a package becomes temporarily unavailable. |
ShortcutsChanged(packageName) — event |
Fired when an app’s shortcuts change. |
Badges / Unread Counts
| Block |
Description |
RegisterBadgeReceiver() |
Starts listening for badge/unread-count broadcasts (WhatsApp, Gmail, Telegram, etc). |
UnregisterBadgeReceiver() |
Stops listening for badge broadcasts. |
GetBadgeCount(packageName) |
Returns the last-known badge count for a package. |
ClearBadgeCounts() |
Clears all stored badge counts. |
BadgeCountChanged(packageName, count) — event |
Fired when a badge count is received. |
System Panels & Settings Shortcuts
| Block |
Description |
Notifications() |
Expands the notification shade. |
QuickSettings() |
Expands the Quick Settings panel. |
EnterImmersiveMode() |
Hides status/navigation bars for full-screen. |
ExitImmersiveMode() |
Restores status/navigation bars. |
OpenInternetPanel() |
Opens the Wi-Fi + mobile data picker panel. |
OpenVolumePanel() |
Opens the volume control overlay. |
OpenWiFiSettings() |
Opens Wi-Fi settings. |
OpenBluetoothSettings() |
Opens Bluetooth settings. |
OpenNFCSettings() |
Opens NFC settings. |
OpenLocationSettings() |
Opens Location (GPS) settings. |
OpenAirplaneModeSettings() |
Opens Airplane mode settings. |
OpenBatterySettings() |
Opens Battery settings. |
OpenBatterySaverSettings() |
Opens Battery Saver settings. |
OpenStorageSettings() |
Opens Storage settings. |
OpenNotificationSettings() |
Opens this app’s Notification settings. |
OpenDateTimeSettings() |
Opens Date & Time settings. |
OpenLanguageSettings() |
Opens Language settings. |
OpenKeyboardSettings() |
Opens Keyboard/input method settings. |
OpenSecuritySettings() |
Opens Security settings. |
OpenPrivacySettings() |
Opens Privacy settings. |
OpenDefaultAppsSettings() |
Opens Default Apps settings. |
OpenHomeSettings() |
Opens the default Home app picker. |
OpenDisplaySettings() |
Opens Display settings. |
OpenSoundSettings() |
Opens Sound settings. |
Battery, RAM & Device State
| Block |
Description |
GetBatteryLevel() |
Battery percentage (0-100), or -1 if unavailable. |
IsCharging() |
True if charging via USB/AC/wireless. |
GetBatteryTemperature() |
Battery temperature in °C, or -1 if unavailable. |
IsPowerSaveMode() |
True if Battery Saver is on. |
IsInteractive() |
True if the screen is currently on. |
GetAvailableRAM() |
Free RAM in MB. |
GetTotalRAM() |
Total device RAM in MB. |
IsLowMemory() |
True if the system considers itself low on memory. |
Flashlight 
| Block |
Description |
HasFlashlight() |
True if the device has a flash unit. |
IsFlashlightOn() |
True if the flashlight is currently on (real hardware state). |
ToggleFlashlight() |
Toggles the flashlight on/off. |
SetFlashlight(on) |
Turns the flashlight on or off explicitly. |
As always, feel free to report anything odd here on the thread. Thanks! 