Ubisam-MobileGit/tasks/045-sky-blue-redesign.md
choiminyeong f6ac20c8ed TASK-063: task records say what is actually open
No task waits on a Codex review; the redesign tasks are confirmed on the
product owner's Z Fold7; TASK-016's leftovers are on hold; no biometric
reauthentication.

Agent: main (opus)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 20:25:49 +09:00

109 lines
6.7 KiB
Markdown

# TASK-045: Sky blue + white redesign, UbiSam logo
Status: implemented; required checks pass; confirmed by the human product owner on their Z Fold7 (2026-09-29)
Owner: Claude
Reviewer: Codex
## Outcome
Revises `docs/product.md`'s "Visual identity, icon, and color palette" decision (originally closed
by TASK-039 with a "Gitea green" theme), at the human product owner's fresh, explicit request
("현재 UI/UX를 전체적으로 갈아엎고싶다... 하늘색과 하얀색으로 구성하고 싶어"). The app's Material 3
theme moves from that earlier green palette to a sky-blue + white one, and the UbiSam wordmark now
appears small in the top-left of the root (저장소 목록) screen, matching the reference logo image the
product owner shared.
## Scope
- Included: `ui/theme/Color.kt` and `Theme.kt` (full light/dark Material3 tonal palette rebuilt
around a sky-blue primary); a new shared `UBGiteaTopBar`/`UBGiteaLogo` composable; wiring the top
bar into `RepositoryListScreen` (the app's root/home screen); the launcher icon background color
updated to match the new primary.
- Excluded (deliberately): adding the logo or a visible top bar to the other six screens (settings,
notifications, work items, branch detail/files, history), and adding visible back-arrow buttons
anywhere. Those screens have no back-button UI today -- they rely entirely on the system back
gesture, with non-trivial existing logic around exactly when that gesture is intercepted (see
`BranchDetailScreen`'s tab/pager comments). Retrofitting a header with a back action into that
would mean threading current-tab-aware back callbacks through screens that don't expose that
today -- a real behavior change, not a color/branding pass, so it was left out of this task. Those
screens still get the new sky-blue theme automatically, since none of them hardcode colors outside
`MaterialTheme.colorScheme`.
- Excluded (pending an asset): the logo is currently a hand-drawn Compose recreation (`UBGiteaLogo`
in `ui/components/UBGiteaTopBar.kt`) -- grey "Ubi" + blue "Sam" text plus a small rounded badge
with a drawn signal/RSS mark -- reproducing the reference image's colors and layout without an
image asset. If the actual PNG/SVG is provided later, it should replace this with a real
`Image(painterResource(...))`.
## Design notes
- **Primary is a deep-enough sky blue for contrast, not the literal reference-image blue**, same
reasoning as the previous "Gitea green" theme: `SkyPrimaryLight` (`#0369A1`) is chosen so white
text/icons on it clear WCAG's 4.5:1 threshold, while lighter tones (`SkyPrimaryContainerLight`,
`InversePrimaryLight`) carry the brighter, more literal sky-blue feel.
- **Background is a near-white with a faint blue cast (`#F7FBFF`), not pure white**, so white
cards/surfaces still have visible separation from the page -- pure white-on-white would flatten
the whole UI.
- **The logo appears only on the root screen.** An app wordmark conventionally belongs on the
top-level/home screen; nested screens showing the same static logo would be redundant chrome that
doesn't help navigation, and (per Scope above) adding a context-aware header to those screens is a
separate, larger change than what was asked for here.
- **No new icon library dependency.** The app currently has zero Material Icons usage (an established
convention -- see the launcher icon's own comment about "no icon library"); the small signal/RSS
mark inside the logo badge is drawn with `Canvas`/`drawArc` rather than pulling in
`material-icons-core` for one glyph.
- **Launcher icon background recolored to match**, so the home-screen icon and in-app theme read as
the same deliberate color rather than drifting apart (this exact reasoning -- and this exact file --
already existed for the old green theme; this task only changes the fill value and comment).
## Acceptance criteria
- [x] App-wide Material3 light and dark color schemes use a sky-blue primary with a near-white
background, replacing the old green theme, with no other role (error, etc.) touched.
- [x] The 저장소 목록 (root) screen shows a small UbiSam wordmark top-left.
- [x] No behavior change to navigation, back handling, or any non-visual logic anywhere in the app.
- [x] Launcher icon background color matches the new theme's primary.
- [x] Build, unit tests, and lint pass.
- [ ] Live-confirmed on the human product owner's device -- blocked, see Known limitations.
## Required checks
```text
./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug
```
## Evidence
- `ui/theme/Color.kt`: full sky-blue light/dark palette (`SkyPrimary*`, `SlateSecondary*`,
`CyanTertiary*`, background/surface/outline/inverse roles), plus fixed `UbiSamLogoGray`/
`UbiSamLogoBlue` brand constants independent of light/dark mode.
- `ui/theme/Theme.kt`: `LightColorScheme`/`DarkColorScheme` rebuilt from the new values; structure
otherwise unchanged from the previous theme file.
- New `ui/components/UBGiteaTopBar.kt`: `UBGiteaTopBar` (a plain branding bar, not a Material3
`TopAppBar`, deliberately without a back button -- see Scope), `UBGiteaLogo`, and a private
`SignalMark` Canvas composable.
- `feature/repositories/RepositoryListScreen.kt`: `Scaffold`'s `topBar` now renders
`UBGiteaTopBar()`.
- `res/drawable/ic_launcher_background.xml`: fill color changed from `#3B6A1F` to `#0369A1`.
- `docs/product.md`: "Visual identity, icon, and color palette" and "Whether repositories must be
cached for offline browsing" (already shipped by TASK-044, previously left undocumented as
resolved) moved from Open to Product decisions.
- `./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug`:
BUILD SUCCESSFUL, all existing unit tests passing unmodified (no behavior touched), 0 lint errors.
## Known limitations
- **Not yet confirmed on the human product owner's physical device.** Wireless `adb` pairing failed
five consecutive times with `protocol fault (couldn't read status message)` across three freshly
issued pairing codes, on a PC that could otherwise ping the phone with 0% loss -- pointing at a
local firewall/security-software block on the TLS pairing handshake specifically, not an expired
code or a network-reachability problem. Diagnosis was paused at the product owner's direction
("일단 보류"); a USB cable connection was suggested as the way to bypass this and hasn't been tried
yet.
- The logo is a hand-drawn recreation, not the actual reference image file (see Scope).
- Six of the app's seven screens get the new color theme automatically but no logo/branded header --
intentional, see Scope.
## Review findings
None yet -- no Codex review pending (Codex retired, 2026-09-29).