Ubisam-MobileGit/tasks/039-design-pass-app-icon-and-visual-polish.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

134 lines
9.0 KiB
Markdown

# TASK-039: Design pass — app icon, visibility badge, header truncation, PR-label Korean-ization
Status: implemented; all required checks pass; live-confirmed on the human product owner's device
Owner: Claude
Reviewer: Codex
## Outcome
The human product owner asked for an open-ended design review: "디자인 수정해줄래? 앱의 아이콘부터
해서 전체적으로 확인해보고 부족한 부분 고쳐줘" (fix the design — starting with the app icon, review
the whole app and fix what's lacking). This task covers the first batch of concrete gaps found and
fixed while screen-by-screen reviewing the app (repository list, references/branches, work items,
notifications, settings) in both light and dark mode:
- **App icon**: the app had no custom launcher icon at all — Android's bare default was showing on
the home screen and app switcher. Added a full adaptive icon (background + foreground + monochrome
layers) with an original hand-drawn git-branch glyph on the app's own established primary green.
- **Repository visibility label**: the 공개/비공개 (public/private) text on each repository-list row
had no explicit style (rendered oversized/inconsistent next to the other metadata lines) and took a
full-width line. Replaced with a small rounded badge, matching the compact-chip look Gitea's own web
UI uses for the same information.
- **References screen header truncation**: a repository with a long owner/name combination (a real
one already in the human product owner's own Gitea instance) wrapped the title to 3 lines, pushing
the branch/tag list far down the screen. Capped it to 2 lines with an ellipsis.
- **"Pull Request" → "PR"**: two string resources (the work-items tab label, the notifications subject
label) were the only English text left in an otherwise fully-Korean UI, and were also the widest
word in a `Row` that doesn't wrap gracefully — on the live notifications list this visibly broke
"Pull Request" across two lines next to the state label. The rest of the app had already settled on
"PR" as the Korean-context abbreviation (`workitems_permission_denied`, `workitems_pr_refs`, etc.);
matched that.
## Scope
- Included: `mipmap-anydpi-v26/ic_launcher.xml`/`ic_launcher_round.xml` + their three drawable layers;
`AndroidManifest.xml`'s `android:icon`/`android:roundIcon`; `RepositoryListScreen.kt`'s new
`VisibilityBadge` composable and the references-header title's `maxLines`/`overflow`;
`strings_workitems.xml`/`strings_notifications.xml`'s `Pull Request` → `PR` string values.
- Excluded: no icon library was introduced (this app has never depended on
`androidx.compose.material.icons` — see Design notes); no change to `WorkItemsScreen.kt` to surface
which repository/branch a work-items or code-browser screen belongs to (a real gap noticed while
reviewing, but it needs new state threaded through the ViewModel/use-case layer, not just a view
change — flagged for a follow-up task rather than folded into this visual-polish batch); no explicit
in-app back button anywhere (deliberate, pre-existing, app-wide pattern — this device's own 3-button
system navigation already provides a visible back affordance, so this wasn't treated as a gap).
## Design notes
- **Original glyph, not Gitea's logo**: the launcher icon is a hand-drawn trunk-and-branch motif (a
straight line, a curved line, three circular nodes) built from plain vector primitives — deliberately
not a reproduction of Gitea's own trademarked logo.
- **Same green as the in-app theme**: the icon background reuses `GreenPrimaryLight` (`#3B6A1F`,
`ui/theme/Color.kt`) exactly, so the home-screen icon and the in-app Material 3 theme read as one
deliberate color choice rather than two unrelated greens.
- **Adaptive icon only, no legacy PNG mipmaps**: `minSdk` is 28 (> 26), so only the
`mipmap-anydpi-v26` adaptive-icon XML wrappers are needed; there is no pre-Android-8 device this app
can run on that would need a flat PNG fallback.
- **`VisibilityBadge` reuses the existing chip pattern**: a `Surface` + `RoundedCornerShape(4.dp)` +
`labelSmall` text, the same construction already used for `FilterChip` elsewhere in this screen —
not a new UI primitive, just the same small-badge shape applied to a second piece of metadata.
- **"PR" was already this app's own convention, not a new one**: `strings_workitems.xml` already used
"PR" in half a dozen other strings (`workitems_pr_refs`, `workitems_permission_denied`, the
"PR/이슈" button label on the repository-detail header) — only the tab label and the notifications
subject label had been left as the English "Pull Request". This was a one-line fix per file, not a
design decision made fresh here.
## Acceptance criteria
- [x] The app has a custom launcher icon (visible on the home screen and in Recents), not Android's
bare default.
- [x] The icon renders correctly as both a round and non-round adaptive icon shape.
- [x] Repository visibility (공개/비공개) renders as a small styled badge, not an unstyled full-width
text line.
- [x] A repository with a long owner/name combination shows a 2-line-max, ellipsized title on the
references screen instead of pushing the branch list down with a 3-line wrap.
- [x] No user-facing English text remains next to otherwise-Korean labels in the work-items tabs or
the notifications list.
- [x] Dark mode reviewed for the repository list and references screens: badges, selected-branch
highlighting, and text all stay legible with no contrast regressions.
- [x] Build, unit tests, and lint pass.
- [x] Live-confirmed on the human product owner's device for every change above.
## Required checks
```text
./gradlew compileDebugKotlin testDebugUnitTest assembleDebug lintDebug
```
## Evidence
- `app/src/main/res/drawable/ic_launcher_background.xml`, `ic_launcher_foreground.xml`,
`ic_launcher_monochrome.xml`; `app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml`,
`ic_launcher_round.xml`; `AndroidManifest.xml`'s new `android:icon`/`android:roundIcon`.
- `feature/repositories/RepositoryListScreen.kt`: new private `VisibilityBadge` composable, used in
place of the old unstyled `Text` for `repositories_private`/`repositories_public`; the references
header's repository-name `Text` gained `maxLines = 2, overflow = TextOverflow.Ellipsis`.
- `res/values/strings_workitems.xml`: `workitems_tab_pull_requests` changed from `Pull Request` to
`PR`. `res/values/strings_notifications.xml`: `notifications_subject_pull_request` changed the same
way.
- `./gradlew compileDebugKotlin testDebugUnitTest assembleDebug lintDebug`: BUILD SUCCESSFUL, all
unit tests passing, 0 lint errors (run twice — once after the icon/badge/truncation changes, once
after the PR-label change).
- Live device: installed over wireless `adb` after each round.
- App icon: screenshot-confirmed rendering cleanly in the Recents/task-switcher view.
- `VisibilityBadge`: screenshot-confirmed on the repository list — compact rounded badges (gray for
비공개, green-tinted for 공개) replacing the old full-width text line.
- Header truncation: screenshot-confirmed on `RobotAutomationDevelopment-Dept/LGE-OC6-Inline-CylinderTypeWelder-PRI-REPO`
(a real, already-long-named repository) — title now wraps to exactly 2 lines with a trailing
ellipsis instead of 3, and the branch/tag list starts noticeably higher on screen.
- PR label: screenshot-confirmed on the notifications "전체" tab against real data (a repository
with an actual PR/issue history) — every row now reads "PR" inline with "이슈"/"열림"/"닫힘"/"병합됨"
on one line instead of wrapping "Pull" and "Request" onto two.
- Dark mode: forced via `adb shell cmd uimode night yes`, screenshot-reviewed the repository list,
references, code-browser file tree, commit history list, and the colorized per-file diff view,
restored to `night no` afterward — no contrast or legibility issues found anywhere reviewed.
- Also reviewed without code changes (already well-designed, nothing to fix): the code-browser file
tree (폴더/파일 rows, breadcrumb), the commit history list, and the per-file diff view — which
already does proper red/green (`DiffAddedColor`/`colorScheme.error`) side-by-side 기존/변경
columns in monospace, in both light and dark mode.
## Known limitations
- Work-items and code-browser screens still don't show which repository/branch they belong to in
their own header — noticed during this review but scoped out (see Scope) since it needs new state
threaded through the ViewModel/use-case layer, not a view-only change.
- Dark-mode review now also covers the code browser and commit/diff screens (see Evidence above), but
not yet notifications/settings/work-items — those still need a dark-mode pass.
- Work-item and PR detail views with real content, and the text/image/CSV/PDF file viewers, haven't
been screen-reviewed yet — this task covers the batch of concrete fixes found so far, not a fully
complete pass.
## Review findings
None yet — no Codex review pending (Codex retired, 2026-09-29).