feat(android): Splash Screen API plumbing (Android 12+)#114
Merged
Conversation
Adds the AndroidX core-splashscreen compat library, a brand-coloured splash theme with a placeholder vector icon, manifest wiring for the launcher activity, and the installSplashScreen() call in MainActivity.onCreate (before super.onCreate, so the platform swaps the theme to Theme.PyrycodeMobile before the activity window is realised). Plumbing only — no animation, no exit-listener tweaks, no setKeepOnScreenCondition gating. #13's conditional NavHost start destination already prevents the cold-launch Welcome→ChannelList flash, so splash dismisses on first frame. Branded mark, exit animation, and final viewport math are explicit follow-ups under Phase 5 polish. Closes #80 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Contributor
Author
Code Review: #80Decision: PASS FindingsNone blocking. The diff is a faithful, minimal execution of the plumbing-only spec. Verified against
SummarySmall, surgical plumbing change. Every line is anchored to the spec; nothing extraneous. The conscious omissions (no |
Adds per-ticket notes plus a new Splash screen feature doc covering the core-splashscreen wiring (theme, manifest, install call, placeholder drawable). Indexes the feature doc in INDEX.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Plumbing-only Splash Screen API integration. Cold launch now shows a brand-coloured splash window with a centred placeholder mark, then dismisses on the first Compose frame and hands off to the existing conditional NavHost start destination from #13.
Changes:
androidx.core:core-splashscreen:1.0.1via the version catalog.app/src/main/res/drawable/ic_splash_logo.xml— 288dp viewport, single white-fill circle (radius 64dp at 144,144) sized to fit inside the platform's 192dp inner mask.Theme.PyrycodeMobile.SplashScreenstyle inthemes.xml(parentTheme.SplashScreenfrom the compat lib), pointing background at the existing@color/ic_launcher_background(#FF32628D, the documented brand color) andpostSplashScreenThemeat the existingTheme.PyrycodeMobile.<activity>theme switched to the splash theme inAndroidManifest.xml; application-levelandroid:themeleft atTheme.PyrycodeMobileso non-launcher activities still inherit the normal theme.installSplashScreen()called as the first statement inMainActivity.onCreate, beforesuper.onCreate(...)(per the AndroidX docs — invoking aftersuper.onCreatecauses a visible splash-leak frame on some OEMs).No animation, no
setKeepOnScreenCondition { ... }, no exit-listener tweaks, nowindowSplashScreenAnimationDuration— all explicitly Out of Scope; reserved for the branded-splash follow-up under Phase 5 polish.Issue
Closes #80
Testing
./gradlew assembleDebug→ green, no new warnings (one pre-existing deprecation inDiscussionListScreen.ktforrememberSwipeToDismissBoxState, unrelated)../gradlew lint→ green, no new warnings../gradlew test→ green../gradlew connectedAndroidTest→ not run; no emulator/device wired up in the dev agent environment.Pre-existing CI gate (not in this PR's scope)
./gradlew checkis currently failing onmain(CI runs25845275106onward) due to a Spotless violation inapp/src/main/java/de/pyryco/mobile/ui/settings/ThemePickerDialog.kt:47-52, introduced by commitdb9f2460in #87. The file is untouched by this PR; per the scope-discipline rule, the violation is filed as a separate bug ticket — #113 — and not fixed here.assembleDebugandlint(the AC#3 gates) pass cleanly; once #113 lands,checkwill go green again.Architecture compliance
Mirrors the architect's spec exactly (
docs/specs/architecture/80-splash-screen-api-plumbing.md):androidx-core-ktx, version pinned in[versions].ic_pyry_logo.xml(which has a 104dp viewport and would need translation math).windowSplashScreenBackground,windowSplashScreenAnimatedIcon,postSplashScreenTheme) — no animation-duration or icon-background hooks that the branded follow-up would need to undo.installSplashScreen()placement: first statement, beforesuper.onCreate(...).@color/ic_launcher_background— no parallel color name introduced.🤖 Generated with Claude Code