Skip to content

feat: add appearance data layer and theme wiring (accent, font, size)#64

Open
LeGeRyChEeSe wants to merge 1 commit into
mainfrom
feat/appearance-data-and-theme
Open

feat: add appearance data layer and theme wiring (accent, font, size)#64
LeGeRyChEeSe wants to merge 1 commit into
mainfrom
feat/appearance-data-and-theme

Conversation

@LeGeRyChEeSe

Copy link
Copy Markdown
Owner

Objectif

Première tranche de la feature phare de personnalisation (docs/sonnet5-specs/02-feature-appearance-customization.md), PR 1/5 du découpage proposé : feat/appearance-data-and-theme. Pose la couche données + thème ; aucun écran de réglages n'est ajouté dans cette PR, donc le comportement visible est inchangé (les valeurs par défaut reproduisent exactement le look actuel).

Changements

  • ui/theme/AppearanceModels.kt : AppearanceSettings + enums (ThemeMode, AppFont, BackgroundStyle, Density, CardCorner, CatalogLayout) et presets d'accent. AppFont n'expose que SYSTEM/SERIF/MONO pour l'instant — ROUNDED/CONDENSED nécessitent des polices .ttf sous licence à bundler, non ajoutées ici (reporté à un suivi dédié).
  • data/AppearancePreferences.kt : persistance DataStore, même pattern que ConsentPreferences. Chaque lecture est défensive (valeur d'enum corrompue/inconnue et fontScale hors bornes retombent sur le défaut au lieu de planter).
  • ui/theme/AppearanceColorSchemes.kt / AppearanceTypography.kt : fonctions pures construisant un ColorScheme/Typography Material3 à partir de AppearanceSettings.
  • ui/theme/Theme.kt : VRHubTheme prend maintenant un paramètre AppearanceSettings (avec valeur par défaut, donc les @Preview existants compilent toujours) et expose LocalAppearance pour les réglages hors ColorScheme/Typography (câblés à densité/rayon de carte/vue catalogue dans une PR ultérieure).
  • ui/AppearanceViewModel.kt : expose les settings en StateFlow + update/reset.
  • MainActivity.kt : collecte les settings et les passe à VRHubTheme.

Seuls l'accent, la police et l'échelle de texte sont câblés de bout en bout dans cette PR ; density/cardCorner/catalogLayout existent dans le modèle persisté (pour la stabilité du schéma DataStore) mais ne sont consommés par aucune UI pour l'instant (PR 3 du découpage).

Captures

Aucune différence visuelle attendue par défaut. Capture du smoke-test après installation : écran de configuration identique à la baseline documentée dans 00-environment-and-workflow.md (couleurs, disposition inchangées).

Tests

  • JVM/Robolectric : AppearancePreferencesTest (round-trip de chaque champ, fontScale borné à l'écriture, reset() efface tout, valeur d'enum corrompue → défaut, défauts == AppearanceSettings()).
  • JVM : AppearanceColorSchemesTest (défauts == ancien VrpColorScheme exact, accent → secondary, themeMode/systemDark → dark vs light, ACCENT_TINTED produit un fond distinct), AppearanceTypographyTest (famille appliquée à tous les styles, échelle multiplie bien les tailles, 1.0×/Default reproduit les tailles de base).
  • scripts\gradlew.bat :app:assembleDevDebug et :app:testDevDebugUnitTest → succès.
  • Smoke-test émulateur (Pixel_7, com.vrhub.debug) : lancement à froid sans crash, logcat propre, capture d'écran conforme à la baseline.

Réf : docs/sonnet5-specs/02-feature-appearance-customization.md §2, §8 (PR 1/5)

First slice of the appearance-customization feature (docs/sonnet5-specs/02).
Lays the data + theme groundwork; no settings screen yet, so behavior
is unchanged (defaults reproduce the original hardcoded look exactly).

- AppearanceModels.kt: AppearanceSettings + enums (ThemeMode, AppFont,
  BackgroundStyle, Density, CardCorner, CatalogLayout) and accent presets.
  AppFont ships SYSTEM/SERIF/MONO only for now - ROUNDED/CONDENSED need
  bundled, licensed .ttf assets this change does not add; deferred to a
  follow-up.
- AppearancePreferences.kt: DataStore-backed persistence, following the
  ConsentPreferences pattern. Every read is defensive (corrupted/unknown
  enum values and out-of-range fontScale fall back to defaults instead
  of crashing).
- AppearanceColorSchemes.kt / AppearanceTypography.kt: pure functions
  building a Material3 ColorScheme/Typography from AppearanceSettings.
- Theme.kt: VRHubTheme now takes an AppearanceSettings param (defaulted,
  so existing @Preview call sites keep compiling) and exposes
  LocalAppearance for the handful of settings outside ColorScheme/
  Typography (wired to card corner/density/catalog layout in a later PR).
- AppearanceViewModel.kt: exposes settings as StateFlow + update/reset.
- MainActivity.kt: collects settings and passes them to VRHubTheme.

Only accent, font family and font scale are wired end-to-end in this
PR; density/cardCorner/catalogLayout exist in the persisted model for
schema stability but aren't consumed by any UI yet (PR3 of the feature
breakdown).
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown

Test Results

0 tests   0 ✅  0s ⏱️
0 suites  0 💤
0 files    0 ❌

Results for commit 43caa9c.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown

PR Validation Summary ✅

Status: All checks passed!
Core Duration: 3m 53s ✅ (Target < 5m)

Check Status Details
Lint ✅ Pass N/A Errors, N/A Warnings
Unit Tests ✅ Pass JUnit Reports
Build ✅ Pass assembleDevDebug

Reports and artifacts (including Lint HTML) are available in the Artifacts Tab of the Action Run Summary

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant