SystemKit — Android Device & Utility Extension

SystemKit — Android Device & Utility Extension (Zero Permissions)

Hey everyone! Releasing SystemKit — a lightweight, all-in-one utility extension for App Inventor / Niotron that packs 200+ blocks covering almost everything an app needs to know about the device and OS, plus handy formatting and quick-action tools — all without a single <uses-permission> entry.

If you've ever needed battery %, RAM, screen size, dark mode state, network status, or just wanted to format bytes into "5.2 MB" without writing boilerplate math — this extension replaces a dozen small extensions with one clean, well-organized kit.

com.zebdroid.systemkit.aix (91.0 KB) New update

:sparkles: Highlights

:mobile_phone: Deep device & app info — model, manufacturer, Android version, SDK level, CPU, RAM, app version/package/install source, and info on other installed apps too

:battery: Battery & thermal monitoring — live battery level/charging events, thermal throttling status, power-saver detection

:desktop_computer: Display & Edge-to-Edge UI control — screen size/density/refresh rate, safe-area insets, status/nav bar color & transparency, immersive mode, one-line EdgeToEdge(true)

:speaker_high_volume: Audio environment — volume levels, ringer mode, headset/bluetooth detection, audio focus request/abandon

:globe_with_meridians: Privacy-safe connectivity — connection type, metered/roaming/airplane-mode checks, live connectivity events — no SSID, BSSID, MAC, or IP address ever exposed

:floppy_disk: App storage tools — app data/cache size, available/total storage, low-storage warning, one-tap cache clear

:game_die: Developer utilities — bytes⇄KB/MB/GB/TB conversion, human-readable byte/duration formatting, number rounding & comma formatting, random ID/UUID generation, range mapping

:clipboard: Clipboard, haptics, sharing, quick actions — clipboard get/set, standard haptic feedback, share sheet, dial/email/map intents

:artist_palette: Color utilities — hex⇄color conversion, contrast color, light/dark detection

:stethoscope: One-tap diagnosticsGetDiagnosticsText() dumps a full, readable device/app snapshot — perfect for bug reports, straight to clipboard with CopyDiagnostics()

:locked: Why zero permissions matters

SystemKit is built with one hard rule: no sensitive identifiers, no background services, no polling. It never touches IMEI, MAC address, SSID, Android ID, or location — everything is read from APIs that are freely available to any app on the platform. That means:

  • No permission prompts to scare off users

  • No Play Store data-safety disclosures to fill out

  • No manifest changes needed on your end — just drop it in

:hammer_and_wrench: Reliability

Every property-lookup block routes through a null-safe parser, so an empty or accidentally-null text block from your app will never crash SystemKit — it just returns a safe default ("UNKNOWN", -1, or false) instead of throwing an exception. All lifecycle-aware listeners (battery, thermal, network, audio focus) register and unregister cleanly with guards against double-registration, and StopAllMonitors() is provided as a one-call cleanup you can wire into Screen.Closing.


:books: Full Block Reference

App Information

Block Description
AppName() App's display name.
AppPackage() App's package name.
AppVersionName() Version name (e.g. 1.2.3).
AppVersionCode() Version code as a number.
AppTargetSdk() Target SDK level.
AppMinSdk() Minimum SDK level.
IsAppDebug() True if this is a debug build.
AppInstallSource() Where the app was installed from (Play Store, etc).
RestartApp() Restarts the app from its launch screen.
GetAppInfoJSON() All app info as one JSON string.

Package Information (other installed apps)

Block Description
IsPackageInstalled(packageName) True if the package is installed.
PackageName(packageName) Display name of another package.
PackageVersionName(packageName) Version name of another package.
PackageVersionCode(packageName) Version code of another package.
IsPackageSystemApp(packageName) True if it's a system app.
LaunchPackage(packageName) Launches another app.
OpenPackageInfoScreen(packageName) Opens the system App Info screen for it.
OpenPackageInPlayStore(packageName) Opens its Play Store listing.
OpenPackage(packageName, action) Generic opener: LAUNCH / APP_INFO / PLAY_STORE.

Device Information

Block Description
DeviceModel() Device model name (e.g. Pixel 8).
DeviceManufacturer() Manufacturer (Google, Samsung, etc).
DeviceBrand() Device brand.
AndroidVersion() Android version (e.g. 14).
AndroidSdkLevel() Android SDK/API level.
DeviceSecurityPatch() Security patch date.
CpuCoreCount() Number of CPU cores.
Is64BitDevice() True if the CPU is 64-bit.
GetDeviceInfoJSON() All device info as JSON.

Memory

Block Description
TotalMemory() Total device RAM, in bytes.
AvailableMemory() Free RAM, in bytes.
UsedMemory() Used RAM, in bytes.
MemoryUsagePercent() Memory usage as a percentage.
IsLowMemory() True if the system is in a low-memory state.
GetMemoryInfoJSON() All memory info as JSON.

Display / Screen

Block Description
ScreenWidthPx() / ScreenHeightPx() Screen size in pixels.
ScreenWidthDp() / ScreenHeightDp() Screen size in dp.
ScreenDensity() / ScreenDensityDpi() Density scale / DPI.
ScreenRefreshRate() Refresh rate in Hz.
IsLandscape() / IsPortrait() Current orientation checks.
IsTablet() True for large-screen devices.
HasCutout() True if there's a notch/camera cutout.
KeyboardHeightPx() On-screen keyboard height (0 if hidden).
GetSafeArea() Full safe-area JSON: insets, cutout, keyboard height.
GetDisplayInfoJSON() All display info as JSON.

System UI / Edge-to-Edge

Block Description
EdgeToEdge(enable) One-line edge-to-edge toggle.
SetStatusBarColor(color, lightIcons) Status bar color + icon style.
SetNavBarColor(color, lightIcons) Nav bar color + icon style.
SetStatusBarTransparent(bool) / SetNavBarTransparent(bool) Transparent bars.
HideStatusBar() / ShowStatusBar() Toggle status bar.
HideNavBar() / ShowNavBar() Toggle nav bar.
SetStatusBarLightIcons(bool) / SetNavBarLightIcons(bool) Icon style only.
EnterImmersiveMode() / ExitImmersiveMode() Sticky full-screen mode.
ShowSystemBars() / ResetSystemUI() Restore defaults.
KeepScreenOn(bool) Prevent sleep (video/reader screens).

Orientation

Block Description
SetOrientation(mode) PORTRAIT / LANDSCAPE / SENSOR / UNSPECIFIED.
GetOrientation() Current orientation.

Appearance & Configuration

Block Description
IsDarkMode() True if system dark mode is on.
FontScale() System font scale factor.
Language() / Country() Locale language/country codes.
CurrentTimeZone() Time zone ID (e.g. Asia/Kolkata).
ScreenSizeClass() SMALL / NORMAL / LARGE / XLARGE.
SmallestWidthDp() Smallest-width dp for responsive layouts.
KeyboardType() QWERTY / 12KEY / NONE.
NavigationType() DPAD / TRACKBALL / WHEEL / NONE.
ConfigurationChanged(...)event Fires on rotation/dark-mode/font/locale change.

Battery & Thermal

Block Description
BatteryLevel() Battery percentage (0-100).
IsCharging() True if charging.
ChargingType() AC / USB / WIRELESS / NONE.
BatteryTemperature() Battery temp in °C.
IsBatteryLow() True at 15% or below.
IsPowerSaverOn() True if battery saver is on.
GetBatteryInfoJSON() Full battery info as JSON.
BatteryChanged(...)event Fires on level/charging change.
StartBatteryMonitor() / StopBatteryMonitor() Control the listener.
GetThermalStatus() NONE → SHUTDOWN thermal scale.
ThermalStatusChanged(...)event Fires on thermal state change (Android 10+).
StartThermalMonitor() / StopThermalMonitor() Control the listener.

Hardware Capabilities

Block Description
HasFeature(feature) Check CAMERA, FLASH, VIBRATOR, BLUETOOTH, NFC, BIOMETRIC, WIFI, ACCELEROMETER, and more.

Audio

Block Description
MusicVolume() / MusicMaxVolume() Current & max media volume.
RingerMode() SILENT / VIBRATE / NORMAL.
IsMusicActive() True if media is currently playing.
AudioOutputType() BLUETOOTH / WIRED_HEADSET / SPEAKER / EARPIECE.
SetVolume(stream, level) Set MUSIC/RING/ALARM/NOTIFICATION volume.
IsHeadsetConnected() / IsBluetoothAudioConnected() / IsWiredHeadsetConnected() Output detection.
GetAudioInfoJSON() All audio info as JSON.
RequestAudioFocus(type) / AbandonAudioFocus() Audio focus control.
AudioFocusChanged(...)event Fires on focus change.

Connectivity (privacy-safe)

Block Description
ConnectionType() WIFI / CELLULAR / ETHERNET / VPN / OTHER.
IsConnected() True if internet is reachable.
IsInternetValidated() True if the connection has real internet access (not just captive-portal linked).
IsMeteredConnection() / IsRoaming() / IsAirplaneModeOn() Connection state checks.
NetworkChanged(...)event Fires when connectivity is gained/lost.
StartNetworkMonitor() / StopNetworkMonitor() Control the listener.

No SSID, BSSID, MAC address, or IP is ever read or exposed — connection type/state only.

Intents, Sharing & Clipboard

Block Description
OpenSettings(type) Jump to any system settings screen.
OpenUrl(url) / CanOpenUrl(url) Open/check a URL.
OpenIntent(action, data) / CanHandleIntent(action, data) Generic safe intent opener.
Share(text, title) / ShareUrl(url) / CanShare() System share sheet.
SetClipboard(text) / GetClipboard() / HasClipboardText() / ClearClipboard() Clipboard control.
DialNumber(phone) Opens dialer pre-filled (no CALL_PHONE permission needed).
ComposeEmail(to, subject, body) Opens an email app pre-filled.
OpenMap(query) Opens a location/search in a maps app.

Haptics

Block Description
Vibrate(ms) Vibrate for a duration.
VibratePattern(pattern) Vibrate with a custom pattern.
CancelVibration() Stop vibration.
Haptic(type) Standard system feedback: CLICK / LONG_PRESS / CONFIRM / REJECT.

Device State

Block Description
IsScreenOn() True if screen is on & interactive.
IsEmulator() / IsPhysicalDevice() Emulator detection.
IsDeveloperModeOn() True if Developer Options is enabled.
HasSecureLockScreen() True if a PIN/pattern/biometric lock is set.
IsDeviceIdle() True during Doze mode.
GetUptime() Milliseconds since boot.

Multi-Window / Picture-in-Picture

Block Description
IsMultiWindow() / IsPictureInPicture() Mode checks.
CanUsePictureInPicture() Support check.
EnterPictureInPicture() Attempt to enter PiP.
SetPictureInPictureAspectRatio(w, h) Set PiP aspect ratio.

Secure Window

Block Description
SetSecureWindow(bool) Block screenshots/screen recording.
IsSecureWindow() Check current state.

Storage (app-owned, no storage permission)

Block Description
AppDataSize() / AppCacheSize() This app's own data/cache size, in bytes.
AvailableStorage() / TotalStorage() Free/total device storage, in bytes.
IsStorageLow() True if free space is under 10% or 50MB.
HasExternalStorage() True if removable storage is available.
ClearAppCache() Clears this app's cache folder only.

Locale & Time Formats

Block Description
CurrencyCode() Locale currency code (USD, INR, etc).
DecimalSeparator() Locale decimal separator character.
FullLocale() Full locale identifier (e.g. en_US).
LocaleScript() Script (e.g. Latn).
DateFormatPattern() / TimeFormatPattern() Locale-native short patterns.
Is24HourFormat() True if 24-hour clock is enabled.

Compatibility

Block Description
IsApiAtLeast(api) Check minimum API level.
GetApiLevel() Current API level.
Supports(feature) Feature support check (EDGE_TO_EDGE, BIOMETRIC, PIP, etc).

Color Utilities

Block Description
IsColorLight(color) Perceptual light/dark check.
GetContrastColor(color) Auto black/white contrast pick.
HexToColor(hex) / ColorToHex(color) / ColorToHexWithAlpha(color) Hex ⇄ color conversion.
IsValidHexColor(hex) Validate a hex string.

Data Size Formatting :new_button:

Block Description
BytesToKB/MB/GB/TB(bytes) Convert bytes to larger units.
KBToBytes/MBToBytes/GBToBytes(value) Convert back to bytes.
FormatBytes(bytes) Auto-unit human string, e.g. 5242880"5.0 MB".

Time & Duration Formatting :new_button:

Block Description
CurrentTimestamp() Current Unix time in ms.
FormatDuration(ms) Friendly duration, e.g. "1d 1h".
DurationToClock(ms) Timer format, e.g. "02:15:30".
FormatTimestamp(ms, pattern) Custom date/time pattern formatting.
TimeAgo(ms) Relative time, e.g. "3 days ago".

Number Formatting :new_button:

Block Description
RoundTo(number, decimals) Round to N decimal places.
FormatNumberWithCommas(number, decimals) e.g. 1234567.5"1,234,567.50".
FormatPercent(fraction, decimals) e.g. 0.256"25.6%".
Clamp(number, min, max) Clamp within a range.
MapRange(value, inMin, inMax, outMin, outMax) Remap a value between ranges.

Random & Unique IDs :new_button:

Block Description
RandomInt(min, max) / RandomDecimal(min, max) Random numbers.
RandomString(length) Random alphanumeric string.
GenerateUUID() Random UUID string.

Diagnostics

Block Description
GetDiagnostics(section) JSON snippet for one section (APP, DEVICE, BATTERY, etc).
GetDiagnosticsJSON() Full diagnostics as JSON.
GetDiagnosticsText() Full diagnostics, human-readable — great for bug reports.
CopyDiagnostics() Copies diagnostics text straight to clipboard.
StopAllMonitors() Stops all active listeners in one call — wire to Screen.Closing.

:locked: Permissions

None. SystemKit adds zero <uses-permission> entries to your manifest. It's built entirely on APIs that are freely accessible to any Android app.

:white_check_mark: Compatibility

Works from Android 5.0 (API 21) upward, with graceful "UNKNOWN" / false fallbacks on OS versions where a specific feature (e.g. thermal status, PiP) isn't available — so a single build safely spans old and new devices.


As always, drop questions or bug reports on this thread — happy to help! :folded_hands:

2 Likes

Very impressive !!! :open_mouth:

1 Like

Wow!
But most packageName methods don't work. Also SetNavBarTransparent doesn't work (at least not on Android > 15).

1 Like

Okay I will fix soon .

I think you've installed the wrong plugin. This plugin doesn't resemble the one you mentioned in your first message.

please edit the first post in this thread and upload the new version there
like this the latest version can be found always in the first post of an extension thread

also it looks like you got confused...

this thread is about SystemKit and not Mediapicker

Taifun