Skip to content

feat: bootstrap runtime material 3 theme#57

Merged
XaaT merged 2 commits intomainfrom
pr-49-m3-runtime
Apr 23, 2026
Merged

feat: bootstrap runtime material 3 theme#57
XaaT merged 2 commits intomainfrom
pr-49-m3-runtime

Conversation

@XaaT
Copy link
Copy Markdown
Contributor

@XaaT XaaT commented Apr 20, 2026

Action par GPT-5 Codex (demandée par @XaaT)

Closes #49

Summary

  • bootstrappe RedfaceTheme comme point d'entrée unique dans :core:ui
  • ajoute les ColorScheme clair / sombre / AMOLED dérivés de la seed HFR #A62C2C
  • ajoute Typography et Shapes M3 dans :core:ui/theme
  • fait consommer le thème partagé par les placeholders existants

Notes

  • scope volontairement limité au runtime theme : pas de dynamic color, pas de composants métier, pas de thème HFR classique
  • les choix suivent le draft drafts/material3-ui-ux.md sur les décisions actées (Phase 0 — Design system Material 3 #9) : seed #A62C2C, Roboto système, thèmes v1 clair/sombre/AMOLED
  • la structure suit la doc officielle M3 (MaterialTheme(colorScheme, typography, shapes)) vérifiée via Android Developers + Context7

Validation run

  • docker run --rm --security-opt label=disable -v /work/xaat/redface2:/workspace -w /workspace ghcr.io/cirruslabs/android-sdk:36@sha256:f9b3ea9ed2b5fc9522adae82c7b4622ab7aa54207ef532c8e615a347dca08f31 ./gradlew :app:assembleDebug
  • docker run --rm --security-opt label=disable -v /work/xaat/redface2:/workspace -w /workspace ghcr.io/cirruslabs/android-sdk:36@sha256:f9b3ea9ed2b5fc9522adae82c7b4622ab7aa54207ef532c8e615a347dca08f31 ./gradlew detektAll lintDebug testDebugUnitTest :app:assembleDebug

Sources

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
@XaaT
Copy link
Copy Markdown
Contributor Author

XaaT commented Apr 22, 2026

Action par Claude Opus 4.7 (1M context) (demandée par @XaaT)

Peer review — 2 findings avant merge

[Haute] dynamicColor: Boolean = false manquant dans la signature de RedfaceTheme

core/ui/src/main/java/fr/forumhfr/redface2/core/ui/RedfaceTheme.kt

La spec docs/specs/stack.md acte dynamic color OFF par défaut, opt-in Phase 5. Sans ce paramètre dès Phase 0, son ajout ultérieur casse l'API (breaking change de signature). Préférable de le poser maintenant même si inexploité.

Fix :

@Composable
fun RedfaceTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    amoled: Boolean = false,
    dynamicColor: Boolean = false,
    content: @Composable () -> Unit,
) {
    val colorScheme = when {
        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
            val ctx = LocalContext.current
            if (darkTheme) dynamicDarkColorScheme(ctx) else dynamicLightColorScheme(ctx)
        }
        amoled -> AmoledColorScheme
        darkTheme -> DarkColorScheme
        else -> LightColorScheme
    }
    MaterialTheme(colorScheme = colorScheme, typography = RedfaceTypography, shapes = RedfaceShapes, content = content)
}

[Moyenne] Insets edge-to-edge incomplets dans RedfacePlaceholderScreen

core/ui/src/main/java/fr/forumhfr/redface2/core/ui/RedfacePlaceholderScreen.kt

Seul .statusBarsPadding() est présent. Avec enableEdgeToEdge() obligatoire Android 15+, le bas du contenu passera sous la navigation bar / gesture bar.

Fix (au choix) :

  • Wrapper le contenu dans un Scaffold qui applique les insets systématiquement
  • Ajouter .navigationBarsPadding() ou utiliser Modifier.windowInsetsPadding(WindowInsets.safeDrawing)

Bonus (non bloquant)

Aucun test sur :core:ui dans cette PR. Acceptable en Phase 0 bootstrap selon la méthodologie (pas de TDD sur l'UI Compose), mais à tracker pour la Phase 1 (Roborazzi screenshot tests 4 variants).


Sinon : seed color #A62C2C fidèle à la décision, Typography 15 styles M3 exacts, règle Konsist material tokens stay confined to core ui respectée. Bonne base.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
@XaaT
Copy link
Copy Markdown
Contributor Author

XaaT commented Apr 22, 2026

Action par Claude Opus 4.7 (demandée par @XaaT)

Fixes appliqués (commit 6d74477) :

  • RedfaceTheme.kt : dynamicColor: Boolean = false avec garde SDK
  • RedfacePlaceholderScreen.kt : .navigationBarsPadding() ajouté

Status : CI ✅, en attente de review humaine.

Note workflow : en parallèle, tout a été consolidé sur la branche internal (HEAD d4d53cd) pour continuer le dev et builder l'AAB de test — elle contient PR#57 HEAD + PR#58 HEAD + fix NoActionBar/statusBarsPadding + PR#62. Cette PR reste la voie canonique vers main une fois la review passée.

@XaaT XaaT merged commit f68a1ac into main Apr 23, 2026
1 check passed
XaaT added a commit that referenced this pull request Apr 24, 2026
Consolidation Phase 0+ → main.

Contient :
- runtime Material 3 et Hilt (fondations déjà mergées séparément via #57/#58)
- parser topic-first basé sur fixtures HFR réelles (khakha cat=13 post=84540)
- écran topic embarqué sur fixtures, rendu HTML Compose minimal
- fix insets / status bar pour l'APK de test
- icône placeholder (drapeau HFR, fond blanc)
- `.gitignore` pour les dossiers `*_files` générés par les sauvegardes navigateur

Dette architecturale tracée #65 (ViewModel manquant, fixtures dans `:core:domain`, Jsoup dans `:feature:topic`, assets dupliqués). Résorption avant reproduction du pattern, per ADR-011.

Refs #15, #3, #49, #50. Supersedes #61, #62, #64, #69.

Co-Authored-By: GPT-5 Codex <noreply@openai.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@XaaT XaaT deleted the pr-49-m3-runtime branch April 24, 2026 19:11
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.

Phase 0 — Runtime Material 3 bootstrap (:core:ui)

1 participant