Commit 1a6ef28
Initial commit: iLINK
A standalone Flutter dashboard for BYD head units (Leopard 8 / DiLink 5.1).
Vehicle controls, automations and speech recognition run on the device — no
account, no subscription, no hosted API, no MQTT broker, no license check.
Every outbound connection sits behind a switch that ships off, and there is no
analytics SDK or telemetry. The bundled radio directory (5,166 stations across
212 countries) browses and searches with no network at all; only playing a live
stream needs the internet, and only after the driver enables it.
Contributors need nothing that is not in this repository: no private submodule,
no secrets, no backend access. See docs/ORIENTATION.md to get running on an
ordinary Android emulator in about twenty minutes.
Notes carried forward from development, since this history starts fresh:
- Gradle is capped below 9.6 in dependabot.yml. Gradle 9.6.0 removed the
internal API `org.gradle.api.problems.internal.InternalProblems` that every
AGP 8.x relies on, and AGP is held at 8.x until AGP 9 is Flutter-ready. CI
never runs Gradle, so a 9.6+ bump passes every check and still breaks the
build.
- Releases must be tagged `v<versionName>` with no component prefix.
GitHubReleaseSource enforces `tag == 'v$name'` on the device, so a
component-prefixed tag publishes cleanly and is then silently refused by
every installed app.
- `radioPlayerProvider` must not be autoDispose. RadioController takes it with
`ref.read`, which creates no subscription, so autoDispose tore it down and
left the controller holding a player whose `ref` was unmounted — every
station tap became a silent no-op.
- CI pins Flutter 3.47.2. Older toolchains cannot analyze this code.
Host checks: analyzer clean, 1,462 tests passing, debug APK builds, no broken
documentation links. Physical head-unit acceptance (fresh install → speech →
vehicle execution) has not been completed; docs/offline-first/final-verification.md
records what is and is not proven.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AjhsQbfGjJw2V8j2WmRXpN0 parents commit 1a6ef28
1,195 files changed
Lines changed: 194360 additions & 0 deletions
File tree
- .githooks
- .github
- ISSUE_TEMPLATE
- actions
- build-flutter-apk
- setup-flutter
- workflows
- android
- app
- src
- debug
- kotlin/com/i99dev/ilink/clusterpatch
- res/xml
- main
- assets/offline
- units
- voice
- cpp
- java/com/i99dev/ilink/helper
- kotlin/com/i99dev/ilink
- adb
- boot
- bubble
- car
- profiles
- definitions
- clusterpatch
- connectivity
- content
- cursor
- daemon
- device
- display
- input
- launcher
- location
- miniapps
- minishortcut
- network
- ota
- pkg
- security
- shortcut
- tools
- tv
- voice
- ondevice
- resources/cluster_patch
- res
- drawable-hdpi
- drawable-mdpi
- drawable-v21
- drawable-xhdpi
- drawable-xxhdpi
- drawable-xxxhdpi
- drawable
- layout
- mipmap-anydpi-v26
- mipmap-hdpi
- mipmap-mdpi
- mipmap-xhdpi
- mipmap-xxhdpi
- mipmap-xxxhdpi
- values-night
- values
- xml
- profile
- test
- java/com/i99dev/ilink/security
- kotlin/com/i99dev/ilink
- car/profiles
- clusterpatch
- connectivity
- display
- input
- pkg
- security
- voice
- ondevice
- resources/clusterpatch
- byd-stub
- src/main/java/android
- content
- hardware
- bydauto
- gradle/wrapper
- assets
- branding
- byd
- fonts
- Cairo
- Inter
- offline/mini_apps
- radio
- config
- docs
- app
- offline-first
- screenshots
- sdk
- workflow
- ios
- Flutter
- Runner.xcodeproj
- project.xcworkspace
- Runner.xcworkspace
- RunnerTests
- Runner
- Assets.xcassets
- AppIcon.appiconset
- LaunchImage.imageset
- Base.lproj
- lib
- app
- access
- gate
- lifecycle
- update
- ui
- features
- _car_domain
- command
- consumer
- domain
- router
- safety
- state
- support
- ui
- admin_mini_apps
- data
- db
- domain
- state
- app_actions
- data
- domain
- presentation
- widgets
- registry
- state
- apps
- assistant
- presentation/widgets
- state
- cluster_patch
- cluster_touchpad
- presentation
- state
- compat
- data
- presentation
- dashboard
- application
- presentation
- pages
- home
- presentation/widgets
- state
- mini_apps
- bridge
- data
- domain
- lifecycle
- packaging
- presentation
- widgets
- runtime
- state
- native_apps
- data
- domain
- presentation
- state
- onboarding
- data
- domain
- presentation
- widgets
- state
- profile
- presentation
- widgets
- state
- radio
- data
- domain
- presentation
- widgets
- state
- settings
- presentation
- pages
- widgets
- diagnostics
- gate_probe
- sections
- registry
- state
- shell
- presentation
- screens
- widgets
- state
- shortcuts
- presentation
- state
- splash/presentation
- themes
- data
- domain
- presentation/widgets
- state
- tools
- data
- domain
- presentation
- sheets
- widgets
- registry
- state
- tv
- data
- domain
- presentation
- widgets
- state
- voice
- data
- domain
- ondevice
- presentation
- widgets
- state
- workflow
- bridge
- data
- domain
- engine
- presentation
- kernel
- access
- domain
- api
- audio
- config
- i18n
- generated
- lifecycle
- logging
- observability
- playlists
- registry
- services
- settings
- shell
- sim
- storage
- ui
- responsive
- theme
- update
- data
- models
- platform
- deep_link
- device
- launcher
- location
- network
- observability
- sdk
- _internal
- brands/byd
- dilink
- identity
- car
- _transport
- identity
- proto
- scripts
- ci
- test
- app
- gate
- session
- update
- architecture
- core
- car
- commands
- safety
- state
- support
- config
- device
- launcher
- observability
- settings
- shell
- update
- voice
- e2e
- features
- _car_domain
- command
- router
- state
- admin_mini_apps
- db
- domain
- app_actions
- apps
- assistant
- cluster_touchpad
- compat
- dashboard
- home
- mini_apps
- boot
- bridge
- cursor
- display
- gesture
- pkg
- presentation
- runtime
- state
- surface
- native_apps
- onboarding
- radio
- settings
- shell
- themes
- tools
- tv
- voice
- ondevice
- workflow
- kernel
- playlists
- services
- sim
- ui/theme
- update
- licenses
- platform/network
- sdk
- brands/byd
- dilink
- car
- identity
- support
- tool
- tool
- web
- icons
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
0 commit comments