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>
72 lines
2.9 KiB
Markdown
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.
|