Rebuilds the Material3 light/dark palette around a sky-blue primary, adds the UBGiteaTopBar wordmark to the repository list, and recolors the launcher icon background to match. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
6.7 KiB
6.7 KiB
TASK-045: Sky blue + white redesign, UbiSam logo
Status: implemented; all required checks pass; awaiting live device confirmation (wireless adb pairing is currently broken on the human product owner's PC -- see Known limitations) 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.ktandTheme.kt(full light/dark Material3 tonal palette rebuilt around a sky-blue primary); a new sharedUBGiteaTopBar/UBGiteaLogocomposable; wiring the top bar intoRepositoryListScreen(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 outsideMaterialTheme.colorScheme. - Excluded (pending an asset): the logo is currently a hand-drawn Compose recreation (
UBGiteaLogoinui/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 realImage(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/drawArcrather than pulling inmaterial-icons-corefor 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
- 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.
- The 저장소 목록 (root) screen shows a small UbiSam wordmark top-left.
- No behavior change to navigation, back handling, or any non-visual logic anywhere in the app.
- Launcher icon background color matches the new theme's primary.
- Build, unit tests, and lint pass.
- Live-confirmed on the human product owner's device -- blocked, see Known limitations.
Required checks
./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 fixedUbiSamLogoGray/UbiSamLogoBluebrand constants independent of light/dark mode.ui/theme/Theme.kt:LightColorScheme/DarkColorSchemerebuilt from the new values; structure otherwise unchanged from the previous theme file.- New
ui/components/UBGiteaTopBar.kt:UBGiteaTopBar(a plain branding bar, not a Material3TopAppBar, deliberately without a back button -- see Scope),UBGiteaLogo, and a privateSignalMarkCanvas composable. feature/repositories/RepositoryListScreen.kt:Scaffold'stopBarnow rendersUBGiteaTopBar().res/drawable/ic_launcher_background.xml: fill color changed from#3B6A1Fto#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
adbpairing failed five consecutive times withprotocol 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 -- pending Codex/human review.