# TASK-069: In-app motion Status: implemented; required checks pass; not yet seen on a device Owner: Claude Reviewer: human product owner ## Outcome The app moves where it used to jump, and what moves is the launcher icon's tea cup. 1. Cold start: the cup on the icon's blue, steaming, for about a second, then it fades. 2. Loading: lists show grey placeholder rows with a light passing over them; everything else shows the steaming cup in place of the stock spinner. 3. The favourite star springs when its state changes. 4. A screen with nothing to list shows the cup bobbing above its message. 5. Entering and leaving a screen slides it a short way in from the side it was opened towards. 6. Pull to refresh brings the cup down with the finger; the steam appears near the release point. 7. A file's diff arrives row by row the first time it is shown. 8. Added while this was in progress (product owner, 2026-10-12): switching bottom tabs slides the whole screen sideways, the old tab gliding out as the new one glides in, and the tab's icon springs. ## Scope - Included: Compose's own animation APIs only. No new dependency. - Excluded: videos made with Claude Motion; any change to what the screens load or show. ## Writable paths - `app/src/main/java/com/ubisam/ubgitea/ui/components/Motion.kt` - `app/src/main/java/com/ubisam/ubgitea/ui/components/Elements.kt` - `app/src/main/java/com/ubisam/ubgitea/ui/shell/AppShell.kt` - `app/src/main/java/com/ubisam/ubgitea/MainActivity.kt` - `app/src/main/java/com/ubisam/ubgitea/feature/home/HomeScreen.kt` - `app/src/main/java/com/ubisam/ubgitea/feature/repositories/RepositoryListScreen.kt` - `app/src/main/java/com/ubisam/ubgitea/feature/work/WorkScreen.kt` - `app/src/main/java/com/ubisam/ubgitea/feature/notifications/NotificationsScreen.kt` - `app/src/main/java/com/ubisam/ubgitea/feature/workitems/WorkItemsScreen.kt` - `app/src/main/java/com/ubisam/ubgitea/feature/history/HistoryScreen.kt` - `app/src/main/java/com/ubisam/ubgitea/feature/history/FileDiffScreen.kt` - `tasks/069-in-app-motion.md` - `docs/development-log.md` ## Acceptance criteria - [x] Each of the eight items above is in the code and the app builds. - [x] The splash covers the app without delaying it: sign-in, loading and the OAuth callback run underneath, and taps do not pass through the cover. - [x] Moving between code tabs, or between pages of one screen, does not replay the screen transition. - [x] Nothing animates off screen: the pull indicator composes only during a pull, and the diff rows animate once per file, not on scroll. - [x] A list's loading message is still what a screen reader says. - [ ] Seen on the product owner's device. ## Security and privacy No additional concerns. No network, storage or credential code is touched. ## Required checks ```text ./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug ``` ## Evidence See the development log entry for TASK-069. ## Review findings None yet.