|
|
1 týždeň pred | |
|---|---|---|
| android | 1 týždeň pred | |
| assets | 1 týždeň pred | |
| docs | 1 týždeň pred | |
| lib | 1 týždeň pred | |
| test | 1 týždeň pred | |
| tool | 1 týždeň pred | |
| .gitignore | 1 týždeň pred | |
| .metadata | 1 týždeň pred | |
| AGENTS.md | 1 týždeň pred | |
| README.md | 1 týždeň pred | |
| analysis_options.yaml | 1 týždeň pred | |
| pubspec.lock | 1 týždeň pred | |
| pubspec.yaml | 1 týždeň pred |
A calm, configurable Android car dashboard launcher, built with Flutter.
CarDash replaces the tablet home screen with one landscape page: a large clock, battery and Wi-Fi status, the main media-volume control, and up to 16 buttons — Navigation, Music, Radio, Settings, All apps, plus any apps you pin from All Apps. The first three can be shown, hidden and assigned to installed apps. External apps open full-screen using the normal Android launcher mechanism. No overlays, no root, no kiosk setup.
Verified on Android 15 and Android 10 tablet emulators at 1280×800 and 1024×600. Runs on a physical Android 17 HyperOS tablet. Landscape only.
| Light | Dark |
|---|---|
![]() |
![]() |
Also: 16-button home · 16 buttons at 1024×600 · All apps · app picker · Settings · home buttons · PIN lock · 1024×600 layout
The Android application ID is com.wasp.cardash_launcher. Android package
segments cannot contain hyphens, so the requested com.wasp.cardash-launcher
spelling is normalized to an underscore.
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
export ANDROID_HOME=/opt/android-sdk
export PATH="$ANDROID_HOME/platform-tools:$PATH"
flutter pub get
./tool/check.sh
# Boot the prepared 10.1" 1280×800 Android 15 tablet (headless)
./tool/emulator.sh 35
# Build, install, and make CarDash the HOME app
./tool/install.sh debug
If the emulator does not yet exist on another machine, create it with:
sdkmanager "system-images;android-35;google_apis;x86_64"
avdmanager create avd -n cardash_tablet_api35 \
-k "system-images;android-35;google_apis;x86_64" \
-d "10.1in WXGA (Tablet)"
The repository also has an Android 10 AVD (cardash_tablet_api29) for
minimum-version checks.
flutter build apk --release
adb install -r build/app/outputs/flutter-apk/app-release.apk
adb shell cmd role add-role-holder android.app.role.HOME com.wasp.cardash_launcher
adb shell am start -a android.intent.action.MAIN -c android.intent.category.HOME
On a real tablet, use Settings → General → Home app → Set as default and accept the system prompt. The in-app "Make CarDash your home app" card does the same thing. Android will not let an app force itself into the home role silently.
| Action | Result |
|---|---|
| Tap Navigation / Music / Radio | Open the assigned app full-screen |
| Long-press Navigation / Music / Radio | Pick a different installed app |
| Tap an unassigned shortcut | Open the app picker |
| Settings → Home buttons switches | Show or hide Navigation, Music, Radio |
| Long-press an app in All Apps | Add it to Home (up to 16 buttons) |
| Long-press an added app on Home | Remove it from Home |
| Settings | Theme, home buttons, default-home role, PIN |
| All apps | Search every launchable app; tap to open, hold to pin |
| Screen | Stays awake while CarDash is in front |
| Volume ring / mute | Toggle media mute |
| Slider or − / + | Set media volume |
| Hardware volume keys | Adjust the dashboard's media volume; the ring follows |
The app hides the Android status and navigation bars while CarDash is in the foreground. Swipe from an edge to reveal them temporarily; they hide again when the app resumes.
General
Security
lib/
core/ design tokens, theme controller, icons, shared widgets
data/ models, platform services, SettingsRepository (single source of truth)
features/
home/ home page, shortcut grid, volume card, controllers
apps/ All Apps, app-picker sheet
settings/ General + Security
lock/ PIN pad, cold-start lock screen
android/... MainActivity, LauncherBridge, SystemBridge (Kotlin)
tool/ emulator, install, check scripts
docs/ implementation plan, design notes
MethodChannels.SettingsRepository is the only persistence path. Controllers are
ChangeNotifiers injected with provider.flutter analyze
flutter test
./tool/check.sh
The 17 tests cover PIN hashing/persistence, settings persistence, theme resolution, slot visibility, pinned apps, the 16-button cap and the dense shortcut grid. Native package enumeration, the HOME role, volume, app launching and PIN flows were verified on API 35 and API 29 emulators, including the release APK. The home-button, pinning and keep-awake flows were checked at 1280×800 and 1024×600. Release 0.2.0 is also installed on a physical Android 17 HyperOS tablet.
The prepared AVDs use the host GPU (-gpu host), which is the verified setup on
this machine. Software rendering with SwiftShader segfaulted on the API 35 image.
If your machine has no usable GPU, you can try:
CARDASH_GPU=swiftshader_indirect ./tool/emulator.sh 35
The prepared AVD resolution is 1280×800. If the emulator is already running,
./tool/emulator.sh stop shuts it down before starting a different one. The
Android 15 AVD is left running headlessly after development; use
./tool/emulator.sh 35 window for a visible window.
sensorLandscape). The home page is designed for
1280×800 and remains usable at 1024×600.QUERY_ALL_PACKAGES is used to list all launchable apps. It is reasonable
for a launcher but requires a Play policy declaration if the app is ever
distributed; this is a local/sideload build for now.The visual language is inspired by the TrailCurrent Godwit head unit (MIT): warm neutral surfaces, a single deep-green instrument accent, large numerals and quiet line icons. It is not a copy of that UI.
lib/core/theme/app_colors.dart.This repository is in local development and has not been pushed or published. A project license has not been chosen yet. Third-party asset licenses: Manrope (OFL) and Lucide (ISC). The design is inspired by TrailCurrent Godwit (MIT).