|
|
@@ -11,13 +11,18 @@ compatibility:
|
|
|
- One home page. No top bar, no bottom dock, no pages.
|
|
|
- Clock/date, battery/charging and Wi-Fi on the page.
|
|
|
- A prominent media-volume card (ring, slider, −/+, mute).
|
|
|
-- Five shortcuts: Navigation, Music, Radio, Settings, All apps.
|
|
|
-- Navigation/Music/Radio are **app slots**. They can be assigned, changed and
|
|
|
- cleared. Dashboard icons stay generic.
|
|
|
+- Up to **16 home buttons**: Navigation, Music, Radio, Settings, All apps, plus
|
|
|
+ apps pinned from All Apps.
|
|
|
+- Navigation/Music/Radio are **app slots** with show/hide switches. They can be
|
|
|
+ assigned, changed and cleared. Settings and All apps are always present.
|
|
|
+- Pinned apps are added by long-pressing an app in All Apps and removed by
|
|
|
+ long-pressing the added button on Home. Dashboard icons stay generic.
|
|
|
+- The grid adapts from 2 to 6 columns and shrinks its tiles as the count grows.
|
|
|
- Every external app opens full-screen through a normal Android `Intent`.
|
|
|
-- Settings: light/dark/automatic theme, fixed night window, slot assignment,
|
|
|
- HOME-role setup, four-digit PIN.
|
|
|
+- Settings: light/dark/automatic theme, fixed night window, home-button switches,
|
|
|
+ slot assignment, HOME-role setup, four-digit PIN.
|
|
|
- PIN is requested **only on a cold start**, never on resume or screen-off.
|
|
|
+- The screen stays awake while CarDash is the foreground window.
|
|
|
- Landscape-only; tablet-first 1280×800; Android 10 minimum.
|
|
|
- Package: `com.wasp.cardash_launcher`. Display name: **CarDash**.
|
|
|
|
|
|
@@ -27,9 +32,12 @@ compatibility:
|
|
|
|---|---|---|
|
|
|
| Central app content | Launcher-native; apps open full-screen | Android cannot embed another app; overlay chrome was rejected as fragile and app-obstructing. |
|
|
|
| UI chrome | None (no bars) | Removes the mismatch between launcher chrome and full-screen apps; cleaner, more compatible. |
|
|
|
-| Home layout | Single page, info + volume + five shortcuts | Matches the refined brief: one configurable home screen. |
|
|
|
-| App slots | Navigation, Music, Radio | Kept from the original brief; Settings and All apps are fixed. |
|
|
|
-| Icons | Generic for dashboard; real icons in pickers/All Apps | Keeps the car interface consistent while making app identification possible. |
|
|
|
+| Home layout | Single page, info + volume + up to 16 buttons | Matches the refined brief; tiles scale from 2 to 6 columns. |
|
|
|
+| App slots | Navigation, Music, Radio with visibility switches | Kept from the original brief; Settings and All apps are fixed. |
|
|
|
+| Pinned apps | All Apps long-press adds, Home long-press removes | Makes any installed app reachable from Home without editing a separate layout screen. |
|
|
|
+| Home cap | 16 buttons total, including Settings and All apps | Keeps the single page legible at tablet resolutions; enforced in `LauncherController`. |
|
|
|
+| Icons | Generic for all Home buttons; real icons in pickers/All Apps | Keeps the car interface consistent; names identify pinned apps. |
|
|
|
+| Screen | `FLAG_KEEP_SCREEN_ON` while foreground | The dashboard is the car display; no wake-lock permission needed. |
|
|
|
| Theme | Light / Dark / Automatic with fixed 19:00–07:00 window | No location permission or network; time pickers make the window adjustable. |
|
|
|
| PIN | Four digits, salted PBKDF2 hash, cold start only | Matches the explicit instruction; no re-lock while running. |
|
|
|
| Min Android | API 29 (Android 10) | Requested minimum; no in-scope API requires newer. |
|
|
|
@@ -45,18 +53,20 @@ compatibility:
|
|
|
Flutter
|
|
|
HomeScreen
|
|
|
ClockBlock / StatusCluster / VolumeCard / ShortcutGrid
|
|
|
- LauncherController -> apps, slots, default-home state
|
|
|
+ LauncherController -> apps, slots, pinned apps, 16-button cap, default-home state
|
|
|
SystemController -> battery/Wi-Fi/volume polling
|
|
|
AllAppsScreen / AppPickerSheet
|
|
|
SettingsScreen -> General / Security
|
|
|
PinSetupScreen / LockScreen -> LockController -> PinService
|
|
|
Android (Kotlin)
|
|
|
- MainActivity -> LauncherBridge (apps, launch, role)
|
|
|
- -> SystemBridge (battery, Wi-Fi, volume)
|
|
|
+ MainActivity -> keep-screen-on, volume keys
|
|
|
+ -> LauncherBridge (apps, launch, role)
|
|
|
+ -> SystemBridge (battery, Wi-Fi, volume)
|
|
|
```
|
|
|
|
|
|
-- `SettingsRepository` is the only persistence path for theme, night window and
|
|
|
- slots. `flutter_secure_storage` holds the salted PIN hash.
|
|
|
+- `SettingsRepository` is the only persistence path for theme, night window,
|
|
|
+ slot visibility/assignments and pinned apps. `flutter_secure_storage` holds
|
|
|
+ the salted PIN hash.
|
|
|
- Package enumeration and icon rendering happen on a worker thread in Kotlin and
|
|
|
are returned as PNG bytes.
|
|
|
- Timers for volume/status are stopped when the app leaves the foreground.
|
|
|
@@ -76,11 +86,12 @@ Android (Kotlin)
|
|
|
| M5 | Settings, theme auto window, PIN setup/change/remove, cold-start lock | Done |
|
|
|
| M6 | Interaction testing, light/dark screenshots, layout polish, API 29 verification | Done |
|
|
|
| M7 | Release build, final docs, screenshots, last commits | Done |
|
|
|
+| M8 | Home-button visibility switches, All Apps pinning, 16-button adaptive grid, keep-awake | Done |
|
|
|
|
|
|
## 5. Verification checklist
|
|
|
|
|
|
- [x] `flutter analyze` clean.
|
|
|
-- [x] Unit/widget tests pass (PIN, repository, theme, shortcut tile).
|
|
|
+- [x] Unit/widget tests pass (17 tests: PIN, repository, theme, slot visibility, pinned apps, cap, dense grid).
|
|
|
- [x] Debug APK builds with JDK 21.
|
|
|
- [x] Installs on API 35 1280×800 tablet.
|
|
|
- [x] HOME role granted; Home opens CarDash.
|
|
|
@@ -94,6 +105,12 @@ Android (Kotlin)
|
|
|
- [x] Verify 1024×600 compact layout (`adb shell wm size 1024x600`).
|
|
|
- [x] Boot and verify on Android 10 (API 29) AVD, including PIN and release APK.
|
|
|
- [x] Release APK on both AVDs (54 MB universal APK).
|
|
|
+- [x] Navigation/Music/Radio switches hide/show buttons, persist, and preserve assignments.
|
|
|
+- [x] All Apps long-press pins apps; the 16-button cap rejects a 17th button.
|
|
|
+- [x] Long-press on an added app removes it; it can be re-added from All Apps.
|
|
|
+- [x] 16 buttons fit at 1280×800 and 1024×600; the grid uses 2–6 columns.
|
|
|
+- [x] `FLAG_KEEP_SCREEN_ON` is present on the dashboard window.
|
|
|
+- [x] Release 0.2.0 installed on a physical Android 17 HyperOS tablet.
|
|
|
- [x] Screenshots in `docs/screenshots/`; README/AGENTS/plan updated.
|
|
|
|
|
|
## 6. Known risks and mitigations
|
|
|
@@ -105,12 +122,16 @@ Android (Kotlin)
|
|
|
and acceptable for sideloading; a Play distribution needs policy work.
|
|
|
3. **PIN security scope**: cold-start only by design; it does not replace the
|
|
|
Android keyguard or protect against adb/data extraction. README explains it.
|
|
|
-4. **Emulator stability**: software-rendered headless emulator can be killed by
|
|
|
- the host; scripts use managed background boot and `swiftshader_indirect`.
|
|
|
+4. **Emulator stability**: headless emulators can be killed by the host; scripts
|
|
|
+ use managed boot and the host GPU. SwiftShader is only a fallback.
|
|
|
5. **Flutter 3.47 / AGP 9.1 / JDK 21**: works on this machine; Java 27 is not the
|
|
|
validated toolchain. The emulator uses the host GPU; SwiftShader segfaulted
|
|
|
on the API 35 image, so the helper script defaults to `-gpu host`.
|
|
|
-6. **Uninstall/reinstall** may drop the HOME role; Settings and the installer
|
|
|
+6. **16-button density**: generic icons plus small labels are the trade-off for
|
|
|
+ a single page. The Settings count and grid scaling make the limit explicit.
|
|
|
+7. **Screen-on battery use**: the flag applies only while the dashboard is
|
|
|
+ foreground; it is not a background wake lock.
|
|
|
+8. **Uninstall/reinstall** may drop the HOME role; Settings and the installer
|
|
|
script can restore it.
|
|
|
|
|
|
## 7. Out of scope (for now)
|
|
|
@@ -130,3 +151,7 @@ Android (Kotlin)
|
|
|
on the API 35 AVD; then verified the release build and PIN flows on the API 29
|
|
|
AVD. Added hardware volume-key routing and PIN verification progress.
|
|
|
Screenshots captured at 1280×800 and 1024×600.
|
|
|
+- 2026-10-29: Added home-button visibility switches, All Apps long-press pinning,
|
|
|
+ a 16-button cap with an adaptive 2–6 column grid, pinned-app removal, and a
|
|
|
+ foreground keep-screen-on flag. Verified 17 tests, 16-button layouts at
|
|
|
+ 1280×800 and 1024×600, cap/removal/re-add, and 0.2.0 on the physical tablet.
|