Ver código fonte

docs: clarify the stylized icon policy

Krasimir Kazakov 1 semana atrás
pai
commit
4383649306

+ 1 - 1
AGENTS.md

@@ -63,7 +63,7 @@ notifyListeners();
 
 
 - Use `context.colors` / `AppTheme` tokens, not hard-coded colors in widgets.
 - Use `context.colors` / `AppTheme` tokens, not hard-coded colors in widgets.
 - All UI copy is sentence case (except the CarDash name). Keep copy short and functional.
 - All UI copy is sentence case (except the CarDash name). Keep copy short and functional.
-- New home buttons: extend `SlotType` for fixed slots or use `LauncherController` pinned-app APIs; enforce the cap and use `pinned_app_actions.dart` for rename/icon/remove.
+- New home buttons: extend `SlotType` for fixed slots or use `LauncherController` pinned-app APIs; fixed slots stay stylized, pinned apps default to their own icon, and icon edits use `style_icon_choices.dart`.
 - New native methods: add them to `LauncherPlatform`, `NativeBridge`, the relevant Kotlin bridge, and the test fake if used.
 - New native methods: add them to `LauncherPlatform`, `NativeBridge`, the relevant Kotlin bridge, and the test fake if used.
 - Tests: fake `LauncherPlatform`/`SecureStore`; `SharedPreferences.setMockInitialValues({})`; widget tests wrap in `MaterialApp(theme: AppTheme.light())`. Test files live in `test/` and end with `_test.dart`.
 - Tests: fake `LauncherPlatform`/`SecureStore`; `SharedPreferences.setMockInitialValues({})`; widget tests wrap in `MaterialApp(theme: AppTheme.light())`. Test files live in `test/` and end with `_test.dart`.
 - Run `dart format lib test` before committing. Conventional Commits (`feat:`, `fix:`, `docs:`, `chore:`).
 - Run `dart format lib test` before committing. Conventional Commits (`feat:`, `fix:`, `docs:`, `chore:`).

+ 14 - 13
README.md

@@ -44,22 +44,22 @@ Also: [16-button home](docs/screenshots/home-16.png) ·
   dashboard and the keys always agree. This is the phone's media stream, not a
   dashboard and the keys always agree. This is the phone's media stream, not a
   private volume.
   private volume.
 - **Configurable home buttons** — switches in Settings show or hide Navigation,
 - **Configurable home buttons** — switches in Settings show or hide Navigation,
-  Music and Radio. Settings and All apps are always the last two buttons.
-  User-installed apps show their own icons on Home; system apps and unassigned
-  slots keep the generic category icon.
+  Music and Radio. Settings and All apps are always the last two buttons. The
+  fixed buttons and predefined slots always use the stylized line icons.
 - **Pin any app from All Apps** — long-press an app to add it to Home. The home
 - **Pin any app from All Apps** — long-press an app to add it to Home. The home
   page holds up to **16 buttons including Settings and All apps**, and the grid
   page holds up to **16 buttons including Settings and All apps**, and the grid
   shrinks as it fills.
   shrinks as it fills.
 - **Edit a pinned app** — long-press it on Home for Rename, Change icon and
 - **Edit a pinned app** — long-press it on Home for Rename, Change icon and
-  Remove. Rename changes only the Home label; Change icon offers the app icon
-  first, then up to 24 other installed app icons in the same rounded-square
-  shape; Remove takes effect without confirmation. Re-add the app from All Apps.
+  Remove. Pinned apps show their own icon by default. Rename changes only the
+  Home label; Change icon offers **Default** plus 29 monochrome line icons
+  (white on dark, black on light); Remove takes effect without confirmation.
+  Re-add the app from All Apps.
 - **One-time launcher tip** — the first run shows a short notification that the
 - **One-time launcher tip** — the first run shows a short notification that the
   default-launcher setting lives in Settings. It is not shown again.
   default-launcher setting lives in Settings. It is not shown again.
 - **All apps** — searchable grid of every launchable app, launched full-screen.
 - **All apps** — searchable grid of every launchable app, launched full-screen.
 - **Media-aware Music tile** — while media audio is active and the Music shortcut
 - **Media-aware Music tile** — while media audio is active and the Music shortcut
-  is assigned, the tile shows the selected app's icon with a small animated
-  equalizer. Android exposes media-active state, not the playing package, to a
+  is assigned, the stylized music icon shows a small animated equalizer. Android
+  exposes media-active state, not the playing package, to a
   normal launcher; see the limitation below.
   normal launcher; see the limitation below.
 - **Six accent colors** — Green, Blue, Amber, Rose, Violet or Teal, applied
 - **Six accent colors** — Green, Blue, Amber, Rose, Violet or Teal, applied
   across the whole interface.
   across the whole interface.
@@ -240,9 +240,10 @@ Android 15 AVD is left running headlessly after development; use
   requires a newer Android release.
   requires a newer Android release.
 - **Landscape only** (`sensorLandscape`). The home page is designed for
 - **Landscape only** (`sensorLandscape`). The home page is designed for
   1280×800 and remains usable at 1024×600.
   1280×800 and remains usable at 1024×600.
-- **16-button cap** includes Settings and All apps. Non-system apps use their
-  own icon on Home; system apps, unassigned slots and fixed buttons keep the
-  generic line icons.
+- **16-button cap** includes Settings and All apps. Only apps pinned from All
+  Apps show an original app icon by default; the predefined slot buttons,
+  Settings and All apps stay stylized. A pinned icon can be replaced with the
+  Default app icon or the 29 stylized choices.
 - **Media equalizer** reacts to system media activity, not a per-app media
 - **Media equalizer** reacts to system media activity, not a per-app media
   session. Android does not expose the playing package to a normal launcher
   session. Android does not expose the playing package to a normal launcher
   without notification access; adding that permission is deliberately out of
   without notification access; adding that permission is deliberately out of
@@ -255,8 +256,8 @@ Android 15 AVD is left running headlessly after development; use
   their own full-screen windows.
   their own full-screen windows.
 - **Renaming changes the Home label only.** Android does not allow a launcher to
 - **Renaming changes the Home label only.** Android does not allow a launcher to
   rename another app's installed label.
   rename another app's installed label.
-- **Custom icons** follow installed apps; if the chosen source app is removed,
-  the tile falls back to its own icon or the generic one.
+- **Custom icons** are bundled monochrome SVGs, so they follow the light/dark
+  theme. Default restores the pinned app's own icon.
 - **No global play/pause control.** Volume is on the home screen; playback
 - **No global play/pause control.** Volume is on the home screen; playback
   buttons live in the media app itself.
   buttons live in the media app itself.
 - **No weather, Bluetooth, calls or climate** in this version.
 - **No weather, Bluetooth, calls or climate** in this version.

+ 20 - 11
docs/IMPLEMENTATION_PLAN.md

@@ -17,14 +17,15 @@ compatibility:
   assigned, changed and cleared. Settings and All apps are always present.
   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
 - Pinned apps are added by long-pressing an app in All Apps and removed by
   long-pressing the added button on Home. Settings and All apps are always last.
   long-pressing the added button on Home. Settings and All apps are always last.
-  User-installed apps show their own icon; system/unassigned slots keep generic.
+  Only pinned apps show their own icon by default; the fixed buttons and
+  predefined slots stay stylized.
 - The grid adapts from 2 to 6 columns and shrinks its tiles as the count grows.
 - 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`.
 - Every external app opens full-screen through a normal Android `Intent`.
 - Settings: light/dark/automatic theme, six accent colors, battery visibility,
 - Settings: light/dark/automatic theme, six accent colors, battery visibility,
   fixed night window, home-button switches, slot assignment, HOME-role setup,
   fixed night window, home-button switches, slot assignment, HOME-role setup,
   four-digit PIN.
   four-digit PIN.
-- The Music tile shows the selected app icon with an animated equalizer while
-  media audio is active.
+- The stylized Music tile shows an animated equalizer while media audio is
+  active.
 - The long-press hint fades away two minutes after app start.
 - The long-press hint fades away two minutes after app start.
 - The Home-role banner is gone; a one-time first-run tip points to Settings.
 - The Home-role banner is gone; a one-time first-run tip points to Settings.
 - Long-pressing a pinned app opens Rename, Change icon and Remove. Rename/icon
 - Long-pressing a pinned app opens Rename, Change icon and Remove. Rename/icon
@@ -44,14 +45,14 @@ compatibility:
 | App slots | Navigation, Music, Radio with visibility switches | Kept from the original brief; Settings and All apps are fixed. |
 | 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. |
 | 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`. |
 | Home cap | 16 buttons total, including Settings and All apps | Keeps the single page legible at tablet resolutions; enforced in `LauncherController`. |
-| Icons | User-installed apps use their own icon; system/unassigned slots stay generic | Identification without losing the calm fixed-button language. |
+| Icons | Only pinned apps show their own icon by default; fixed slots stay stylized | Keeps the dashboard consistent while making added apps recognizable. |
 | Accent | Six curated choices, persisted in Settings | Changes the whole theme without a color picker or arbitrary contrast failures. |
 | Accent | Six curated choices, persisted in Settings | Changes the whole theme without a color picker or arbitrary contrast failures. |
 | Battery visibility | One switch hides level and charging bolt | One control for both indicators, as requested. |
 | Battery visibility | One switch hides level and charging bolt | One control for both indicators, as requested. |
-| Media feedback | Music tile shows the selected app icon + animated bars while media is active | Compact visual feedback without adding a media control surface. |
+| Media feedback | Stylized Music tile + animated bars while media is active | Compact visual feedback without adding a media control surface. |
 | Hint lifetime | Two minutes from process start, then fade out | Avoids permanent onboarding chrome; survives widget rebuilds via `AppClock`. |
 | Hint lifetime | Two minutes from process start, then fade out | Avoids permanent onboarding chrome; survives widget rebuilds via `AppClock`. |
 | Home role | Settings row only; one-time first-run tip | Removes permanent dashboard chrome while keeping discovery. |
 | Home role | Settings row only; one-time first-run tip | Removes permanent dashboard chrome while keeping discovery. |
 | Pinned editing | Long-press menu: Rename / Change icon / Remove | Keeps the home page clean; removal remains immediate. |
 | Pinned editing | Long-press menu: Rename / Change icon / Remove | Keeps the home page clean; removal remains immediate. |
-| Custom icon source | The app icon first, then up to 24 installed app icons | Gives a large, recognizable grid without inventing generic art. |
+| Custom icon source | Default app icon plus 29 bundled monochrome line icons | Matches the stylized dashboard and follows light/dark theme colors. |
 | Screen | `FLAG_KEEP_SCREEN_ON` while foreground | The dashboard is the car display; no wake-lock permission needed. |
 | 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. |
 | 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. |
 | PIN | Four digits, salted PBKDF2 hash, cold start only | Matches the explicit instruction; no re-lock while running. |
@@ -104,6 +105,7 @@ Android (Kotlin)
 | M8 | Home-button visibility switches, All Apps pinning, 16-button adaptive grid, keep-awake | Done |
 | M8 | Home-button visibility switches, All Apps pinning, 16-button adaptive grid, keep-awake | Done |
 | M9 | Accent colors, battery toggle, fading hint, user icons, Media equalizer, install rule | Done |
 | M9 | Accent colors, battery toggle, fading hint, user icons, Media equalizer, install rule | Done |
 | M10 | Remove Home-role banner, one-time first-run tip, pinned Rename/icon/remove menu | Done |
 | M10 | Remove Home-role banner, one-time first-run tip, pinned Rename/icon/remove menu | Done |
+| M11 | Restore stylized fixed icons; pinned apps show own icons by default; 29-icon selector | Done |
 
 
 ## 5. Verification checklist
 ## 5. Verification checklist
 
 
@@ -136,8 +138,10 @@ Android (Kotlin)
 - [x] All Apps search icon is visibly smaller.
 - [x] All Apps search icon is visibly smaller.
 - [x] No Home-role banner; the first-run tip appears once, then never again.
 - [x] No Home-role banner; the first-run tip appears once, then never again.
 - [x] Long-press pinned app shows Rename, Change icon and Remove.
 - [x] Long-press pinned app shows Rename, Change icon and Remove.
-- [x] Rename updates the Home label; Change icon persists an installed app icon; Remove is immediate.
-- [x] Release 0.4.0 installed on the emulator and physical Android 17 tablet.
+- [x] Rename updates the Home label; Change icon persists a stylized icon; Remove is immediate.
+- [x] Fixed buttons stay stylized; pinned apps show their own icons by default.
+- [x] Change icon offers Default plus 29 monochrome icons and applies the chosen icon.
+- [x] Release 0.5.0 installed on the emulator and physical Android 17 tablet.
 - [x] Screenshots in `docs/screenshots/`; README/AGENTS/plan updated.
 - [x] Screenshots in `docs/screenshots/`; README/AGENTS/plan updated.
 
 
 ## 6. Known risks and mitigations
 ## 6. Known risks and mitigations
@@ -154,15 +158,16 @@ Android (Kotlin)
 5. **Flutter 3.47 / AGP 9.1 / JDK 21**: works on this machine; Java 27 is not the
 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
    validated toolchain. The emulator uses the host GPU; SwiftShader segfaulted
    on the API 35 image, so the helper script defaults to `-gpu host`.
    on the API 35 image, so the helper script defaults to `-gpu host`.
-6. **16-button density**: small labels and generic system-app icons are the
+6. **16-button density**: small labels and mixed pinned-app icons are the
    trade-off for a single page. The Settings count and grid scaling make the
    trade-off for a single page. The Settings count and grid scaling make the
    limit explicit.
    limit explicit.
 7. **Screen-on battery use**: the flag applies only while the dashboard is
 7. **Screen-on battery use**: the flag applies only while the dashboard is
    foreground; it is not a background wake lock.
    foreground; it is not a background wake lock.
 8. **Media attribution**: the equalizer follows `AudioManager.isMusicActive`,
 8. **Media attribution**: the equalizer follows `AudioManager.isMusicActive`,
    not a specific package. Exact attribution would require notification access.
    not a specific package. Exact attribution would require notification access.
-9. **Pinned customizations**: Rename affects only the Home label; a custom icon
-   falls back to the app/generic icon if its source app is uninstalled.
+9. **Pinned customizations**: Rename affects only the Home label. Default
+   restores the app icon; a chosen stylized icon is a bundled asset and cannot
+   become unavailable.
 10. **Uninstall/reinstall** may drop the HOME role; Settings and the installer
 10. **Uninstall/reinstall** may drop the HOME role; Settings and the installer
     script can restore it.
     script can restore it.
 
 
@@ -196,3 +201,7 @@ Android (Kotlin)
   Replaced immediate removal with a pinned-app menu (Rename, Change icon,
   Replaced immediate removal with a pinned-app menu (Rename, Change icon,
   Remove), custom Home labels and up to 25 installed-app icon choices. Verified
   Remove), custom Home labels and up to 25 installed-app icon choices. Verified
   23 tests and the full menu flow at 1280×800; 0.4.0 installed on the tablet.
   23 tests and the full menu flow at 1280×800; 0.4.0 installed on the tablet.
+- 2026-10-29: Clarified icon policy: fixed/predefined buttons are always
+  stylized; only pinned apps show their own icon by default. The Change icon
+  grid now offers Default plus 29 bundled monochrome line icons. Verified
+  0.5.0 on the emulator and tablet.

BIN
docs/screenshots/home-16.png


BIN
docs/screenshots/home-app-icons.png


BIN
docs/screenshots/home-app-menu.png