packages/os/android/system-ui/DEFERRED.md
This package scaffolds the React surface. Wiring it to real AOSP system state requires native integrations that are intentionally out of scope for this session.
frameworks/base/packages/SystemUI with an
app that hosts this React tree inside a WebView (or Hermes + Fabric
if going RN/React Native). Window types:
WindowManager.LayoutParams.TYPE_STATUS_BAR.TYPE_NAVIGATION_BAR.TYPE_KEYGUARD via Keyguard service replacement.
Requires platform signing and android.uid.system.ConnectivityManager.registerDefaultNetworkCallback
WifiManager.getConnectionInfo() for SSID + RSSI. ACCESS_FINE_LOCATION
is required for SSID on Android 10+.TelephonyManager.listen(PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)
/ TelephonyCallback.SignalStrengthsListener. Carrier name via
TelephonyManager.getNetworkOperatorName().AudioManager.getStreamVolume(STREAM_MUSIC) +
AudioManager.isStreamMute(STREAM_MUSIC). Subscribe via
ContentObserver on Settings.System.VOLUME_* URIs.ACTION_BATTERY_CHANGED,
EXTRA_LEVEL / EXTRA_SCALE / EXTRA_STATUS /
EXTRA_PLUGGED.Settings.Global.AIRPLANE_MODE_ON. Writing
requires WRITE_SECURE_SETTINGS (platform signature).PowerManager.reboot() and
PowerManager.goToSleep() require REBOOT /
DEVICE_POWER permissions (platform-signed). For shutdown, broadcast
Intent.ACTION_REQUEST_SHUTDOWN from a system app.Intent(Settings.ACTION_SETTINGS) launched via
Context.startActivity.InputManager.injectInputEvent with KEYCODE_BACK,
KEYCODE_HOME, KEYCODE_APP_SWITCH. Or call directly through the
WindowManagerService AIDL when running as system_uid.KeyguardService /
KeyguardViewMediator. The "voice unlock" pill is visual only.SlowClouds from
@elizaos/ui/backgrounds once that module exists, then pass it into
<LockScreen cloudsModule={<SlowClouds />} />.packages/ui/src/desktop-runtime/ exports a
CompanionBar component + types, pass it to
<LockScreen companionBar={<CompanionBar … />} />.Search for // IMPL: comments in
src/providers/AndroidSystemProvider.tsx for the exact integration
points.
native/ now contains an Android library skeleton
(eliza-android-system-bridge, package ai.elizaos.system.bridge) that
mirrors the JS-side channel map in src/bridge/bridge-contract.ts.
Every method in SystemBridge.kt throws NotImplementedError. Landing
the integration requires:
WebView
and exposes SystemBridge to JS via
WebView.addJavascriptInterface(bridge, "__elizaAndroidBridge").
That bound name is what getBridgeTransport() looks up./system/priv-app/ and signed with the
AOSP platform key.vendor/eliza/permissions/privapp-permissions-ai.elizaos.system.bridge.xml)
granting REBOOT, DEVICE_POWER, WRITE_SECURE_SETTINGS, and the
rest of the signature-level permissions. The library's own
AndroidManifest.xml only declares them.vendor/eliza/sepolicy/ for the bridge service
domain (read + write contexts for power control, AudioManager IPC,
ConnectivityManager IPC, TelephonyManager IPC).frameworks/base/packages/SystemUI in the AOSP build with
this APK (or an overlay product variant under
vendor/eliza/products/).KeyguardService replacement; the
JS-side dismissLockscreen command currently maps to
KeyguardManager.requestDismissKeyguard, which only works from a
foreground activity context.