Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Repository files navigation

AmbientDock

A custom home launcher for the Carlinkit "TBox Ambient" Android head unit. It throws out the OEM launcher and its sidebar, takes over the whole 800x480 panel, and gives the car a clean glass home screen with a swipe-up dock, an app drawer, gesture navigation, and real split-screen.

Built for one very specific box (rooted Android 13 on a Qualcomm SM6225), but most of the tricks here apply to any AOSP-platform-key-signed automotive ROM.

Home screen

What it does

  • Immersive home. Live "blob" wallpaper drifting behind a glass clock. No status bar, no OEM sidebar, edge to edge.
  • Swipe-up dock. Bottom-edge swipe pops a frosted bar with your 4 most-recent apps plus an Apps button. Auto-hides after a few seconds.
  • App drawer. Full grid of everything launchable, with a live search filter.
  • Gesture nav (since the OEM nav bar is gone): swipe in from a side edge = Back, swipe up = dock, swipe down from the top = notification shade. A plain tap inside any of those edge strips is passed through to the app underneath, so buttons that live on a screen edge still work.
  • Real split-screen. Long-press an app, pick a side, and it opens beside the current app as two resizable freeform windows with a divider you can drag.
  • Quick toggles + Now Playing. WiFi/BT toggles (hold to open that radio's settings) and a media card wired to whatever's actually playing (Spotify, BT music, etc.).
  • Themes. Six accent palettes, applied live to the wallpaper and the dock.

Screenshots

Dock Drawer
Swipe-up dock (recents + workspaces + Apps) Full-width app drawer
Now Playing Toggles
Now Playing card WiFi / BT quick toggles
Clock Theme
Glass clock card on the live wallpaper Live theme switch (purple)
Recents Split
Recents overview Freeform split-screen (shown on emulator)

A few more in screenshots/: the live wallpaper on its own, the recents overview, theme variants, and the settings screen.

How it works

The interesting part is that a third-party launcher normally can't touch privileged windowing, task management, or input injection. AmbientDock can, because of one fact about this ROM:

The TBox firmware is signed with the public AOSP platform test-key. You can verify it yourself - the stock car_launcher certificate SHA-256 matches the well-known AOSP platform key. So the build script re-signs AmbientDock with that same key (scripts/build_system.sh), and Android then grants it signature-level permissions: MANAGE_ACTIVITY_TASKS, REAL_GET_TASKS, INJECT_EVENTS, MEDIA_CONTENT_CONTROL, NETWORK_SETTINGS, and friends. Same privileges the OEM launcher had.

From there:

  • Split-screen uses freeform windowing, not the stock split (which isn't reachable from an app, and the OEM's own split is a custom SurfaceControl/VirtualDisplay engine). Both apps launch with ActivityOptions.setLaunchWindowingMode(FREEFORM) and explicit left/right bounds, then a divider overlay resizes both tasks live via the hidden IActivityTaskManager.resizeTask. Needs enable_freeform_support=1, which the deploy script sets - so reboot once after the first install.
  • Owning the screen. The home activity and every overlay set immersive system-UI flags.
  • Killing the OEM left sidebar. This was two separate things stacked on top of each other. One is a SystemUI navigation bar pinned to the left edge (this ROM ignores config_showNavigationBar, so it gets collapsed with Fabricated RROs that zero the nav-bar dimensions). The other is com.sd.ball ("FloatingBall"), a persistent system-uid overlay app that laughs at pm disable, force-stop, and kill. The only thing that reliably stops it is a systemless Magisk module that masks its APK so PackageManager never registers it. Both are handled by the bundled module - see magisk/floatball-killer/.
  • Killing the top status bar. Same RRO trick on status_bar_height and friends, so apps lay out full-height. WiFi/BT status moves into the home quick toggles; the shade still drops on a top swipe.

Everything OEM-side is reversible. No stock APKs are modified.

Build and deploy

# build + re-sign with the platform key
bash scripts/build_system.sh        # -> app/build/outputs/apk/debug/app-system.apk

# push, install, grant perms, enable freeform, set as HOME
bash scripts/deploy_box.sh

# first install only, so freeform takes effect:
adb reboot

The toolchain is pinned and builds fully offline (AGP 8.4.2, Kotlin 1.9.24, Gradle 8.13, plain Android Views - no Compose). The platform key lives in keystore/platform.{pk8,x509.pem} and is committed on purpose: it's the public AOSP test-key, not a secret, and the build needs it to produce a system-signed APK for this test-key-signed ROM.

To go back to the OEM launcher:

bash scripts/teardown_device.sh <device-ip>:5555 com.example.car_launcher/.MainActivity --uninstall

Project layout

app/                       the launcher (Kotlin + Android Views)
  HomeActivity             HOME app: immersive wallpaper, clock, Now Playing, toggles
  DockOverlayService       persistent service hosting the global overlays
  DockController           all overlay windows: edge strips, dock, drawer, split chooser, divider
  SplitController/SystemSplit  privileged freeform split via hidden framework APIs
  AppRepository            launchable apps, icons, recents (UsageStatsManager)
  BlobWallpaperService     the drifting-glow live wallpaper
magisk/floatball-killer/   systemless module that removes the OEM sidebar + status bar
scripts/                   build, deploy, teardown, sidebar toggle helpers
keystore/                  public AOSP platform test-key
screenshots/               captures from the box + emulator, including the build journey

Compatibility

This targets the Carlinkit TBox Ambient specifically: SM6225 (bengal), Android 13, 800x480 at 120dpi, rooted with Magisk, and crucially signed with the AOSP platform test-key. On a box that isn't platform-test-key signed, the privileged features (split, input injection, task management) won't be granted and you'll be left with home/dock/drawer at normal app privileges. The screen layout is also hard-tuned for 800x480.

Status

Home, dock, drawer, fullscreen launch, gesture nav, live themes, sidebar/status-bar removal, and real split-screen with a draggable divider are all working and verified on the actual box. Daily-driven in the car.

About

Custom glassmorphic home launcher for the Carlinkit TBox Ambient Android head unit: immersive home, swipe-up dock, gesture nav, and real freeform split-screen.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages