Ubisam-MobileGit/tasks/069-in-app-motion.md
choiminyeong 11bb082f0f TASK-069: in-app motion built on the tea cup
Splash, cup loader, list skeleton, empty-screen cup, pull to refresh
indicator, star and tab icon spring, screen and tab transitions, and a
row by row diff intro. Compose animation APIs only.

Agent: main (opus)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:34:42 +09:00

72 lines
2.9 KiB
Markdown

# 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
screen in from the side that tab sits on, 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.