feat(mobile): add measured cold-start home transitions - #3223
Merged
Merged
Conversation
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.
Summary
Authenticated cold process launches previously went straight to the mobile shell. Add a 2.4-second native transition on Android, iOS, and HarmonyOS: a small contour logo moves to the actual measured home-logo bounds, then the cover fades to reveal the page.
Keep the existing first-install reveal and signed-out welcome experience. Background resume, activity/root recreation, and later manual login do not replay the short transition. No per-version animation variant is introduced.
Type and Areas
Type: UI/UX, feature
Areas: Native mobile Android/Compose, iOS/SwiftUI, HarmonyOS/ArkUI, mobile design-system contracts
Motivation / Impact
The measured anchor follows native safe areas and home layout rather than a fixed target coordinate. The home stays mounted so remote restoration can continue underneath; the animation does not wait for remote network readiness. Missing anchors fall back to a centered fade. Reduced motion skips playback, and the covered shell is hidden from accessibility. Android cover/home sweep phases are synchronized for the handoff.
Verification
Completed in the implementation checkout before applying the changes cleanly onto current upstream/main:
./gradlew :app:assembleDebugpassed;./gradlew :app:compileDebugKotlinpassed again after the sweep synchronization change.hvigorw --mode module -p product=default -p module=entry@default assembleHap --no-daemonpassed; debug HAP installed on a connected phone.cold-start-home/cold-start-home-darkpreviews: compact phone screenshots checked for logo landing and home fade in both themes; normal EntryAbility restored afterward. The fixture uses the production transition and recent-home component without account or remote requests../Testing/run-pure-swift-tests.shpassed. Swift syntax parsing passed for the changed app/animation entry points. This does not compile SwiftUI; full Xcode is unavailable on the test machine.pnpm run mobile:ui:check,pnpm run harmony:architecture, andgit diff --checkpassed in the implementation checkout.On the PR worktree based on updated upstream/main, generated mobile contract consistency, HarmonyOS architecture, and diff whitespace checks pass. The full preview asset check cannot complete in this fresh worktree because the canonical design-token CSS build and workspace dependencies are absent.
Known limitations:
pnpm run mobile:architecturereports existing violations in unchanged shared-layer files: ClientBuildContractTest, AccountUiState, RemoteSidebarPresentation, and ConversationModels.Reviewer Notes
Existing installation-local reveal preferences and account/transport payloads are retained. New process eligibility and measured geometry are presentation state. The HarmonyOS preview launch commands are documented in its local AGENTS.md.
Checklist